1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// Windows/Control/Window2.cpp
2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "StdAfx.h"
4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../Common/StringConvert.h"
7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "Window2.h"
10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyextern bool g_IsNT;
13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NWindows {
16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyATOM MyRegisterClass(CONST WNDCLASSW *wndClass);
19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NControl {
22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef UNDER_CE
24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define MY_START_WM_CREATE WM_CREATE
25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#else
26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define MY_START_WM_CREATE WM_NCCREATE
27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystatic LRESULT CALLBACK WindowProcedure(HWND aHWND, UINT message, WPARAM wParam, LPARAM lParam)
30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CWindow tempWindow(aHWND);
32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (message == MY_START_WM_CREATE)
33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    tempWindow.SetUserDataLongPtr((LONG_PTR)(((LPCREATESTRUCT)lParam)->lpCreateParams));
34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CWindow2 *window = (CWindow2 *)(tempWindow.GetUserDataLongPtr());
35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (window != NULL && message == MY_START_WM_CREATE)
36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    window->Attach(aHWND);
37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (window == 0)
38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    #ifndef _UNICODE
40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (g_IsNT)
41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return DefWindowProcW(aHWND, message, wParam, lParam);
42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    else
43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    #endif
44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return DefWindowProc(aHWND, message, wParam, lParam);
45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return window->OnMessage(message, wParam, lParam);
47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CWindow2::CreateEx(DWORD exStyle, LPCTSTR className, LPCTSTR windowName,
50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    DWORD style, int x, int y, int width, int height,
51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    HWND parentWindow, HMENU idOrHMenu, HINSTANCE instance)
52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  WNDCLASS wc;
54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (!::GetClassInfo(instance, className, &wc))
55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    // wc.style          = CS_HREDRAW | CS_VREDRAW;
57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.style          = 0;
58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpfnWndProc    = WindowProcedure;
59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.cbClsExtra     = 0;
60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.cbWndExtra     = 0;
61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hInstance      = instance;
62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hIcon          = NULL;
63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpszMenuName   = NULL;
66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpszClassName  = className;
67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (::RegisterClass(&wc) == 0)
68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return false;
69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return CWindow::CreateEx(exStyle, className, windowName, style,
71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      x, y, width, height, parentWindow, idOrHMenu, instance, this);
72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _UNICODE
75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CWindow2::CreateEx(DWORD exStyle, LPCWSTR className, LPCWSTR windowName,
77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    DWORD style, int x, int y, int width, int height,
78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    HWND parentWindow, HMENU idOrHMenu, HINSTANCE instance)
79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool needRegister;
81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (g_IsNT)
82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    WNDCLASSW wc;
84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    needRegister = ::GetClassInfoW(instance, className, &wc) == 0;
85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  else
87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    WNDCLASSA windowClassA;
89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    AString classNameA;
90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    LPCSTR classNameP;
91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (IS_INTRESOURCE(className))
92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      classNameP = (LPCSTR)className;
93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    else
94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    {
95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      classNameA = GetSystemString(className);
96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      classNameP = classNameA;
97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    }
98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    needRegister = ::GetClassInfoA(instance, classNameP, &windowClassA) == 0;
99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (needRegister)
101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    WNDCLASSW wc;
103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    // wc.style          = CS_HREDRAW | CS_VREDRAW;
104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.style          = 0;
105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpfnWndProc    = WindowProcedure;
106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.cbClsExtra     = 0;
107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.cbWndExtra     = 0;
108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hInstance      = instance;
109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hIcon          = NULL;
110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpszMenuName   = NULL;
113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    wc.lpszClassName  = className;
114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    if (MyRegisterClass(&wc) == 0)
115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return false;
116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return CWindow::CreateEx(exStyle, className, windowName, style,
118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      x, y, width, height, parentWindow, idOrHMenu, instance, this);
119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif
122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyLRESULT CWindow2::DefProc(UINT message, WPARAM wParam, LPARAM lParam)
124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #ifndef _UNICODE
126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (g_IsNT)
127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return DefWindowProcW(_window, message, wParam, lParam);
128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  else
129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  #endif
130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return DefWindowProc(_window, message, wParam, lParam);
131cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
132cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid SrbeckyLRESULT CWindow2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  LRESULT result;
136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  switch (message)
137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_CREATE:
139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (!OnCreate((CREATESTRUCT *)lParam))
140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        return -1;
141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_COMMAND:
143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (OnCommand(wParam, lParam, result))
144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        return result;
145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_NOTIFY:
147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (OnNotify((UINT)wParam, (LPNMHDR) lParam, result))
148cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        return result;
149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_DESTROY:
151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      OnDestroy();
152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_CLOSE:
154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      OnClose();
155cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return 0;
156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case WM_SIZE:
157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      if (OnSize(wParam, LOWORD(lParam), HIWORD(lParam)))
158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky        return 0;
159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
160cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return DefProc(message, wParam, lParam);
161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CWindow2::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT &result)
164cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result);
166cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
168cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CWindow2::OnCommand(int /* code */, int /* itemID */, LPARAM /* lParam */, LRESULT & /* result */)
169cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
170cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return false;
171cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // return DefProc(message, wParam, lParam);
172cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  /*
173cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  if (code == BN_CLICKED)
174cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return OnButtonClicked(itemID, (HWND)lParam);
175cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  */
176cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
177cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
178cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky/*
179cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool CDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
180cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{
181cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  switch(aButtonID)
182cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
183cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDOK:
184cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      OnOK();
185cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
186cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDCANCEL:
187cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      OnCancel();
188cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
189cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    case IDHELP:
190cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      OnHelp();
191cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      break;
192cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    default:
193cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      return false;
194cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
195cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  return true;
196cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}
197cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
198cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky*/
199cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
200cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}}
201