轉自 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; }到此,所有程序結束,讀者也可以試着自己寫一個類似的程序,加入更多的響應功能。