#include <windows.h>
#include <stdio.h>
#define MAX_LOADSTRING 256
#define WM_MESSAGE_A WM_USER+1
WCHAR szTitle[MAX_LOADSTRING] = TEXT("demo");
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
VOID CALLBACK TimerProc(HWND hWnd, UINT message, UINT_PTR itimer, DWORD dwTime);
bool InitInstance(HINSTANCE hInstance, int nCmdShow);
ATOM RegisterWndClass(HINSTANCE hInstance);
HANDLE g_hOutput = nullptr;
int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow) {
AllocConsole();
g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
RegisterWndClass(hInstance);
if (!InitInstance(hInstance, nCmdShow)) {
return -1;
}
MSG msg;
/*while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}*/
while (TRUE) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
}
}
return (int)msg.wParam;
}
ATOM RegisterWndClass(HINSTANCE hInstance) {
WNDCLASS wnd;
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.lpfnWndProc = WndProc;
wnd.lpszClassName = szTitle;
wnd.lpszMenuName = NULL;
wnd.style = CS_HREDRAW | CS_VREDRAW;
wnd.hInstance = hInstance;
return RegisterClass(&wnd);
}
bool InitInstance(HINSTANCE hInstance, int nCmdShow) {
HWND hWnd = CreateWindow(szTitle, L"windows", WS_OVERLAPPEDWINDOW, 0, 0, 300, 300,
NULL, NULL, hInstance, NULL);
if (!hWnd)
return false;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return true;
}
void onWMCREATEMessage(HWND hWnd, WPARAM wParam) {
SetTimer(hWnd, 1, 1000, TimerProc);
PostMessage(hWnd, WM_MESSAGE_A, NULL, NULL);
//SendMessage(hWnd, WM_MESSAGE_A, NULL, NULL);
}
void onWMKeyMessage(HWND hWnd, WPARAM wParam) {
wchar_t szTest[256];
swprintf(szTest,256, L"WM_KEYDOWN 的值是: %d\n", wParam);
WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0);
}
void onWMCHARMessage(HWND hWnd, WPARAM wParam) {
wchar_t szTest[256];
swprintf(szTest, 256, L"WM_CHAR 的值是: %d\n", wParam);
WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0);
}
void onWMTIMERMessage(HWND hWnd, WPARAM wParam) {
wchar_t szTest[256];
swprintf(szTest, 256, L"WndProc WM_TIMER 的值是: %d\n", wParam);
WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message){
case WM_CREATE:
onWMCREATEMessage(hWnd, wParam);
return 0;
case WM_KEYDOWN:
onWMKeyMessage(hWnd, wParam);
break;
case WM_CHAR:
onWMCHARMessage(hWnd, wParam);
break;
case WM_TIMER:
onWMTIMERMessage(hWnd, wParam);
return 0;
case WM_MESSAGE_A:
MessageBox(NULL, TEXT(""), TEXT(""), NULL);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
VOID CALLBACK TimerProc(HWND hWnd, UINT message, UINT_PTR itimer, DWORD dwTime) {
wchar_t szTest[256];
swprintf(szTest, 256, L"TimerProc WM_TIMER 的值是: %d\n", message);
WriteConsole(g_hOutput, szTest, lstrlenW(szTest), 0, 0);
}
WIN32 代码测试(消息过程 + 信号)
最新推荐文章于 2022-07-18 03:01:10 发布