第一个MFC程序
#include <Windows.h>
//CALLBACK __stdcall 参数的传入顺序:右向左,入栈,函数返回前清空栈
LRESULT CALLBACK WindowProc(
HWND hWnd, //消息产生的窗口句柄
UINT Msg,//具体消息名称 ,WM_XXX消息名(消息名A)A代表鼠标等
WPARAM wParam,//键盘消息
LPARAM lParam //鼠标消息
);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd ){
//1.设计窗口
//2.注册窗口
//3.创建窗口
//4.显示和更新
//5.通过循环取消息
//6.处理消息(窗口过程)
//1.设计窗口
WNDCLASS wc;
wc.cbClsExtra = 0;//类的额外的内存
wc.cbWndExtra = 0;//窗口额外的内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
wc.hCursor = LoadCursor(NULL, IDC_HAND);//设置光标,第一个参数null 系统光标
wc.hIcon = LoadIcon(NULL, IDI_ERROR);// 图标 如果第一个参数NULL,代表系统提供图标
wc.hInstance = hInstance;//应用程序实例句柄
wc.lpfnWndProc = WindowProc;//回调函数
wc.lpszClassName = TEXT("first");// 指定窗口类名称
wc.lpszMenuName = NULL;//菜单
wc.style = 0; // 显示风格 0代表默认风格
//2.注册窗口
RegisterClass(&wc);
//3.创建窗口
/*lpClassName, 类名
lpWindowName, 标题名字
dwStyle, // WS_OVERLAPPEDWINDOW//风格
x, 显示坐标 // CW_USEDEFAULT
y
nWidth,宽高
nHeight,
hWndParent, //父窗口 无即NULL
hMenu,//菜单NULL
hInstance, //实例句柄
lpParam //附加值 鼠标的附加等 null
*/
HWND hwnd = CreateWindow(wc.lpszClassName,
TEXT("Windows"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, hInstance, nullptr);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
/*
HWND hwnd; //主窗口
UINT message;//具体消息名称
WPARAM wParam;//附加消息,键盘消息
LPARAM lParam;// 附加消息,鼠标
DWORD time;// 消息产生的时间
POINT pt;//附加消息 鼠标消息 (坐标点x,y)
*/
while(1) {
/*
_Out_ LPMSG lpMsg,//消息
_In_opt_ HWND hWnd,//捕获窗口 填入NULL代表捕获所有窗口和者进程消息
_In_ UINT wMsgFilterMin, //最小最大过滤消息 一般为零
_In_ UINT wMsgFilterMax); // 填0代表捕获所有消息
*/
if (GetMessage(&msg, NULL, 0, 0) == false) {
break;
}
//不为false
//翻译消息
TranslateMessage(&msg);
//分发消息
DispatchMessage(&msg);
}
return 0;
}
//6.处理消息(窗口过程)
LRESULT CALLBACK WindowProc(
HWND hWnd, //消息产生的窗口句柄
UINT Msg,//具体消息名称 ,WM_XXX消息名(消息名A)A代表鼠标等
WPARAM wParam,//键盘消息
LPARAM lParam //鼠标消息
) {
//消息的处理
switch(Msg)
{//根据不同消息,做不同处理
case WM_CLOSE:{
DestroyWindow(hWnd);//如果只是点关闭,是没有真正解锁进程,而是DestroyWindow 发送另一个消息WM_DESTROY,
break;
}
case WM_DESTROY:{
PostQuitMessage(0);//另上面getMessage()==false,真正关闭程序
}
case WM_LBUTTONDOWN://鼠标左键按下
int xpos = LOWORD(lParam);
int ypos = LOWORD(lParam);
//弹出窗口,参数1那个窗口 2内容,3标题
MessageBox(hWnd,TEXT("hello"),TEXT("success"),MB_OK);
}
//返回默认处理方式
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
用心做~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)