轉自 http://www.vckbase.com/document/viewdoc/?id=1724
覺得對於理解MFC有作用,下面的東西都是被MFC封裝的。
寫任何一個函數應該有一個該函數的入口了。我們知道c語言裡的入口函數是main()函數,那麼在寫Windows應用程式也是main()嗎?回答當然不是了。我們用的是WinMain()函數,不過我們在寫MFC程式的時候好象沒有看到該函數,其實這是微軟為了協助我們快速寫一個基於Windows應用程式,而把它封裝起來了,當然我們也是可以找到的。在這裡,我們試著自己編寫一個WinMain()函數。好了,我們進入主題吧!首先,我們要包含一些庫。
#include <windows.h>#include <stdio.h>
還有,我們應該學會使用msdn快速尋找到我們所需要的資訊。
這裡,windows是基於訊息的應用程式,我們應該先編寫一個訊息響應函數,即一個回呼函數。
LRESULT CALLBACK WinMYProc( HWND hWnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);
接下來是WinMain
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state){WNDCLASS wndcls;//註冊視窗類別wndcls.cbClsExtra=0;wndcls.cbWndExtra=0;wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//視窗畫刷wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//滑鼠wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);//表徵圖wndcls.hInstance=hInstance;//視窗執行個體wndcls.lpfnWndProc=WinMYProc;//視窗函數wndcls.lpszClassName="BEYOND";//視窗類別名wndcls.lpszMenuName=NULL;//菜單名(這裡為空白)wndcls.style=CS_HREDRAW | CS_VREDRAW;//視窗風格(水平重繪和垂直重繪)RegisterClass(&wndcls);//註冊視窗//註冊完視窗,接著是建立和顯示視窗了HWND hWnd;hWnd=CreateWindow("BEYOND",lovebeyond",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL);//顯示UpdateWindow(hWnd);//更新//接下來是訊息迴圈了MSG msg;while(GetMessage(&msg,NULL,0,0))//當不為WM_QUIT時,繼續訊息迴圈{TranslateMessage(&msg);//用於翻譯訊息DispatchMessage(&msg);//發送訊息}return msg.wParam;//返回一個參數}//訊息響應函數LRESULT CALLBACK WinMYProc( HWND hWnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter){switch(uMsg){case WM_CHAR://鍵盤訊息char szChar[20];sprintf(szChar,"char is %d",wParam);MessageBox(hWnd,szChar,"char",0);break;case WM_LBUTTONDOWN://滑鼠左鍵按下MessageBox(hWnd,"mouse clicked","message",0);break;case WM_PAINT://視窗重繪訊息HDC hDC;PAINTSTRUCT ps;hDC=BeginPaint(hWnd,&ps);TextOut(hDC,0,0,"lovebeyond",strlen("lovebeyond"));EndPaint(hwnd,&ps);break;case WM_CLOSE://關閉訊息if(IDYES==MessageBox(hWnd,"想要結束嗎?","message",MB_YESNO)){DestroyWindow(hWnd);}break;case WM_DESTROY://銷毀視窗訊息PostQuitMessage(0);break;default://預設視窗訊息處理return DefWindowProc(hWnd,uMsg,wParam,lParam);}return 0;}
到此,所有程式結束,讀者也可以試著自己寫一個類似的程式,加入更多的響應功能。