xref: /aosp_15_r20/external/lzma/CPP/Windows/Control/Window2.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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