一個(gè)程序二個(gè)窗口
??1?#include?"stdafx.h"
??2?#include?<map>
??3?#include?"MultiWindow.h"
??4?#define?MAX_LOADSTRING?100
??5?using?namespace?std;
??6?//?全局變量:
??7?HINSTANCE?hInst;????????????????????????????????//?當(dāng)前實(shí)例
??8?TCHAR?szTitle[MAX_LOADSTRING];????????????????????//?標(biāo)題欄文本
??9?TCHAR?szWindowClass[MAX_LOADSTRING];????????????//?主窗口類(lèi)名
?10?
?11?//?此代碼模塊中包含的函數(shù)的前向聲明:
?12?ATOM????????????????MyRegisterClass(HINSTANCE?hInstance);
?13?BOOL????????????????InitInstance(HINSTANCE,?int);
?14?LRESULT?CALLBACK????WndProc(HWND,?UINT,?WPARAM,?LPARAM);
?15?LRESULT?CALLBACK????About(HWND,?UINT,?WPARAM,?LPARAM);
?16?using?namespace?std;
?17?
?18?class?CMyWnd;
?19?typedef?map<HWND,CMyWnd*>?MAPHWND2WND;
?20?MAPHWND2WND??mapHWND2Wnd;
?21?
?22?CMyWnd*?tmpMyWnd?=?NULL;
?23?
?24?class?CMyWnd
?25?{
?26?public:
?27?????static?LRESULT?CALLBACK?WndProc(HWND?hWnd,UINT?nMessage,WPARAM?wParam,LPARAM?lParam);
?28?
?29?????LRESULT?WindowProc(UINT?nMessage,WPARAM?wParam,LPARAM?lParam);
?30?
?31?
?32?????CMyWnd()
?33?????{
?34?????????m_hWnd?=?NULL;
?35?????}
?36?????bool?Create()
?37?????{
?38?????????tmpMyWnd??=?this;
?39?
?40?????????m_hWnd??=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW,
?41?????????????0,?0,?100,100,?NULL,?NULL,?hInst,?NULL);
?42?
?43?????????if?(!m_hWnd)
?44?????????????return?false;
?45?
?46?
?47?????????return?true;
?48?????}
?49?
?50?????BOOL?ShowWindow(int?nCmdShow)
?51?????{
?52?????????return?::ShowWindow(m_hWnd,nCmdShow);
?53?????}
?54?
?55?????BOOL?UpdataWindow()
?56?????{
?57?????????return?::UpdateWindow(m_hWnd);
?58?????}
?59?
?60?????virtual?void?OnPaint()
?61?????{
?62?????????PAINTSTRUCT?ps;
?63?????????HDC?hdc?=?BeginPaint(m_hWnd,?&ps);
?64?????????::TextOut(hdc,0,0,"123456",6);
?65?????????EndPaint(m_hWnd,?&ps);
?66?
?67?????}
?68?
?69?????HWND?m_hWnd;
?70?};
?71?
?72?class?CMyWnd2?:?public?CMyWnd
?73?{
?74?public:
?75?????virtual?void?OnPaint()
?76?????{
?77?????????PAINTSTRUCT?ps;
?78?????????HDC?hdc?=?BeginPaint(m_hWnd,?&ps);
?79?????????::TextOut(hdc,0,0,"6789",4);
?80?????????EndPaint(m_hWnd,?&ps);
?81?????}
?82?
?83?????string?m_str;
?84?};
?85?
?86?class?CMyWnd3?:?public?CMyWnd
?87?{
?88?public:
?89?????virtual?void?OnPaint()
?90?????{
?91?????????PAINTSTRUCT?ps;
?92?????????HDC?hdc?=?BeginPaint(m_hWnd,?&ps);
?93?????????::TextOut(hdc,0,0,"000000",6);
?94?????????EndPaint(m_hWnd,?&ps);
?95?????}
?96?
?97?????string?m_str;
?98?};
?99?
100?CMyWnd*?findCMyWnd(HWND?hWnd)
101?{
102?????MAPHWND2WND::iterator?it?=?mapHWND2Wnd.find(hWnd);
103?????if?(it?!=?mapHWND2Wnd.end())
104?????{
105?????????return?it->second;
106?????}
107?????else
108?????{
109?????????mapHWND2Wnd.insert(make_pair(hWnd,tmpMyWnd));
110?
111?????????tmpMyWnd->m_hWnd?=?hWnd;
112?????????return?tmpMyWnd;
113?????????//DebugBreak();
114?????}
115?????return?NULL;
116?}
117?
118?LRESULT?CALLBACK?CMyWnd::WndProc(HWND?hWnd,UINT?nMessage,WPARAM?wParam,LPARAM?lParam)
119?{
120?????CMyWnd*?pWnd?=?findCMyWnd(hWnd);
121?????if?(pWnd?!=?NULL)
122?????{
123?????????return?pWnd->WindowProc(?nMessage,?wParam,?lParam);
124?????}
125?????else
126?????{
127?????????DebugBreak();
128?????}
129?????return?0;
130?}
131?
132?LRESULT?CMyWnd::WindowProc(UINT?nMessage,WPARAM?wParam,LPARAM?lParam)
133?{
134?????if?(nMessage?==?WM_PAINT)
135?????{
136?????????OnPaint();
137?????????return?0;
138?????}
139?????return?::DefWindowProc(m_hWnd,?nMessage,?wParam,?lParam);;
140?}
141?
142?
143?int?APIENTRY?_tWinMain(HINSTANCE?hInstance,
144??????????????????????HINSTANCE?hPrevInstance,
145??????????????????????LPTSTR????lpCmdLine,
146??????????????????????int???????nCmdShow)
147?{
148??????//?TODO:?在此放置代碼。
149?????MSG?msg;
150?????HACCEL?hAccelTable;
151?
152?????//?初始化全局字符串
153?????LoadString(hInstance,?IDS_APP_TITLE,?szTitle,?MAX_LOADSTRING);
154?????LoadString(hInstance,?IDC_MULTIWINDOW,?szWindowClass,?MAX_LOADSTRING);
155?????MyRegisterClass(hInstance);
156?
157?????//?執(zhí)行應(yīng)用程序初始化:
158?????if?(!InitInstance?(hInstance,?nCmdShow))?
159?????{
160?????????return?FALSE;
161?????}
162?
163?????hAccelTable?=?LoadAccelerators(hInstance,?(LPCTSTR)IDC_MULTIWINDOW);
164?
165?????//?主消息循環(huán):
166?????while?(GetMessage(&msg,?NULL,?0,?0))?
167?????{
168?????????if?(!TranslateAccelerator(msg.hwnd,?hAccelTable,?&msg))?
169?????????{
170?????????????TranslateMessage(&msg);
171?????????????DispatchMessage(&msg);
172?????????}
173?????}
174?
175?????return?(int)?msg.wParam;
176?}
177?
178?
179?
180?//
181?//??函數(shù):?MyRegisterClass()
182?//
183?//??目的:?注冊(cè)窗口類(lèi)。
184?//
185?//??注釋:?
186?//
187?//????僅當(dāng)希望在已添加到?Windows?95?的
188?//????“RegisterClassEx”函數(shù)之前此代碼與?Win32?系統(tǒng)兼容時(shí),
189?//????才需要此函數(shù)及其用法。調(diào)用此函數(shù)
190?//????十分重要,這樣應(yīng)用程序就可以獲得關(guān)聯(lián)的
191?//???“格式正確的”小圖標(biāo)。
192?//
193?ATOM?MyRegisterClass(HINSTANCE?hInstance)
194?{
195?????WNDCLASSEX?wcex;
196?
197?????wcex.cbSize?=?sizeof(WNDCLASSEX);?
198?
199?????wcex.style????????????=?CS_HREDRAW?|?CS_VREDRAW;
200?????wcex.lpfnWndProc????=?CMyWnd::WndProc;
201?????wcex.cbClsExtra????????=?0;
202?????wcex.cbWndExtra????????=?0;
203?????wcex.hInstance????????=?hInstance;
204?????wcex.hIcon????????????=?LoadIcon(hInstance,?(LPCTSTR)IDI_MULTIWINDOW);
205?????wcex.hCursor????????=?LoadCursor(NULL,?IDC_ARROW);
206?????wcex.hbrBackground????=?(HBRUSH)(COLOR_WINDOW+1);
207?????wcex.lpszMenuName????=?(LPCTSTR)IDC_MULTIWINDOW;
208?????wcex.lpszClassName????=?szWindowClass;
209?????wcex.hIconSm????????=?LoadIcon(wcex.hInstance,?(LPCTSTR)IDI_SMALL);
210?
211?????return?RegisterClassEx(&wcex);
212?}
213?
214?//
215?//???函數(shù):?InitInstance(HANDLE,?int)
216?//
217?//???目的:?保存實(shí)例句柄并創(chuàng)建主窗口
218?//
219?//???注釋:?
220?//
221?//????????在此函數(shù)中,我們?cè)谌肿兞恐斜4鎸?shí)例句柄并
222?//????????創(chuàng)建和顯示主程序窗口。
223?//
224?BOOL?InitInstance(HINSTANCE?hInstance,?int?nCmdShow)
225?{
226???
227?
228????hInst?=?hInstance;?//?將實(shí)例句柄存儲(chǔ)在全局變量中
229?
230???
231????CMyWnd*?pWnd?=?new?CMyWnd3();
232????if(!pWnd->Create())
233????????return?false;
234????pWnd->ShowWindow(nCmdShow);
235????pWnd->UpdataWindow();
236?
237????pWnd?=?new?CMyWnd2();
238?
239????if?(!pWnd->Create())
240????????return?FALSE;
241????pWnd->ShowWindow(nCmdShow);
242????pWnd->UpdataWindow();
243?
244????return?TRUE;
245?}