#include <windows.h>
#include <stdio.h>
#include "resource.h"
#define MAX_LOADSTRING 256
WCHAR szTitle[MAX_LOADSTRING] = TEXT("demo");
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
bool InitInstance(HINSTANCE hInstance, int nCmdShow);
ATOM RegisterWndClass(HINSTANCE& hInstance);
HINSTANCE g_hInstance = NULL;
HWND g_hwnd = NULL;
HANDLE g_stdoutput = NULL;
int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow) {
AllocConsole();
g_stdoutput = GetStdHandle(STD_OUTPUT_HANDLE);
g_hInstance = hInstance;
RegisterWndClass(hInstance);
if (!InitInstance(hInstance, nCmdShow)) {
return -1;
}
MSG msg;
/*while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}*/
HACCEL g_hAccel = LoadAccelerators(g_hInstance, (LPCWSTR)IDR_ACCELERATOR);
while (TRUE) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
if (!TranslateAccelerator(g_hwnd, g_hAccel, &msg)) {
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.hCursor = LoadCursor(hInstance, (LPCWSTR)IDC_CURSOR);
//设置图标 (唯一)
//wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.hIcon = LoadIcon(hInstance, (LPCWSTR)(IDI_ICON));
wnd.lpfnWndProc = WndProc;
wnd.lpszClassName = szTitle;
//方法一:注册窗口时注册菜单
wnd.lpszMenuName = (LPCWSTR)IDR_MENU;
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;
g_hwnd = hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return true;
}
// 方法三:窗口创建产生WM_CREATE消息时设置 菜单
void onWM_CREATE(HWND hWnd, WPARAM wParam) {
HMENU hMenu = LoadMenu(g_hInstance, (LPCWSTR)IDR_MENU);
SetMenu(hWnd, hMenu);
}
// 方法二:鼠标移动产生WM_SETCURSOR消息时设置 鼠标样式
void onWM_SETCURSOR(HWND hWnd, WPARAM wParam) {
HCURSOR hCursor = LoadCursor(g_hInstance, (LPCWSTR)IDC_CURSOR);
SetCursor(hCursor);
}
void onWM_COMMAND(HWND hWnd, WPARAM wParam) {
wchar_t szText[256];
memset(szText,0, 256);
switch (HIWORD(wParam))
{
case 0: // 菜单消息
swprintf_s(szText, 256, L"WM_COMMAND frome : Menu\n");
break;
case 1: // 加速键消息
swprintf_s(szText, 256, L"WM_COMMAND frome :Accelerator\n");
break;
default:
break;
}
WriteConsole(g_stdoutput, szText, lstrlenW(szText), NULL, 0);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message)
{
case WM_CREATE:
onWM_CREATE(hWnd, wParam);
break;
case WM_COMMAND:
onWM_COMMAND(hWnd, wParam);
break;
case WM_SETCURSOR:
onWM_SETCURSOR(hWnd, wParam);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
WIN32 代码测试(资源文件)
最新推荐文章于 2023-03-29 08:53:44 发布