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