程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> Windows應用程序的入口函數編寫

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

編輯:關於VC++

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved