事件和信息
事件,例如鼠標的單機 會保存很多數據 這個便是信息
Windows爲了能夠準確的描述這些信息,提供了一個結構體:MSG,該結構體裏面記錄的事件的詳細信息.
typedef struct tagMSG {
HWND hwnd; //窗口句柄
UINT message; ///信息類別 下面信息類型
WPARAM wParam;
LPARAM lParam;
DWORD time; //信息創建時間
、
POINT pt; //創建時 鼠標的位置
} MSG, *PMSG;
信息與事件的對應關係
流程
鼠標按下--事件
創建信息-包含鼠標位置 還有類別(左單機 右單機)
將信息放入隊列中 隊列獲取信息 對信息進行處理
將dis加工的信息傳遞給操作系統
系統調用窗口過程函數
第一個win32 代碼編寫
點擊查看代碼
// WindowsProject1.cpp : 定義應用程序的入口點。
//
#include "framework.h"
#include "WindowsProject1.h"
#include <Windows.h>
HINSTANCE hAppInstance;
#define MAX_LOADSTRING 100
// 此代碼模塊中包含的函數的前向聲明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg)
{
//窗口消息
case WM_CREATE:
{
DbgPrintf("WM_CREATE %d %d\n", wParam, lParam);
CREATESTRUCT* createst = (CREATESTRUCT*)lParam;
DbgPrintf("CREATESTRUCT %s\n", createst->lpszClass);
return 0;
}
case WM_MOVE:
{
DbgPrintf("WM_MOVE %d %d\n", wParam, lParam);
POINTS points = MAKEPOINTS(lParam);
DbgPrintf("X Y %d %d\n", points.x, points.y);
return 0;
}
case WM_SIZE:
{
DbgPrintf("WM_SIZE %d %d\n", wParam, lParam);
int newWidth = (int)(short)LOWORD(lParam);
int newHeight = (int)(short)HIWORD(lParam);
DbgPrintf("WM_SIZE %d %d\n", newWidth, newHeight);
return 0;
}
case WM_DESTROY:
{
DbgPrintf("WM_DESTROY %d %d\n", wParam, lParam);
PostQuitMessage(0);
return 0;
}
//鍵盤消息
case WM_KEYUP:
{
DbgPrintf("WM_KEYUP %d %d\n", wParam, lParam);
return 0;
}
case WM_KEYDOWN:
{
DbgPrintf("WM_KEYDOWN %d %d\n", wParam, lParam);
return 0;
}
//鼠標消息
case WM_LBUTTONDOWN:
{
DbgPrintf("WM_LBUTTONDOWN %d %d\n", wParam, lParam);
POINTS points = MAKEPOINTS(lParam);
DbgPrintf("WM_LBUTTONDOWN %d %d\n", points.x, points.y);
return 0;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
hAppInstance = hInstance;
LPCWSTR className = (LPCWSTR)"My First Window";
WNDCLASS wndclass = { 0 };
wndclass.hbrBackground = (HBRUSH)COLOR_MENU;
wndclass.lpfnWndProc = WindowProc;
wndclass.lpszClassName = className;
wndclass.hInstance = hInstance;
RegisterClass(&wndclass);
// 創建窗口
HWND hwnd = CreateWindow(
className,
TEXT("我的第一個窗口"),
WS_OVERLAPPEDWINDOW,
10,
10,
600,
300,
NULL,
NULL,
hInstance,
NULL);
if (hwnd == NULL)
return 0;
// 顯示窗口
ShowWindow(hwnd, SW_SHOW);
// 更新窗口
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}