窗口创建流程:
QWinApp-->QDemoWinApp
QWnd-->QMainFrame
QWnd-->QButton
QDemoWinApp theApp
WinMain
{
theApp.InitInstance(); //创建窗口相关工作
theApp,Run(); //消息循环
theApp.ExitImstance(); //退出时收尾工作,释放空间等
}
在WinMain函数中创建QDemoWinApp对象theApp,theApp调用其成员函数,进行窗口的创建、消息循环及收尾工作。
窗口的创建、显示等本属于窗口属性,可以封装到窗口内,在QDemoWinApp类中引用窗口对象(QMainFrame *m_pMainWnd)即可。
ExitInstance函数作用正好可以处理其中的内存释放问题。
现在的重点就转到了如何封装一个窗口类(Qwnd)呢?包括创建窗口的几大要点:注册、创建、显示、更新、窗口过程
为了使Qwnd能够很好地被继承下去,提供虚函数PreCreateWindow(用于注册窗口)、CreateEx(用于创建窗口)。
ShowWindow、UpdateWindow实现显示更新。
而窗口过程WndProc是静态的,不能很好被继承下去,此时就创建辅助过程WindowProc取代它的功能,是它为虚函数,它就可以继承下去了。
问题来了,WndProc是静态的,静态成员是没有this指针的,又怎么得到this指针,让其调用我们的替代品WindowProc呢?
解决方案:当创建窗口完成后,通过子类化SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this);
把this与m_hWnd关联起来,WndProc中虽然没有this,但有hWnd(它就是原来的m_hWnd),
调用GetWindowLong(hWnd,GWL_USERDATA),this(QWnd*)还不手到擒来。
问题又来了,啊,得到了this,怎么还有问题,不是已经可以替换了吗?
是的,有问题,你看看得到this的过程,它需要hWnd,也就是说,
在它无效时的产生的消息就不能发给WindowProc来处理了,那怎么办呢?
解决方案:那就额外加两消息的判断处理呗,想法是对的,的确的这么处理,......嘿嘿,问题又出现了吧,this这时是无效的,无法调用WindowProc了,
哎,怎么这么麻烦,怎么办呢?
要是在WM_CREATE和WM_NCCREATE消息被发送前得到this就好了。怎么办...
CreateWindowEx函数最后一个参数,它是指向CREATESTRUCT结构,也就是在触发WM_CREATE时,窗口过程中lParam中存取的就是它了,
既然这样,那就好办了,让最后一参数传this就好了,
LPCREATESTRUCT pCs = (LPCREATESTRUCT)lParam,pCs->lpCreateParam就是this了,到此大功告成。
然而,系统提供的控件,它的消息是不会在WndProc中处理的,这就需要窗口子类化,
让WndProc代替系统隐藏的标准控件处理过程,既然是子类化(SetWindowLong),
句柄已经产生了,因此WM_CREATE、WM_NCCREATE两消息已经错过了,
为了使我们的窗口也能够处理这两消息,怎么办呢?
就在发一次这两消息呗,调用WindowProc(WM_CREATE,0,0)、WindowProc(WM_NCCREATE,0,0)。
代码如下:
(1)QWnd的封装
1 #pragma once 2 #include "stdafx.h" 3 4 class QWnd 5 { 6 public: 7 QWnd(void); 8 public: 9 ~QWnd(void); 10 11 public: 12 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 13 14 public: 15 virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam); 16 virtual LRESULT Default(UINT uMsg, WPARAM wParam, LPARAM lParam); 17 18 public: 19 virtual BOOL PreCreateWindow(CREATESTRUCT &cs); 20 virtual BOOL CreateEx( 21 DWORD dwExStyle, 22 LPCTSTR lpszClassName, 23 LPCTSTR lpszWindowName, 24 DWORD dwStyle, 25 int x, 26 int y, 27 int nWidth, 28 int nHeight, 29 HWND hWndParent, 30 HMENU nIDorHMenu, 31 LPVOID lpParam = NULL 32 ); 33 34 35 public: 36 BOOL ShowWindow(int nCmdShow); 37 BOOL UpdateWindow(); 38 BOOL DestroyWindow(); 39 40 public: 41 virtual BOOL SubClassWindow(HWND hWnd); 42 virtual QWnd* FromHandle(HWND hWnd); 43 44 //msg 45 public: 46 // WM_ Message Handlers: A - C 47 virtual LRESULT OnActivate(WPARAM wParam, LPARAM lParam); 48 virtual LRESULT OnActivateApp(WPARAM wParam, LPARAM lParam); 49 virtual LRESULT OnAskCbFormatName(WPARAM wParam, LPARAM lParam); 50 virtual LRESULT OnCancelMode(WPARAM wParam, LPARAM lParam); 51 virtual LRESULT OnCaptureChanged(WPARAM wParam, LPARAM lParam); 52 virtual LRESULT OnChangeCbChain(WPARAM wParam, LPARAM lParam); 53 virtual LRESULT OnChar(WPARAM wParam, LPARAM lParam); 54 virtual LRESULT OnCharToItem(WPARAM wParam, LPARAM lParam); 55 virtual LRESULT OnChildActivate(WPARAM wParam, LPARAM lParam); 56 virtual LRESULT OnClose(WPARAM wParam, LPARAM lParam); 57 virtual LRESULT OnCompacting(WPARAM wParam, LPARAM lParam); 58 virtual LRESULT OnCompareItem(WPARAM wParam, LPARAM lParam); 59 virtual LRESULT OnContextMenu(WPARAM wParam, LPARAM lParam); 60 virtual LRESULT OnCopyData(WPARAM wParam, LPARAM lParam); 61 virtual LRESULT OnCreate(WPARAM wParam, LPARAM lParam); 62 63 // WM_ Message Handlers: D - E 64 virtual LRESULT OnDeadChar(WPARAM wParam, LPARAM lParam); 65 virtual LRESULT OnDeleteItem(WPARAM wParam, LPARAM lParam); 66 virtual LRESULT OnDestroy(WPARAM wParam, LPARAM lParam); 67 virtual LRESULT OnDestroyClipboard(WPARAM wParam, LPARAM lParam); 68 virtual LRESULT OnDeviceChange(WPARAM wParam, LPARAM lParam); 69 virtual LRESULT OnDevModeChange(WPARAM wParam, LPARAM lParam); 70 virtual LRESULT OnDrawClipboard(WPARAM wParam, LPARAM lParam); 71 virtual LRESULT OnDrawItem(WPARAM wParam, LPARAM lParam); 72 virtual LRESULT OnDropFiles(WPARAM wParam, LPARAM lParam); 73 virtual LRESULT OnEnable(WPARAM wParam, LPARAM lParam); 74 virtual LRESULT OnEndSession(WPARAM wParam, LPARAM lParam); 75 virtual LRESULT OnEnterIdle(WPARAM wParam, LPARAM lParam); 76 virtual LRESULT OnEraseBkgnd(WPARAM wParam, LPARAM lParam); 77 78 // WM_ Message Handlers: F - K 79 virtual LRESULT OnFontChange(WPARAM wParam, LPARAM lParam); 80 virtual LRESULT OnGetDlgCode(WPARAM wParam, LPARAM lParam); 81 virtual LRESULT OnGetMinMaxInfo(WPARAM wParam, LPARAM lParam); 82 virtual LRESULT OnHelpInfo(WPARAM wParam, LPARAM lParam); 83 virtual LRESULT OnHScroll(WPARAM wParam, LPARAM lParam); 84 virtual LRESULT OnHScrollClipboard(WPARAM wParam, LPARAM lParam); 85 virtual LRESULT OnIconEraseBkgnd(WPARAM wParam, LPARAM lParam); 86 virtual LRESULT OnInitMenu(WPARAM wParam, LPARAM lParam); 87 virtual LRESULT OnInitMenuPopup(WPARAM wParam, LPARAM lParam); 88 virtual LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam); 89 virtual LRESULT OnKeyUp(WPARAM wParam, LPARAM lParam); 90 virtual LRESULT OnKillFocus(WPARAM wParam, LPARAM lParam); 91 92 //WM_ Message Handlers: L - M 93 virtual LRESULT OnLButtonDblClk(WPARAM wParam, LPARAM lParam); 94 virtual LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); 95 virtual LRESULT OnLButtonUp(WPARAM wParam, LPARAM lParam); 96 virtual LRESULT OnMButtonDblClk(WPARAM wParam, LPARAM lParam); 97 virtual LRESULT OnMButtonDown(WPARAM wParam, LPARAM lParam); 98 virtual LRESULT OnMButtonUp(WPARAM wParam, LPARAM lParam); 99 virtual LRESULT OnMDIActivate(WPARAM wParam, LPARAM lParam); 100 virtual LRESULT OnMeasureItem(WPARAM wParam, LPARAM lParam); 101 virtual LRESULT OnMenuChar(WPARAM wParam, LPARAM lParam); 102 virtual LRESULT OnMenuSelect(WPARAM wParam, LPARAM lParam); 103 virtual LRESULT OnMouseActivate(WPARAM wParam, LPARAM lParam); 104 virtual LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam); 105 //virtual LRESULT OnMouseWheel(WPARAM wParam, LPARAM lParam); 106 virtual LRESULT OnMove(WPARAM wParam, LPARAM lParam); 107 virtual LRESULT OnMoving(WPARAM wParam, LPARAM lParam); 108 109 //WM_ Message Handlers: N - O 110 virtual LRESULT OnNcActivate(WPARAM wParam, LPARAM lParam); 111 virtual LRESULT OnNcCalcSize(WPARAM wParam, LPARAM lParam); 112 virtual LRESULT OnNcCreate(WPARAM wParam, LPARAM lParam); 113 virtual LRESULT OnNcDestroy(WPARAM wParam, LPARAM lParam); 114 virtual LRESULT OnNcHitTest(WPARAM wParam, LPARAM lParam); 115 virtual LRESULT OnNcLButtonDblClk(WPARAM wParam, LPARAM lParam); 116 virtual LRESULT OnNcLButtonDown(WPARAM wParam, LPARAM lParam); 117 virtual LRESULT OnNcLButtonUp(WPARAM wParam, LPARAM lParam); 118 virtual LRESULT OnNcMButtonDblClk(WPARAM wParam, LPARAM lParam); 119 virtual LRESULT OnNcMButtonDown(WPARAM wParam, LPARAM lParam); 120 virtual LRESULT OnNcMButtonUp(WPARAM wParam, LPARAM lParam); 121 virtual LRESULT OnNcMouseMove(WPARAM wParam, LPARAM lParam); 122 virtual LRESULT OnNcPaint(WPARAM wParam, LPARAM lParam); 123 virtual LRESULT OnNcRButtonDblClk(WPARAM wParam, LPARAM lParam); 124 virtual LRESULT OnNcRButtonDown(WPARAM wParam, LPARAM lParam); 125 virtual LRESULT OnNcRButtonUp(WPARAM wParam, LPARAM lParam); 126 127 // WM_ Messages: P - R 128 virtual LRESULT OnPaint(WPARAM wParam, LPARAM lParam); 129 virtual LRESULT OnPaintClipboard(WPARAM wParam, LPARAM lParam); 130 virtual LRESULT OnPaletteChanged(WPARAM wParam, LPARAM lParam); 131 virtual LRESULT OnPaletteIsChanging(WPARAM wParam, LPARAM lParam); 132 virtual LRESULT OnParentNotify(WPARAM wParam, LPARAM lParam); 133 virtual LRESULT OnQueryDragIcon(WPARAM wParam, LPARAM lParam); 134 virtual LRESULT OnQueryEndSession(WPARAM wParam, LPARAM lParam); 135 virtual LRESULT OnQueryNewPalette(WPARAM wParam, LPARAM lParam); 136 virtual LRESULT OnQueryOpen(WPARAM wParam, LPARAM lParam); 137 virtual LRESULT OnRButtonDblClk(WPARAM wParam, LPARAM lParam); 138 virtual LRESULT OnRButtonDown(WPARAM wParam, LPARAM lParam); 139 virtual LRESULT OnRButtonUp(WPARAM wParam, LPARAM lParam); 140 virtual LRESULT OnRenderAllFormats(WPARAM wParam, LPARAM lParam); 141 virtual LRESULT OnRenderFormat(WPARAM wParam, LPARAM lParam); 142 143 // WM_ Messages: S 144 virtual LRESULT OnSetCursor(WPARAM wParam, LPARAM lParam); 145 virtual LRESULT OnSetFocus(WPARAM wParam, LPARAM lParam); 146 virtual LRESULT OnShowWindow(WPARAM wParam, LPARAM lParam); 147 virtual LRESULT OnSize(WPARAM wParam, LPARAM lParam); 148 virtual LRESULT OnSizeClipboard(WPARAM wParam, LPARAM lParam); 149 virtual LRESULT OnSizing(WPARAM wParam, LPARAM lParam); 150 virtual LRESULT OnSpoolerStatus(WPARAM wParam, LPARAM lParam); 151 virtual LRESULT OnStyleChanged(WPARAM wParam, LPARAM lParam); 152 virtual LRESULT OnStyleChanging(WPARAM wParam, LPARAM lParam); 153 virtual LRESULT OnSysChar(WPARAM wParam, LPARAM lParam); 154 virtual LRESULT OnSysColorChange(WPARAM wParam, LPARAM lParam); 155 virtual LRESULT OnSysCommand(WPARAM wParam, LPARAM lParam); 156 virtual LRESULT OnSysDeadChar(WPARAM wParam, LPARAM lParam); 157 virtual LRESULT OnSysKeyDown(WPARAM wParam, LPARAM lParam); 158 virtual LRESULT OnSysKeyUp(WPARAM wParam, LPARAM lParam); 159 160 //WM_ Messages: T - Z 161 virtual LRESULT OnTCard(WPARAM wParam, LPARAM lParam); 162 virtual LRESULT OnTimeChange(WPARAM wParam, LPARAM lParam); 163 virtual LRESULT OnTimer(WPARAM wParam, LPARAM lParam); 164 virtual LRESULT OnVKeyToItem(WPARAM wParam, LPARAM lParam); 165 virtual LRESULT OnVScroll(WPARAM wParam, LPARAM lParam); 166 virtual LRESULT OnVScrollClipboard(WPARAM wParam, LPARAM lParam); 167 virtual LRESULT OnWindowPosChanged(WPARAM wParam, LPARAM lParam); 168 virtual LRESULT OnWindowPosChanging(WPARAM wParam, LPARAM lParam); 169 virtual LRESULT OnWinIniChange(WPARAM wParam, LPARAM lParam); 170 171 public: 172 HWND m_hWnd; 173 WNDPROC m_lpfnOldWndProc; 174 175 };
1 #include "QWnd.h" 2 3 QWnd::QWnd(void) 4 { 5 m_hWnd = NULL; 6 m_lpfnOldWndProc = NULL; 7 } 8 9 QWnd::~QWnd(void) 10 { 11 } 12 13 LRESULT CALLBACK QWnd::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 14 { 15 if (WM_CREATE == uMsg || WM_NCCREATE == uMsg) 16 { 17 LPCREATESTRUCT pCs = (LPCREATESTRUCT)lParam; 18 if (pCs) 19 { 20 QWnd *pWnd = (QWnd*)pCs->lpCreateParams; 21 if (pWnd) 22 { 23 pWnd->m_hWnd = hWnd; 24 pWnd->m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hWnd,(LONG)GWL_WNDPROC); 25 26 return pWnd->WindowProc(uMsg,wParam,lParam); 27 } 28 } 29 } 30 31 QWnd *pWnd = (QWnd*)GetWindowLong(hWnd,GWL_USERDATA); 32 if (pWnd) 33 { 34 pWnd->WindowProc(uMsg,wParam,lParam); 35 } 36 return ::DefWindowProc(hWnd,uMsg,wParam,lParam); 37 } 38 39 LRESULT QWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) 40 { 41 switch(uMsg) 42 { 43 case WM_ACTIVATE: 44 return OnActivate(wParam, lParam); 45 case WM_ACTIVATEAPP: 46 return OnActivateApp(wParam, lParam); 47 case WM_ASKCBFORMATNAME: 48 return OnAskCbFormatName(wParam, lParam); 49 case WM_CANCELMODE: 50 return OnCancelMode(wParam, lParam); 51 case WM_CAPTURECHANGED: 52 return OnCaptureChanged(wParam, lParam); 53 case WM_CHANGECBCHAIN: 54 return OnChangeCbChain(wParam, lParam); 55 case WM_CHAR: 56 return OnChar(wParam, lParam); 57 case WM_CHARTOITEM: 58 return OnCharToItem(wParam, lParam); 59 case WM_CHILDACTIVATE: 60 return OnChildActivate(wParam, lParam); 61 case WM_CLOSE: 62 return OnClose(wParam, lParam); 63 case WM_COMPACTING: 64 return OnCompacting(wParam, lParam); 65 case WM_COMPAREITEM: 66 return OnCompareItem(wParam, lParam); 67 case WM_CONTEXTMENU: 68 return OnContextMenu(wParam, lParam); 69 case WM_COPYDATA: 70 return OnCopyData(wParam, lParam); 71 case WM_CREATE: 72 return OnCreate(wParam, lParam); 73 74 case WM_DEADCHAR: 75 return OnDeadChar(wParam, lParam); 76 case WM_DELETEITEM: 77 return OnDeleteItem(wParam, lParam); 78 case WM_DESTROY: 79 return OnDestroy(wParam, lParam); 80 case WM_DESTROYCLIPBOARD: 81 return OnDestroyClipboard(wParam, lParam); 82 case WM_DEVICECHANGE: 83 return OnDeviceChange(wParam, lParam); 84 case WM_DEVMODECHANGE: 85 return OnDevModeChange(wParam, lParam); 86 case WM_DRAWCLIPBOARD: 87 return OnDrawClipboard(wParam, lParam); 88 case WM_DRAWITEM: 89 return OnDrawItem(wParam, lParam); 90 case WM_DROPFILES: 91 return OnDropFiles(wParam, lParam); 92 case WM_ENABLE: 93 return OnEnable(wParam, lParam); 94 case WM_ENDSESSION: 95 return OnEndSession(wParam, lParam); 96 case WM_ENTERIDLE: 97 return OnEnterIdle(wParam, lParam); 98 case WM_ERASEBKGND: 99 return OnEraseBkgnd(wParam, lParam); 100 101 case WM_FONTCHANGE: 102 return OnFontChange(wParam, lParam); 103 case WM_GETDLGCODE: 104 return OnGetDlgCode(wParam, lParam); 105 case WM_GETMINMAXINFO: 106 return OnGetMinMaxInfo(wParam, lParam); 107 case WM_HELP: 108 return OnHelpInfo(wParam, lParam); 109 case WM_HSCROLL: 110 return OnHScroll(wParam, lParam); 111 case WM_HSCROLLCLIPBOARD: 112 return OnHScrollClipboard(wParam, lParam); 113 case WM_ICONERASEBKGND: 114 return OnIconEraseBkgnd(wParam, lParam); 115 case WM_INITMENU: 116 return OnInitMenu(wParam, lParam); 117 case WM_INITMENUPOPUP: 118 return OnInitMenuPopup(wParam, lParam); 119 case WM_KEYDOWN: 120 return OnKeyDown(wParam, lParam); 121 case WM_KEYUP: 122 return OnKeyUp(wParam, lParam); 123 case WM_KILLFOCUS: 124 return OnKillFocus(wParam, lParam); 125 126 case WM_LBUTTONDBLCLK: 127 return OnLButtonDblClk(wParam, lParam); 128 case WM_LBUTTONDOWN: 129 return OnLButtonDown(wParam, lParam); 130 case WM_LBUTTONUP: 131 return OnLButtonUp(wParam, lParam); 132 case WM_MBUTTONDBLCLK: 133 return OnMButtonDblClk(wParam, lParam); 134 case WM_MBUTTONDOWN: 135 return OnMButtonDown(wParam, lParam); 136 case WM_MBUTTONUP: 137 return OnMButtonUp(wParam, lParam); 138 case WM_MDIACTIVATE: 139 return OnMDIActivate(wParam, lParam); 140 case WM_MEASUREITEM: 141 return OnMeasureItem(wParam, lParam); 142 case WM_MENUCHAR: 143 return OnMenuChar(wParam, lParam); 144 case WM_MENUSELECT: 145 return OnMenuSelect(wParam, lParam); 146 case WM_MOUSEACTIVATE: 147 return OnMouseActivate(wParam, lParam); 148 case WM_MOUSEMOVE: 149 return OnMouseMove(wParam, lParam); 150 case WM_MOVE: 151 return OnMove(wParam, lParam); 152 case WM_MOVING: 153 return OnMoving(wParam, lParam); 154 155 case WM_NCACTIVATE: 156 return OnNcActivate(wParam, lParam); 157 case WM_NCCALCSIZE: 158 return OnNcCalcSize(wParam, lParam); 159 case WM_NCCREATE: 160 return OnNcCreate(wParam, lParam); 161 case WM_NCDESTROY: 162 return OnNcDestroy(wParam, lParam); 163 case WM_NCHITTEST: 164 return OnNcHitTest(wParam, lParam); 165 case WM_NCLBUTTONDBLCLK: 166 return OnNcLButtonDblClk(wParam, lParam); 167 case WM_NCLBUTTONDOWN: 168 return OnNcLButtonDown(wParam, lParam); 169 case WM_NCLBUTTONUP: 170 return OnNcLButtonUp(wParam, lParam); 171 case WM_NCMBUTTONDBLCLK: 172 return OnNcMButtonDblClk(wParam, lParam); 173 case WM_NCMBUTTONDOWN: 174 return OnNcMButtonDown(wParam, lParam); 175 case WM_NCMBUTTONUP: 176 return OnNcMButtonUp(wParam, lParam); 177 case WM_NCMOUSEMOVE: 178 return OnNcMouseMove(wParam, lParam); 179 case WM_NCPAINT: 180 return OnNcPaint(wParam, lParam); 181 case WM_NCRBUTTONDBLCLK: 182 return OnNcRButtonDblClk(wParam, lParam); 183 case WM_NCRBUTTONDOWN: 184 return OnNcRButtonDown(wParam, lParam); 185 case WM_NCRBUTTONUP: 186 return OnNcRButtonUp(wParam, lParam); 187 188 case WM_PAINT: 189 return OnPaint(wParam, lParam); 190 case WM_PAINTCLIPBOARD: 191 return OnPaintClipboard(wParam, lParam); 192 case WM_PALETTECHANGED: 193 return OnPaletteChanged(wParam, lParam); 194 case WM_PALETTEISCHANGING: 195 return OnPaletteIsChanging(wParam, lParam); 196 case WM_PARENTNOTIFY: 197 return OnParentNotify(wParam, lParam); 198 case WM_QUERYDRAGICON: 199 return OnQueryDragIcon(wParam, lParam); 200 case WM_QUERYENDSESSION: 201 return OnQueryEndSession(wParam, lParam); 202 case WM_QUERYNEWPALETTE: 203 return OnQueryNewPalette(wParam, lParam); 204 case WM_QUERYOPEN: 205 return OnQueryOpen(wParam, lParam); 206 case WM_RBUTTONDBLCLK: 207 return OnNcRButtonDblClk(wParam, lParam); 208 case WM_RBUTTONDOWN: 209 return OnRButtonDown(wParam, lParam); 210 case WM_RBUTTONUP: 211 return OnRButtonUp(wParam, lParam); 212 case WM_RENDERALLFORMATS: 213 return OnRenderAllFormats(wParam, lParam); 214 case WM_RENDERFORMAT: 215 return OnRenderFormat(wParam, lParam); 216 217 case WM_SETCURSOR: 218 return OnSetCursor(wParam, lParam); 219 case WM_SETFOCUS: 220 return OnSetFocus(wParam, lParam); 221 case WM_SHOWWINDOW: 222 return OnShowWindow(wParam, lParam); 223 case WM_SIZE: 224 return OnSize(wParam, lParam); 225 case WM_SIZECLIPBOARD: 226 return OnSizeClipboard(wParam, lParam); 227 case WM_SIZING: 228 return OnSizing(wParam, lParam); 229 case WM_SPOOLERSTATUS: 230 return OnSpoolerStatus(wParam, lParam); 231 case WM_STYLECHANGED: 232 return OnStyleChanged(wParam, lParam); 233 case WM_STYLECHANGING: 234 return OnStyleChanging(wParam, lParam); 235 case WM_SYSCHAR: 236 return OnSysChar(wParam, lParam); 237 case WM_SYSCOLORCHANGE: 238 return OnSysColorChange(wParam, lParam); 239 case WM_SYSCOMMAND: 240 return OnSysCommand(wParam, lParam); 241 case WM_SYSDEADCHAR: 242 return OnSysDeadChar(wParam, lParam); 243 case WM_SYSKEYDOWN: 244 return OnSysKeyDown(wParam, lParam); 245 case WM_SYSKEYUP: 246 return OnSysKeyUp(wParam, lParam); 247 248 case WM_TCARD: 249 return OnTCard(wParam, lParam); 250 case WM_TIMECHANGE: 251 return OnTimeChange(wParam, lParam); 252 case WM_TIMER: 253 return OnTimer(wParam, lParam); 254 case WM_VKEYTOITEM: 255 return OnVKeyToItem(wParam, lParam); 256 case WM_VSCROLL: 257 return OnVScroll(wParam, lParam); 258 case WM_VSCROLLCLIPBOARD: 259 return OnVScrollClipboard(wParam, lParam); 260 case WM_WINDOWPOSCHANGED: 261 return OnWindowPosChanged(wParam, lParam); 262 case WM_WINDOWPOSCHANGING: 263 return OnWindowPosChanging(wParam, lParam); 264 case WM_WININICHANGE: 265 return OnWinIniChange(wParam, lParam); 266 267 default: 268 break; 269 } 270 271 return Default(uMsg,wParam,lParam); 272 } 273 274 LRESULT QWnd::Default(UINT uMsg, WPARAM wParam, LPARAM lParam) 275 { 276 if (QWnd::WndProc == m_lpfnOldWndProc) 277 { 278 return DefWindowProc(m_hWnd,uMsg,wParam,lParam); 279 } 280 281 return m_lpfnOldWndProc(m_hWnd,uMsg,wParam,lParam); 282 } 283 284 BOOL QWnd::PreCreateWindow(CREATESTRUCT &cs) 285 { 286 WNDCLASSEX wcex; 287 BOOL bRet = ::GetClassInfoEx(cs.hInstance,cs.lpszClass,&wcex); 288 if (bRet) 289 { 290 //::MessageBox(NULL,_T("窗口类已经被注册过"),_T("友情提醒"),MB_OK); 291 return TRUE; 292 } 293 294 wcex.cbClsExtra = 0; 295 wcex.cbSize = sizeof(WNDCLASSEX); 296 wcex.cbWndExtra = 0; 297 wcex.hbrBackground = (HBRUSH)::GetStockObject(GRAY_BRUSH); 298 wcex.hCursor = ::LoadCursor(NULL,IDC_ARROW); 299 wcex.hIcon = ::LoadIcon(NULL,IDI_APPLICATION); 300 wcex.hIconSm = ::LoadIcon(NULL,IDI_APPLICATION); 301 wcex.hInstance = cs.hInstance; 302 wcex.lpfnWndProc = (WNDPROC)WndProc; 303 wcex.lpszClassName = cs.lpszClass; 304 wcex.lpszMenuName = NULL; 305 wcex.style = CS_HREDRAW | CS_VREDRAW; 306 307 return ::RegisterClassEx(&wcex); 308 } 309 310 BOOL QWnd::CreateEx( 311 DWORD dwExStyle, 312 LPCTSTR lpszClassName, 313 LPCTSTR lpszWindowName, 314 DWORD dwStyle, 315 int x, 316 int y, 317 int nWidth, 318 int nHeight, 319 HWND hWndParent, 320 HMENU nIDorHMenu, 321 LPVOID lpParam) 322 { 323 HINSTANCE hInstance = (HINSTANCE)::GetModuleHandle(NULL); 324 CREATESTRUCT cs; 325 cs.cx = nWidth; 326 cs.cy = nHeight; 327 cs.dwExStyle = dwExStyle; 328 cs.hInstance = hInstance; 329 cs.hMenu = nIDorHMenu; 330 cs.hwndParent = hWndParent; 331 cs.lpCreateParams = lpParam; 332 cs.lpszClass = lpszClassName; 333 cs.lpszName = lpszWindowName; 334 cs.style = dwStyle; 335 cs.x = x; 336 cs.y = y; 337 338 BOOL bRet = PreCreateWindow(cs); 339 if (!bRet) 340 { 341 ::MessageBox(NULL,_T("注册窗口类失败"),_T("友情提示"),MB_OK); 342 return FALSE; 343 } 344 345 HWND hWnd = CreateWindowEx(cs.dwExStyle,cs.lpszClass,cs.lpszName,cs.style, 346 cs.x,cs.y,cs.cx,cs.cy,cs.hwndParent,cs.hMenu, 347 cs.hInstance,this); 348 assert(hWnd); 349 m_hWnd = hWnd; 350 351 SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this); 352 m_lpfnOldWndProc = (WNDPROC)GetWindowLong(m_hWnd,GWL_WNDPROC); 353 354 if (QWnd::WndProc != m_lpfnOldWndProc) 355 { 356 SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc); 357 WindowProc(WM_CREATE,0,0); 358 WindowProc(WM_NCCREATE,0,0); 359 } 360 361 ShowWindow(SW_SHOW); 362 UpdateWindow(); 363 364 return TRUE; 365 } 366 367 BOOL QWnd::ShowWindow(int nCmdShow) 368 { 369 assert(m_hWnd); 370 return ::ShowWindow(m_hWnd,nCmdShow); 371 } 372 373 BOOL QWnd::UpdateWindow() 374 { 375 assert(m_hWnd); 376 return ::UpdateWindow(m_hWnd); 377 } 378 379 BOOL QWnd::DestroyWindow() 380 { 381 assert(m_hWnd); 382 return ::DestroyWindow(m_hWnd); 383 } 384 385 BOOL QWnd::SubClassWindow(HWND hWnd) 386 { 387 assert(hWnd); 388 if (m_hWnd == hWnd) 389 { 390 return FALSE; 391 } 392 393 m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC); 394 if (QWnd::WndProc != m_lpfnOldWndProc) 395 { 396 m_hWnd = hWnd; 397 SetWindowLong(hWnd,GWL_USERDATA,(LONG)this); 398 SetWindowLong(hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc); 399 400 return TRUE; 401 } 402 return FALSE; 403 } 404 405 QWnd* QWnd::FromHandle(HWND hWnd) 406 { 407 QWnd *pWnd = (QWnd*)GetWindowLong(hWnd,GWL_WNDPROC); 408 return pWnd; 409 } 410 411 // WM_ Message Handlers: A - C 412 LRESULT QWnd::OnActivate(WPARAM wParam, LPARAM lParam) 413 { 414 return Default(WM_ACTIVATE, wParam, lParam); 415 } 416 417 LRESULT QWnd::OnActivateApp(WPARAM wParam, LPARAM lParam) 418 { 419 return Default(WM_ACTIVATEAPP, wParam, lParam); 420 } 421 422 LRESULT QWnd::OnAskCbFormatName(WPARAM wParam, LPARAM lParam) 423 { 424 return Default(WM_ASKCBFORMATNAME, wParam, lParam); 425 } 426 427 LRESULT QWnd::OnCancelMode(WPARAM wParam, LPARAM lParam) 428 { 429 return Default(WM_CANCELMODE, wParam, lParam); 430 } 431 432 LRESULT QWnd::OnCaptureChanged(WPARAM wParam, LPARAM lParam) 433 { 434 return Default(WM_CAPTURECHANGED, wParam, lParam); 435 } 436 437 LRESULT QWnd::OnChangeCbChain(WPARAM wParam, LPARAM lParam) 438 { 439 return Default(WM_CHANGECBCHAIN, wParam, lParam); 440 } 441 442 LRESULT QWnd::OnChar(WPARAM wParam, LPARAM lParam) 443 { 444 return Default(WM_CHAR, wParam, lParam); 445 } 446 447 LRESULT QWnd::OnCharToItem(WPARAM wParam, LPARAM lParam) 448 { 449 return Default(WM_CHARTOITEM, wParam, lParam); 450 } 451 452 LRESULT QWnd::OnChildActivate(WPARAM wParam, LPARAM lParam) 453 { 454 return Default(WM_CHILDACTIVATE, wParam, lParam); 455 } 456 457 LRESULT QWnd::OnClose(WPARAM wParam, LPARAM lParam) 458 { 459 return Default(WM_CLOSE, wParam, lParam); 460 } 461 462 LRESULT QWnd::OnCompacting(WPARAM wParam, LPARAM lParam) 463 { 464 return Default(WM_COMPACTING, wParam, lParam); 465 } 466 467 LRESULT QWnd::OnCompareItem(WPARAM wParam, LPARAM lParam) 468 { 469 return Default(WM_COMPAREITEM, wParam, lParam); 470 } 471 472 LRESULT QWnd::OnContextMenu(WPARAM wParam, LPARAM lParam) 473 { 474 return Default(WM_CONTEXTMENU, wParam, lParam); 475 } 476 477 LRESULT QWnd::OnCopyData(WPARAM wParam, LPARAM lParam) 478 { 479 return Default(WM_COPYDATA, wParam, lParam); 480 } 481 482 LRESULT QWnd::OnCreate(WPARAM wParam, LPARAM lParam) 483 { 484 return Default(WM_CREATE, wParam, lParam); 485 } 486 487 // WM_ Message Handlers: D - E 488 LRESULT QWnd::OnDeadChar(WPARAM wParam, LPARAM lParam) 489 { 490 return Default(WM_DEADCHAR, wParam, lParam); 491 } 492 493 LRESULT QWnd::OnDeleteItem(WPARAM wParam, LPARAM lParam) 494 { 495 return Default(WM_DELETEITEM, wParam, lParam); 496 } 497 498 LRESULT QWnd::OnDestroy(WPARAM wParam, LPARAM lParam) 499 { 500 return Default(WM_DESTROY, wParam, lParam); 501 } 502 503 LRESULT QWnd::OnDestroyClipboard(WPARAM wParam, LPARAM lParam) 504 { 505 return Default(WM_DESTROYCLIPBOARD, wParam, lParam); 506 } 507 508 LRESULT QWnd::OnDeviceChange(WPARAM wParam, LPARAM lParam) 509 { 510 return Default(WM_DEVICECHANGE, wParam, lParam); 511 } 512 513 LRESULT QWnd::OnDevModeChange(WPARAM wParam, LPARAM lParam) 514 { 515 return Default(WM_DEVMODECHANGE, wParam, lParam); 516 } 517 518 LRESULT QWnd::OnDrawClipboard(WPARAM wParam, LPARAM lParam) 519 { 520 return Default(WM_DRAWCLIPBOARD, wParam, lParam); 521 } 522 523 LRESULT QWnd::OnDrawItem(WPARAM wParam, LPARAM lParam) 524 { 525 return Default(WM_DRAWITEM, wParam, lParam); 526 } 527 528 LRESULT QWnd::OnDropFiles(WPARAM wParam, LPARAM lParam) 529 { 530 return Default(WM_DROPFILES, wParam, lParam); 531 } 532 533 LRESULT QWnd::OnEnable(WPARAM wParam, LPARAM lParam) 534 { 535 return Default(WM_ENABLE, wParam, lParam); 536 } 537 538 LRESULT QWnd::OnEndSession(WPARAM wParam, LPARAM lParam) 539 { 540 return Default(WM_ENDSESSION, wParam, lParam); 541 } 542 543 LRESULT QWnd::OnEnterIdle(WPARAM wParam, LPARAM lParam) 544 { 545 return Default(WM_ENTERIDLE, wParam, lParam); 546 } 547 548 LRESULT QWnd::OnEraseBkgnd(WPARAM wParam, LPARAM lParam) 549 { 550 return Default(WM_ERASEBKGND, wParam, lParam); 551 } 552 553 // WM_ Message Handlers: F - K 554 LRESULT QWnd::OnFontChange(WPARAM wParam, LPARAM lParam) 555 { 556 return Default(WM_FONTCHANGE, wParam, lParam); 557 } 558 559 LRESULT QWnd::OnGetDlgCode(WPARAM wParam, LPARAM lParam) 560 { 561 return Default(WM_GETDLGCODE, wParam, lParam); 562 } 563 564 LRESULT QWnd::OnGetMinMaxInfo(WPARAM wParam, LPARAM lParam) 565 { 566 return Default(WM_GETMINMAXINFO, wParam, lParam); 567 } 568 569 LRESULT QWnd::OnHelpInfo(WPARAM wParam, LPARAM lParam) 570 { 571 return Default(WM_HELP, wParam, lParam); 572 } 573 574 LRESULT QWnd::OnHScroll(WPARAM wParam, LPARAM lParam) 575 { 576 return Default(WM_HSCROLL, wParam, lParam); 577 } 578 579 LRESULT QWnd::OnHScrollClipboard(WPARAM wParam, LPARAM lParam) 580 { 581 return Default(WM_HSCROLLCLIPBOARD, wParam, lParam); 582 } 583 584 LRESULT QWnd::OnIconEraseBkgnd(WPARAM wParam, LPARAM lParam) 585 { 586 return Default(WM_ICONERASEBKGND, wParam, lParam); 587 } 588 589 LRESULT QWnd::OnInitMenu(WPARAM wParam, LPARAM lParam) 590 { 591 return Default(WM_INITMENU, wParam, lParam); 592 } 593 594 LRESULT QWnd::OnInitMenuPopup(WPARAM wParam, LPARAM lParam) 595 { 596 return Default(WM_INITMENUPOPUP, wParam, lParam); 597 } 598 599 LRESULT QWnd::OnKeyDown(WPARAM wParam, LPARAM lParam) 600 { 601 return Default(WM_KEYDOWN, wParam, lParam); 602 } 603 604 LRESULT QWnd::OnKeyUp(WPARAM wParam, LPARAM lParam) 605 { 606 return Default(WM_KEYUP, wParam, lParam); 607 } 608 609 LRESULT QWnd::OnKillFocus(WPARAM wParam, LPARAM lParam) 610 { 611 return Default(WM_KILLFOCUS, wParam, lParam); 612 } 613 614 //WM_ Message Handlers: L - M 615 LRESULT QWnd::OnLButtonDblClk(WPARAM wParam, LPARAM lParam) 616 { 617 return Default(WM_LBUTTONDBLCLK, wParam, lParam); 618 } 619 620 LRESULT QWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam) 621 { 622 return Default(WM_LBUTTONDOWN, wParam, lParam); 623 } 624 625 LRESULT QWnd::OnLButtonUp(WPARAM wParam, LPARAM lParam) 626 { 627 return Default(WM_LBUTTONUP, wParam, lParam); 628 } 629 630 LRESULT QWnd::OnMButtonDblClk(WPARAM wParam, LPARAM lParam) 631 { 632 return Default(WM_MBUTTONDBLCLK, wParam, lParam); 633 } 634 635 LRESULT QWnd::OnMButtonDown(WPARAM wParam, LPARAM lParam) 636 { 637 return Default(WM_MBUTTONDOWN, wParam, lParam); 638 } 639 640 LRESULT QWnd::OnMButtonUp(WPARAM wParam, LPARAM lParam) 641 { 642 return Default(WM_MBUTTONUP, wParam, lParam); 643 } 644 645 LRESULT QWnd::OnMDIActivate(WPARAM wParam, LPARAM lParam) 646 { 647 return Default(WM_MDIACTIVATE, wParam, lParam); 648 } 649 650 LRESULT QWnd::OnMeasureItem(WPARAM wParam, LPARAM lParam) 651 { 652 return Default(WM_MEASUREITEM, wParam, lParam); 653 } 654 655 LRESULT QWnd::OnMenuChar(WPARAM wParam, LPARAM lParam) 656 { 657 return Default(WM_MENUCHAR, wParam, lParam); 658 } 659 660 LRESULT QWnd::OnMenuSelect(WPARAM wParam, LPARAM lParam) 661 { 662 return Default(WM_MENUSELECT, wParam, lParam); 663 } 664 665 LRESULT QWnd::OnMouseActivate(WPARAM wParam, LPARAM lParam) 666 { 667 return Default(WM_MOUSEACTIVATE, wParam, lParam); 668 } 669 670 LRESULT QWnd::OnMouseMove(WPARAM wParam, LPARAM lParam) 671 { 672 return Default(WM_MOUSEMOVE, wParam, lParam); 673 } 674 675 LRESULT QWnd::OnMove(WPARAM wParam, LPARAM lParam) 676 { 677 return Default(WM_MOVE, wParam, lParam); 678 } 679 680 LRESULT QWnd::OnMoving(WPARAM wParam, LPARAM lParam) 681 { 682 return Default(WM_MOVING, wParam, lParam); 683 } 684 685 //WM_ Message Handlers: N - O 686 LRESULT QWnd::OnNcActivate(WPARAM wParam, LPARAM lParam) 687 { 688 return Default(WM_NCACTIVATE, wParam, lParam); 689 } 690 691 LRESULT QWnd::OnNcCalcSize(WPARAM wParam, LPARAM lParam) 692 { 693 return Default(WM_NCCALCSIZE, wParam, lParam); 694 } 695 696 LRESULT QWnd::OnNcCreate(WPARAM wParam, LPARAM lParam) 697 { 698 return Default(WM_NCCREATE, wParam, lParam); 699 } 700 701 LRESULT QWnd::OnNcDestroy(WPARAM wParam, LPARAM lParam) 702 { 703 return Default(WM_NCDESTROY, wParam, lParam); 704 } 705 706 LRESULT QWnd::OnNcHitTest(WPARAM wParam, LPARAM lParam) 707 { 708 return Default(WM_NCHITTEST, wParam, lParam); 709 } 710 711 LRESULT QWnd::OnNcLButtonDblClk(WPARAM wParam, LPARAM lParam) 712 { 713 return Default(WM_NCLBUTTONDBLCLK, wParam, lParam); 714 } 715 716 LRESULT QWnd::OnNcLButtonDown(WPARAM wParam, LPARAM lParam) 717 { 718 return Default(WM_NCLBUTTONDOWN, wParam, lParam); 719 } 720 721 LRESULT QWnd::OnNcLButtonUp(WPARAM wParam, LPARAM lParam) 722 { 723 return Default(WM_NCLBUTTONUP, wParam, lParam); 724 } 725 726 LRESULT QWnd::OnNcMButtonDblClk(WPARAM wParam, LPARAM lParam) 727 { 728 return Default(WM_NCRBUTTONDBLCLK, wParam, lParam); 729 } 730 731 LRESULT QWnd::OnNcMButtonDown(WPARAM wParam, LPARAM lParam) 732 { 733 return Default(WM_NCMBUTTONDOWN, wParam, lParam); 734 } 735 736 LRESULT QWnd::OnNcMButtonUp(WPARAM wParam, LPARAM lParam) 737 { 738 return Default(WM_NCMBUTTONUP, wParam, lParam); 739 } 740 741 LRESULT QWnd::OnNcMouseMove(WPARAM wParam, LPARAM lParam) 742 { 743 return Default(WM_NCMOUSEMOVE, wParam, lParam); 744 } 745 746 LRESULT QWnd::OnNcPaint(WPARAM wParam, LPARAM lParam) 747 { 748 return Default(WM_NCPAINT, wParam, lParam); 749 } 750 751 LRESULT QWnd::OnNcRButtonDblClk(WPARAM wParam, LPARAM lParam) 752 { 753 return Default(WM_NCRBUTTONDBLCLK, wParam, lParam); 754 } 755 756 LRESULT QWnd::OnNcRButtonDown(WPARAM wParam, LPARAM lParam) 757 { 758 return Default(WM_NCRBUTTONDOWN, wParam, lParam); 759 } 760 761 LRESULT QWnd::OnNcRButtonUp(WPARAM wParam, LPARAM lParam) 762 { 763 return Default(WM_NCRBUTTONUP, wParam, lParam); 764 } 765 766 // WM_ Messages: P - R 767 LRESULT QWnd::OnPaint(WPARAM wParam, LPARAM lParam) 768 { 769 return Default(WM_PAINT, wParam, lParam); 770 } 771 772 LRESULT QWnd::OnPaintClipboard(WPARAM wParam, LPARAM lParam) 773 { 774 return Default(WM_PAINTCLIPBOARD, wParam, lParam); 775 } 776 777 LRESULT QWnd::OnPaletteChanged(WPARAM wParam, LPARAM lParam) 778 { 779 return Default(WM_PALETTECHANGED, wParam, lParam); 780 } 781 782 LRESULT QWnd::OnPaletteIsChanging(WPARAM wParam, LPARAM lParam) 783 { 784 return Default(WM_PALETTEISCHANGING, wParam, lParam); 785 } 786 787 LRESULT QWnd::OnParentNotify(WPARAM wParam, LPARAM lParam) 788 { 789 return Default(WM_PARENTNOTIFY, wParam, lParam); 790 } 791 792 LRESULT QWnd::OnQueryDragIcon(WPARAM wParam, LPARAM lParam) 793 { 794 return Default(WM_QUERYDRAGICON, wParam, lParam); 795 } 796 797 LRESULT QWnd::OnQueryEndSession(WPARAM wParam, LPARAM lParam) 798 { 799 return Default(WM_QUERYENDSESSION, wParam, lParam); 800 } 801 802 LRESULT QWnd::OnQueryNewPalette(WPARAM wParam, LPARAM lParam) 803 { 804 return Default(WM_QUERYNEWPALETTE, wParam, lParam); 805 } 806 807 LRESULT QWnd::OnQueryOpen(WPARAM wParam, LPARAM lParam) 808 { 809 return Default(WM_QUERYOPEN, wParam, lParam); 810 } 811 812 LRESULT QWnd::OnRButtonDblClk(WPARAM wParam, LPARAM lParam) 813 { 814 return Default(WM_RBUTTONDBLCLK, wParam, lParam); 815 } 816 817 LRESULT QWnd::OnRButtonDown(WPARAM wParam, LPARAM lParam) 818 { 819 return Default(WM_RBUTTONDOWN, wParam, lParam); 820 } 821 822 LRESULT QWnd::OnRButtonUp(WPARAM wParam, LPARAM lParam) 823 { 824 return Default(WM_RBUTTONUP, wParam, lParam); 825 } 826 827 LRESULT QWnd::OnRenderAllFormats(WPARAM wParam, LPARAM lParam) 828 { 829 return Default(WM_RENDERALLFORMATS, wParam, lParam); 830 } 831 832 LRESULT QWnd::OnRenderFormat(WPARAM wParam, LPARAM lParam) 833 { 834 return Default(WM_RENDERFORMAT, wParam, lParam); 835 } 836 837 838 // WM_ Messages: S 839 LRESULT QWnd::OnSetCursor(WPARAM wParam, LPARAM lParam) 840 { 841 return Default(WM_SETCURSOR, wParam, lParam); 842 } 843 844 LRESULT QWnd::OnSetFocus(WPARAM wParam, LPARAM lParam) 845 { 846 return Default(WM_SETFOCUS, wParam, lParam); 847 } 848 849 LRESULT QWnd::OnShowWindow(WPARAM wParam, LPARAM lParam) 850 { 851 return Default(WM_SHOWWINDOW, wParam, lParam); 852 } 853 854 LRESULT QWnd::OnSize(WPARAM wParam, LPARAM lParam) 855 { 856 return Default(WM_SIZE, wParam, lParam); 857 } 858 859 LRESULT QWnd::OnSizeClipboard(WPARAM wParam, LPARAM lParam) 860 { 861 return Default(WM_SIZECLIPBOARD, wParam, lParam); 862 } 863 864 LRESULT QWnd::OnSizing(WPARAM wParam, LPARAM lParam) 865 { 866 return Default(WM_SIZING, wParam, lParam); 867 } 868 869 LRESULT QWnd::OnSpoolerStatus(WPARAM wParam, LPARAM lParam) 870 { 871 return Default(WM_SPOOLERSTATUS, wParam, lParam); 872 } 873 874 LRESULT QWnd::OnStyleChanged(WPARAM wParam, LPARAM lParam) 875 { 876 return Default(WM_STYLECHANGED, wParam, lParam); 877 } 878 879 LRESULT QWnd::OnStyleChanging(WPARAM wParam, LPARAM lParam) 880 { 881 return Default(WM_STYLECHANGING, wParam, lParam); 882 } 883 884 LRESULT QWnd::OnSysChar(WPARAM wParam, LPARAM lParam) 885 { 886 return Default(WM_SYSCHAR, wParam, lParam); 887 } 888 889 LRESULT QWnd::OnSysColorChange(WPARAM wParam, LPARAM lParam) 890 { 891 return Default(WM_SYSCOLORCHANGE, wParam, lParam); 892 } 893 894 LRESULT QWnd::OnSysCommand(WPARAM wParam, LPARAM lParam) 895 { 896 return Default(WM_SYSCOMMAND, wParam, lParam); 897 } 898 899 LRESULT QWnd::OnSysDeadChar(WPARAM wParam, LPARAM lParam) 900 { 901 return Default(WM_DEADCHAR, wParam, lParam); 902 } 903 904 LRESULT QWnd::OnSysKeyDown(WPARAM wParam, LPARAM lParam) 905 { 906 return Default(WM_SYSKEYDOWN, wParam, lParam); 907 } 908 909 LRESULT QWnd::OnSysKeyUp(WPARAM wParam, LPARAM lParam) 910 { 911 return Default(WM_SYSKEYUP, wParam, lParam); 912 } 913 914 //WM_ Messages: T - Z 915 LRESULT QWnd::OnTCard(WPARAM wParam, LPARAM lParam) 916 { 917 return Default(WM_TCARD, wParam, lParam); 918 } 919 920 LRESULT QWnd::OnTimeChange(WPARAM wParam, LPARAM lParam) 921 { 922 return Default(WM_TIMECHANGE, wParam, lParam); 923 } 924 925 LRESULT QWnd::OnTimer(WPARAM wParam, LPARAM lParam) 926 { 927 return Default(WM_TIMECHANGE, wParam, lParam); 928 } 929 930 LRESULT QWnd::OnVKeyToItem(WPARAM wParam, LPARAM lParam) 931 { 932 return Default(WM_VKEYTOITEM, wParam, lParam); 933 } 934 935 LRESULT QWnd::OnVScroll(WPARAM wParam, LPARAM lParam) 936 { 937 return Default(WM_VSCROLL, wParam, lParam); 938 } 939 940 LRESULT QWnd::OnVScrollClipboard(WPARAM wParam, LPARAM lParam) 941 { 942 return Default(WM_VSCROLLCLIPBOARD, wParam, lParam); 943 } 944 945 LRESULT QWnd::OnWindowPosChanged(WPARAM wParam, LPARAM lParam) 946 { 947 return Default(WM_WINDOWPOSCHANGED, wParam, lParam); 948 } 949 950 LRESULT QWnd::OnWindowPosChanging(WPARAM wParam, LPARAM lParam) 951 { 952 return Default(WM_WINDOWPOSCHANGING, wParam, lParam); 953 } 954 955 LRESULT QWnd::OnWinIniChange(WPARAM wParam, LPARAM lParam) 956 { 957 return Default(WM_WININICHANGE, wParam, lParam); 958 }
(2)QWinApp的实现
1 #pragma once 2 #include "stdafx.h" 3 4 class QWinApp 5 { 6 public: 7 QWinApp(void); 8 public: 9 ~QWinApp(void); 10 public: 11 virtual BOOL InitInstance(); 12 virtual BOOL ExitInstance(); 13 void Run(); 14 };
1 #include "QWinApp.h" 2 3 QWinApp::QWinApp(void) 4 { 5 } 6 7 QWinApp::~QWinApp(void) 8 { 9 } 10 11 BOOL QWinApp::InitInstance() 12 { 13 return TRUE; 14 } 15 16 BOOL QWinApp::ExitInstance() 17 { 18 return TRUE; 19 } 20 21 void QWinApp::Run() 22 { 23 MSG msg; 24 while (::GetMessage(&msg,NULL,0,0)) 25 { 26 ::TranslateMessage(&msg); 27 ::DispatchMessage(&msg); 28 } 29 }
(3)QMainFrame的实现
1 #pragma once 2 #include "qwnd.h" 3 #include "QButton.h" 4 5 class QMainFrame : 6 public QWnd 7 { 8 public: 9 QMainFrame(void); 10 public: 11 ~QMainFrame(void); 12 13 public: 14 virtual LRESULT OnCreate(WPARAM wParam, LPARAM lParam); 15 virtual LRESULT OnClose(WPARAM wParam, LPARAM lParam); 16 virtual LRESULT OnDestroy(WPARAM wParam, LPARAM lParam); 17 18 public: 19 QButton m_wndButton; 20 };
1 #include "QMainFrame.h" 2 3 QMainFrame::QMainFrame(void) 4 { 5 } 6 7 QMainFrame::~QMainFrame(void) 8 { 9 } 10 11 LRESULT QMainFrame::OnCreate(WPARAM wParam, LPARAM lParam) 12 { 13 m_wndButton.CreateEx(_T("IT学吧"),WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 14 300,100,400,200,m_hWnd,(HMENU)1000); 15 return TRUE; 16 } 17 18 LRESULT QMainFrame::OnClose(WPARAM wParam, LPARAM lParam) 19 { 20 return DestroyWindow(); 21 } 22 23 LRESULT QMainFrame::OnDestroy(WPARAM wParam, LPARAM lParam) 24 { 25 ::PostQuitMessage(0); 26 return TRUE; 27 }
(4)QDemoWinApp的实现
1 #pragma once 2 #include "qwinapp.h" 3 #include "QMainFrame.h" 4 5 class QDemoWinApp : 6 public QWinApp 7 { 8 public: 9 QDemoWinApp(void); 10 public: 11 ~QDemoWinApp(void); 12 13 public: 14 virtual BOOL InitInstance(); 15 virtual BOOL ExitInstance(); 16 17 public: 18 QMainFrame *m_pMainWnd; 19 };
1 #include "QDemoWinApp.h" 2 3 QDemoWinApp::QDemoWinApp(void) 4 { 5 m_pMainWnd = NULL; 6 } 7 8 QDemoWinApp::~QDemoWinApp(void) 9 { 10 } 11 12 BOOL QDemoWinApp::InitInstance() 13 { 14 QMainFrame *pMainWnd = new QMainFrame(); 15 assert(pMainWnd); 16 m_pMainWnd = pMainWnd; 17 18 pMainWnd->CreateEx(0,_T("WinTest"),_T("IT学吧"),WS_VISIBLE | WS_OVERLAPPEDWINDOW, 19 CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, 20 NULL,NULL); 21 pMainWnd->ShowWindow(SW_SHOW); 22 pMainWnd->UpdateWindow(); 23 24 return TRUE; 25 } 26 27 BOOL QDemoWinApp::ExitInstance() 28 { 29 if (NULL != m_pMainWnd) 30 { 31 delete m_pMainWnd; 32 m_pMainWnd = NULL; 33 } 34 35 return TRUE; 36 }
(5)QButton的实现
1 #pragma once 2 #include "qwnd.h" 3 4 class QButton : 5 public QWnd 6 { 7 public: 8 QButton(void); 9 public: 10 ~QButton(void); 11 12 public: 13 virtual BOOL CreateEx(LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu); 14 };
1 #include "QButton.h" 2 3 QButton::QButton(void) 4 { 5 } 6 7 QButton::~QButton(void) 8 { 9 } 10 11 BOOL QButton::CreateEx(LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu) 12 { 13 return QWnd::CreateEx(0,_T("BUTTON"),lpszWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,nIDorHMenu); 14 }

浙公网安备 33010602011771号