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