操作系統感知事件和傳遞事件是通過消息機制來實現的
typedef struct tagMSG{
??? HWND hwnd;? //窗口的句柄
??? UINT message;
??? WPARAM wParam; //信息的附加參數
??? LPARAM lParam;
??? DWORD time; //消息傳遞的時間
??? POINT pt;?? //消息投遞的時候,光標的位置
}
句柄,資源的標識。操作系統要操作和管理這些資源都是通過句柄來找到對應的資源。按資源的類型,又可以將句柄細分成圖標句柄(HICON)光標句柄(HCURSOR)窗口句柄(HWND)程序實例句柄(HINSTANCE)
UINT,unsigned int
為什么要起這么多變量名(都是int型),為了區分變量的用途
WORD是十六位的整數DWORD是32位的整數
windows程序的入口函數
int WINAPI WinMain(
??? HINSTANCE bInstance, //程序實例
??? HINSTANCE bPrevInstance,//之前的程序實例,在win32下總是為空
??? LPSTR lpCmdLine,//LP long point STR字符串,命令行參數
??? int CmdShow??????? //程序顯示狀態
)
typedef struct _WNDCLASS{
??? UINT???????? style;
??? WNDPROC???? lpfnWndProc;//窗口過程
??? int???????? cbClsExtra;//類的額外數據
??? int??????????? cbWndExtra;//窗口的額外數據
??? HINSTANCE??? hInstance;
??? HICON??????? hIcon;?? //圖標
??? HCURSOR??????? hCursor;? //光標
??? HBRUSH??????? hbrBackground;//畫刷,背景
??? LPCTSTR??????? lpszMenuName;// long point const string
??? LPCTSTR??????? lpszClassName;
}WNDCLASS,*PWNDCLASS;
HWND CreatWindow(
??? LPCTSTR lpClassName,//類的名字,要注冊過的
??? LPCTSTR lpWindowName,//窗口標題
??? DWORD dwStyle,??????? //窗口的類型
??? int x,??????????????? //窗口的水平坐標,horizontal
??? int y,??????????????? //窗口的垂直坐標,vertical,左上角的坐標
??? int nWidth,
??? int nHeight,??????? //窗口的寬度和高度
??? HWND hWndParent,??? //父窗口的句柄
??? HMENU hMenu,??????? //菜單句柄
??? HINSTANCE hInstance,
??? LPVOID lpParam??????? //單文檔用不上
)
BOOL ShowWindow(?
??? HWND hWnd,? //窗口的句柄
??? int nCmdShow //顯示的狀態
)
UpdateWindow(hwnd);//更新窗口
//從消息隊列中獲得一個消息
BOOL GetMessage(
??? LPMSG lpMsg,??? //消息結構體的指針
??? HWND hWnd,??????? //消息所在的窗口句柄,NULL時此線程的所有窗口
??? UINT wMsgFilterMin,
??? UINT wMsgFilterMax//消息范圍,都為0的時候沒有消息過濾
)
TranslateMessage(&msg);//將WM_KeyDown 和 WM_KeyUp轉換成WM_Char消息
DispatchMessage(&msg);//將收到的消息傳到窗口的回調函數中
1:24:13