1370b324cSopenharmony_ci// Windows/Control/Window2.cpp
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#include "StdAfx.h"
4370b324cSopenharmony_ci
5370b324cSopenharmony_ci#ifndef _UNICODE
6370b324cSopenharmony_ci#include "../../Common/StringConvert.h"
7370b324cSopenharmony_ci#endif
8370b324cSopenharmony_ci
9370b324cSopenharmony_ci#include "Window2.h"
10370b324cSopenharmony_ci
11370b324cSopenharmony_ci#ifndef _UNICODE
12370b324cSopenharmony_ciextern bool g_IsNT;
13370b324cSopenharmony_ci#endif
14370b324cSopenharmony_ci
15370b324cSopenharmony_cinamespace NWindows {
16370b324cSopenharmony_ci
17370b324cSopenharmony_ci#ifndef _UNICODE
18370b324cSopenharmony_ciATOM MyRegisterClass(CONST WNDCLASSW *wndClass);
19370b324cSopenharmony_ci#endif
20370b324cSopenharmony_ci
21370b324cSopenharmony_cinamespace NControl {
22370b324cSopenharmony_ci
23370b324cSopenharmony_ci#ifdef UNDER_CE
24370b324cSopenharmony_ci#define MY_START_WM_CREATE WM_CREATE
25370b324cSopenharmony_ci#else
26370b324cSopenharmony_ci#define MY_START_WM_CREATE WM_NCCREATE
27370b324cSopenharmony_ci#endif
28370b324cSopenharmony_ci
29370b324cSopenharmony_cistatic LRESULT CALLBACK WindowProcedure(HWND aHWND, UINT message, WPARAM wParam, LPARAM lParam)
30370b324cSopenharmony_ci{
31370b324cSopenharmony_ci  CWindow tempWindow(aHWND);
32370b324cSopenharmony_ci  if (message == MY_START_WM_CREATE)
33370b324cSopenharmony_ci    tempWindow.SetUserDataLongPtr((LONG_PTR)(((LPCREATESTRUCT)lParam)->lpCreateParams));
34370b324cSopenharmony_ci  CWindow2 *window = (CWindow2 *)(tempWindow.GetUserDataLongPtr());
35370b324cSopenharmony_ci  if (window && message == MY_START_WM_CREATE)
36370b324cSopenharmony_ci    window->Attach(aHWND);
37370b324cSopenharmony_ci  if (!window)
38370b324cSopenharmony_ci  {
39370b324cSopenharmony_ci    #ifndef _UNICODE
40370b324cSopenharmony_ci    if (g_IsNT)
41370b324cSopenharmony_ci      return DefWindowProcW(aHWND, message, wParam, lParam);
42370b324cSopenharmony_ci    else
43370b324cSopenharmony_ci    #endif
44370b324cSopenharmony_ci      return DefWindowProc(aHWND, message, wParam, lParam);
45370b324cSopenharmony_ci  }
46370b324cSopenharmony_ci  return window->OnMessage(message, wParam, lParam);
47370b324cSopenharmony_ci}
48370b324cSopenharmony_ci
49370b324cSopenharmony_cibool CWindow2::CreateEx(DWORD exStyle, LPCTSTR className, LPCTSTR windowName,
50370b324cSopenharmony_ci    DWORD style, int x, int y, int width, int height,
51370b324cSopenharmony_ci    HWND parentWindow, HMENU idOrHMenu, HINSTANCE instance)
52370b324cSopenharmony_ci{
53370b324cSopenharmony_ci  WNDCLASS wc;
54370b324cSopenharmony_ci  if (!::GetClassInfo(instance, className, &wc))
55370b324cSopenharmony_ci  {
56370b324cSopenharmony_ci    // wc.style          = CS_HREDRAW | CS_VREDRAW;
57370b324cSopenharmony_ci    wc.style          = 0;
58370b324cSopenharmony_ci    wc.lpfnWndProc    = WindowProcedure;
59370b324cSopenharmony_ci    wc.cbClsExtra     = 0;
60370b324cSopenharmony_ci    wc.cbWndExtra     = 0;
61370b324cSopenharmony_ci    wc.hInstance      = instance;
62370b324cSopenharmony_ci    wc.hIcon          = NULL;
63370b324cSopenharmony_ci    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
64370b324cSopenharmony_ci    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
65370b324cSopenharmony_ci    wc.lpszMenuName   = NULL;
66370b324cSopenharmony_ci    wc.lpszClassName  = className;
67370b324cSopenharmony_ci    if (::RegisterClass(&wc) == 0)
68370b324cSopenharmony_ci      return false;
69370b324cSopenharmony_ci  }
70370b324cSopenharmony_ci  return CWindow::CreateEx(exStyle, className, windowName, style,
71370b324cSopenharmony_ci      x, y, width, height, parentWindow, idOrHMenu, instance, this);
72370b324cSopenharmony_ci}
73370b324cSopenharmony_ci
74370b324cSopenharmony_ci#ifndef _UNICODE
75370b324cSopenharmony_ci
76370b324cSopenharmony_cibool CWindow2::CreateEx(DWORD exStyle, LPCWSTR className, LPCWSTR windowName,
77370b324cSopenharmony_ci    DWORD style, int x, int y, int width, int height,
78370b324cSopenharmony_ci    HWND parentWindow, HMENU idOrHMenu, HINSTANCE instance)
79370b324cSopenharmony_ci{
80370b324cSopenharmony_ci  bool needRegister;
81370b324cSopenharmony_ci  if (g_IsNT)
82370b324cSopenharmony_ci  {
83370b324cSopenharmony_ci    WNDCLASSW wc;
84370b324cSopenharmony_ci    needRegister = ::GetClassInfoW(instance, className, &wc) == 0;
85370b324cSopenharmony_ci  }
86370b324cSopenharmony_ci  else
87370b324cSopenharmony_ci  {
88370b324cSopenharmony_ci    WNDCLASSA windowClassA;
89370b324cSopenharmony_ci    AString classNameA;
90370b324cSopenharmony_ci    LPCSTR classNameP;
91370b324cSopenharmony_ci    if (IS_INTRESOURCE(className))
92370b324cSopenharmony_ci      classNameP = (LPCSTR)className;
93370b324cSopenharmony_ci    else
94370b324cSopenharmony_ci    {
95370b324cSopenharmony_ci      classNameA = GetSystemString(className);
96370b324cSopenharmony_ci      classNameP = classNameA;
97370b324cSopenharmony_ci    }
98370b324cSopenharmony_ci    needRegister = ::GetClassInfoA(instance, classNameP, &windowClassA) == 0;
99370b324cSopenharmony_ci  }
100370b324cSopenharmony_ci  if (needRegister)
101370b324cSopenharmony_ci  {
102370b324cSopenharmony_ci    WNDCLASSW wc;
103370b324cSopenharmony_ci    // wc.style          = CS_HREDRAW | CS_VREDRAW;
104370b324cSopenharmony_ci    wc.style          = 0;
105370b324cSopenharmony_ci    wc.lpfnWndProc    = WindowProcedure;
106370b324cSopenharmony_ci    wc.cbClsExtra     = 0;
107370b324cSopenharmony_ci    wc.cbWndExtra     = 0;
108370b324cSopenharmony_ci    wc.hInstance      = instance;
109370b324cSopenharmony_ci    wc.hIcon          = NULL;
110370b324cSopenharmony_ci    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
111370b324cSopenharmony_ci    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
112370b324cSopenharmony_ci    wc.lpszMenuName   = NULL;
113370b324cSopenharmony_ci    wc.lpszClassName  = className;
114370b324cSopenharmony_ci    if (MyRegisterClass(&wc) == 0)
115370b324cSopenharmony_ci      return false;
116370b324cSopenharmony_ci  }
117370b324cSopenharmony_ci  return CWindow::CreateEx(exStyle, className, windowName, style,
118370b324cSopenharmony_ci      x, y, width, height, parentWindow, idOrHMenu, instance, this);
119370b324cSopenharmony_ci}
120370b324cSopenharmony_ci
121370b324cSopenharmony_ci#endif
122370b324cSopenharmony_ci
123370b324cSopenharmony_ciLRESULT CWindow2::DefProc(UINT message, WPARAM wParam, LPARAM lParam)
124370b324cSopenharmony_ci{
125370b324cSopenharmony_ci  #ifndef _UNICODE
126370b324cSopenharmony_ci  if (g_IsNT)
127370b324cSopenharmony_ci    return DefWindowProcW(_window, message, wParam, lParam);
128370b324cSopenharmony_ci  else
129370b324cSopenharmony_ci  #endif
130370b324cSopenharmony_ci    return DefWindowProc(_window, message, wParam, lParam);
131370b324cSopenharmony_ci}
132370b324cSopenharmony_ci
133370b324cSopenharmony_ciLRESULT CWindow2::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
134370b324cSopenharmony_ci{
135370b324cSopenharmony_ci  LRESULT result;
136370b324cSopenharmony_ci  switch (message)
137370b324cSopenharmony_ci  {
138370b324cSopenharmony_ci    case WM_CREATE:
139370b324cSopenharmony_ci      if (!OnCreate((CREATESTRUCT *)lParam))
140370b324cSopenharmony_ci        return -1;
141370b324cSopenharmony_ci      break;
142370b324cSopenharmony_ci    case WM_COMMAND:
143370b324cSopenharmony_ci      if (OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result))
144370b324cSopenharmony_ci        return result;
145370b324cSopenharmony_ci      break;
146370b324cSopenharmony_ci    case WM_NOTIFY:
147370b324cSopenharmony_ci      if (OnNotify((UINT)wParam, (LPNMHDR) lParam, result))
148370b324cSopenharmony_ci        return result;
149370b324cSopenharmony_ci      break;
150370b324cSopenharmony_ci    case WM_DESTROY:
151370b324cSopenharmony_ci      OnDestroy();
152370b324cSopenharmony_ci      break;
153370b324cSopenharmony_ci    case WM_CLOSE:
154370b324cSopenharmony_ci      OnClose();
155370b324cSopenharmony_ci      return 0;
156370b324cSopenharmony_ci    case WM_SIZE:
157370b324cSopenharmony_ci      if (OnSize(wParam, LOWORD(lParam), HIWORD(lParam)))
158370b324cSopenharmony_ci        return 0;
159370b324cSopenharmony_ci  }
160370b324cSopenharmony_ci  return DefProc(message, wParam, lParam);
161370b324cSopenharmony_ci}
162370b324cSopenharmony_ci
163370b324cSopenharmony_ci/*
164370b324cSopenharmony_cibool CWindow2::OnCommand2(WPARAM wParam, LPARAM lParam, LRESULT &result)
165370b324cSopenharmony_ci{
166370b324cSopenharmony_ci  return OnCommand(HIWORD(wParam), LOWORD(wParam), lParam, result);
167370b324cSopenharmony_ci}
168370b324cSopenharmony_ci*/
169370b324cSopenharmony_ci
170370b324cSopenharmony_cibool CWindow2::OnCommand(unsigned /* code */, unsigned /* itemID */, LPARAM /* lParam */, LRESULT & /* result */)
171370b324cSopenharmony_ci{
172370b324cSopenharmony_ci  return false;
173370b324cSopenharmony_ci  // return DefProc(message, wParam, lParam);
174370b324cSopenharmony_ci  /*
175370b324cSopenharmony_ci  if (code == BN_CLICKED)
176370b324cSopenharmony_ci    return OnButtonClicked(itemID, (HWND)lParam);
177370b324cSopenharmony_ci  */
178370b324cSopenharmony_ci}
179370b324cSopenharmony_ci
180370b324cSopenharmony_ci/*
181370b324cSopenharmony_cibool CDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
182370b324cSopenharmony_ci{
183370b324cSopenharmony_ci  switch (buttonID)
184370b324cSopenharmony_ci  {
185370b324cSopenharmony_ci    case IDOK:
186370b324cSopenharmony_ci      OnOK();
187370b324cSopenharmony_ci      break;
188370b324cSopenharmony_ci    case IDCANCEL:
189370b324cSopenharmony_ci      OnCancel();
190370b324cSopenharmony_ci      break;
191370b324cSopenharmony_ci    case IDHELP:
192370b324cSopenharmony_ci      OnHelp();
193370b324cSopenharmony_ci      break;
194370b324cSopenharmony_ci    default:
195370b324cSopenharmony_ci      return false;
196370b324cSopenharmony_ci  }
197370b324cSopenharmony_ci  return true;
198370b324cSopenharmony_ci}
199370b324cSopenharmony_ci
200370b324cSopenharmony_ci*/
201370b324cSopenharmony_ci
202370b324cSopenharmony_ci}}
203