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