Windows應用程式入口函數編寫

來源:互聯網
上載者:User

轉自 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;}

到此,所有程式結束,讀者也可以試著自己寫一個類似的程式,加入更多的響應功能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.