c++ windows编程winmain函数模板
新建windows窗口,添加窗口过程处理函数模板
#include "windows.h"
#include <iostream>
#include <string>
using namespace std;
/*****
* CALLBACK代表__stdcall 参数的传递顺序 从右到左 依次入栈 并且在函数返回前 依次出栈
* HWND UINT WPARAM LPARAM
* 消息所属的窗口句柄
* 消息名称 WM_XXX消息名
* 键盘附加消息
* 鼠标附加消息
*/
LRESULT CALLBACK WindowProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
}
break;
case WM_PAINT:
{
}
break;
case WM_SIZE:
{
}
break;
case WM_COMMAND:
{
}
break;
case WM_LBUTTONDOWN:
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buffer[256];
sprintf(buffer, "xPos: %d, yPos: %d", xPos, yPos);
MessageBox(hWindow, TEXT(buffer), TEXT("WM_LBUTTONDOWN"), MB_OK);
}
break;
case WM_KEYDOWN:
{
}
break;
case WM_CLOSE:
{
DestroyWindow(hWindow);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
}
break;
default:
{
}
}
return DefWindowProc(hWindow, uMsg, wParam, lParam);
}
// WINAPI代表__stdcall 参数的传递顺序 从右到左 依次入栈 并且在函数返回前 依次出栈
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.cbClsExtra = 0; // 类的额外内存
wc.cbWndExtra = 0; // 窗口额外内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标 第一个为NULL代表使用系统提供的光标
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 图标 第一个为NULL代表使用系统提供的图标
wc.hInstance = hInstance; // 应用程序实例句柄
wc.lpfnWndProc = WindowProc; // 回调函数
wc.lpszClassName = TEXT("main"); // 窗口类名称
wc.lpszMenuName = NULL; // 菜单名称
wc.style = CS_HREDRAW | CS_VREDRAW; // 显示风格
RegisterClass(&wc);
/*****
* CreateWindow()
* lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam
* 类名
* 标题名
* WS_OVERLAPPEDWINDOW 混合风格
* x坐标 CW_USEDEFAULT
* y坐标
* 宽
* 高
* 父窗口 NULL
* 菜单 NULL
* 实例句柄 hInstance
* 附加值
*/
HWND hWnd = CreateWindow(wc.lpszClassName, TEXT("Windows"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
if (hWnd == NULL)
{
return 0;
}
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
/*****
* HWND hwnd; 主窗口句柄
* UINT message; 具体消息名称
* WPARAM wParam; 附加消息 键盘消息
* LPARAM lParam; 附加消息 鼠标消息
* DWORD time; 消息产生时间
* POINT pt; 附加消息 鼠标消息 x y
*/
MSG msg;
/*****
* LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax
* 消息
* 捕获窗口 NULL代表捕获所有窗口
* 最小的过滤消息 0代表捕获所有消息
* 最大的过滤消息 0代表捕获所有消息
*/
while (GetMessage(&msg, NULL, 0, 0))
{
// 如果按的是组合键 需要翻译
TranslateMessage(&msg);
// 单按一个键盘就直接分发消息
DispatchMessage(&msg);
}
return 0;
}
作者:chacebai
出处:https://www.cnblogs.com/chacebai/p/16425825.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)