Windows應用程式的入口函數編寫

來源:互聯網
上載者:User

寫任何一個函數當然應該有一個該函數的入口了。我們知道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
);

接下來是WinMainint 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;
}

到此,所有程式結束,讀者也可以試著自己寫一個類似的程式,加入更多的響應 功能。這裡就到此結束。希望對大家瞭解windows程式有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.