VC++之Windows程式運行原理小計

來源:互聯網
上載者:User

Windows程式運行原理

概述
入口函數----視窗-----訊息迴圈----回呼函數

1.程式入口函數WinMain
int WINAPI WinMain(
  HINSTANCE hInstance;
  HINSTANCE hPrevInstance;
  LPSTR lpCmdLine; //run command
  int nCmdShow; //show state
);

WinMain函數由作業系統調用,裡面的所有參數都由作業系統賦值.
作業系統啟動應用程式時,給它分配一個執行個體號,放到hInstance中,如果有參數,則放到lpCmdLine中,以及應用程式的狀態等都由作業系統調用WinMain來實現.

2.視窗
1)設計一個視窗類別;
2)註冊一個視窗;
3)建立視窗;
4)顯示及更新視窗;

1)WNDCLASS wndclass;
2)RegisterClass(CONST WNDCLASS *lpWndClass);
3)HWND CreateWindow(
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam);
4)BOOL ShowWindow(HWND hWnd, int nCmdShow);
UpdateWindow(HWND hwnd);

typedef struct{
  UINT style;
  WNDPROC lpfnWndProc;
  int cbClsExtra; //視窗類別的額外資料
  int cbWndExtra; //視窗的額外資料
  HINSTANCE hInstance; //the instance of current application
  HICON hIcon;
  HCURSOR hCursor;
  HBRUSH hbrBackground;
  LPCTSTR lpszMenuName;
  LPCTSTR lpszClassName;
}WNDCLASS,*PWNDCLASS;

--lpfnWndProc 過程函數(回呼函數)
處理事件的代碼;
由作業系統調用;
放置由使用者編寫的代碼;

3.過程函數(回呼函數)
LRESULT CALLBACK WindowProc(
  HWND hwnd,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
);

作業系統針對特定事件根據什麼來調用相應過程函數進行處理?
調用的是接受訊息的視窗所屬類型中lpfnWndProc成員指定的函數.每一種視窗都有自己專屬的回呼函數.

--hInstance 當前應用程式執行個體號
由WinMain函數中的hInstance形參賦值

4.訊息
作業系統將每一個事件封裝成訊息的結構體MSG傳遞給應用程式
MSG定義:
typedef struct tagMSG{  
  HWND hwnd; //handle to window --1 
  UINT message; // --2
  WPARAM wParam;
  LPARAM lParam;
  DWORD time;
  POINT pt;
}

--1 控制代碼
資源的標識
表徵圖,游標,視窗,執行個體

--2 宏
用來代替數值,WM開頭

5.訊息迴圈
應用程式通過GetMessage函數來叫用作業系統放到訊息佇列中的訊息.
BOOL GetMessage(
  LPMSG lpMsg,
  HWND hWnd,
  UINT wMsgFilterMin,
  UINT wMsgFilterMax
);

TranslateMessage()對取到的WM_KEYDOWN,WM_KEYUP訊息進行轉換,轉換為一個WM_CHAR訊息
放到訊息佇列中。
DispatchMessage()將收到的訊息傳到作業系統,然後作業系統將MSG結構體中前四個參數傳
遞給回調節函數,並調用這個回呼函數中進行處理。

相關文章

聯繫我們

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