Riordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

窗口创建流程:

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 };
View Code
  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 }
View Code

(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 };
View Code
 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 }
View Code

(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 };
View Code
 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 }
View Code

(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 };
View Code
 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 }
View Code

(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 };
View Code
 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 }
View Code

 

posted on 2013-08-01 13:06  Riordon  阅读(6951)  评论(0)    收藏  举报