窗口創建流程:
QWinApp-->QDemoWinApp
QWnd-->QMainFrame
QWnd-->QButtonQDemoWinApp 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