#include<windows.h>
//6处理窗口过程
// CALLBACK 代表__stdcall 参数的传递顺序,从右到左 以此入栈,并且在函数的返回前 清空堆栈;
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd, //消息所属的窗口句柄
_In_ UINT uMsg, //具体消息名称 WM_xxx消息名
_In_ WPARAM wParam, //键盘附加消息
_In_ LPARAM lParam //鼠标附加消息
)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);//DestroyWindow 发送一个消息 WM_DESTROY
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN: //鼠标左键按下事件
{
char buf[200];
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
wsprintf(buf, TEXT("鼠标位置为:x = %d, y = %d"), xPos, yPos);
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;
}
case WM_KEYDOWN: //键盘按下事件
MessageBox(hwnd, TEXT("键盘按下"), TEXT("提示"), MB_OK);
break;
case WM_PAINT: //绘图
{
PAINTSTRUCT ps; //绘图结构体
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 30, TEXT("绘图"), strlen("绘图"));
EndPaint(hwnd, &ps);
}
default:
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//程序入口函数
//WINAPI 代表__stdcall 参数的传递顺序,从右到左 以此入栈,并且在函数的返回前 清空堆栈;
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;//应用程序实例句柄,传入WinMain中的形参即可。
wc.lpfnWndProc = WindowProc;// 回调函数,窗口过程
wc.lpszClassName = TEXT("WIN");//指定窗口类名称
wc.lpszMenuName = NULL;//菜单名称
wc.style = 0;//显示风格 0 代表默认风格
//2,注册窗口类
RegisterClass(&wc);
//3,创建窗口
/*
lpClassName, 类名
lpWindowName, 标题名
dwStyle, WS_OVERLAPPEDWINDOW 风格
x,y, 显示坐标 CW_USEDEFAULT 默认值
nWidth, 宽 高
nHeight,
hWndParent, 父窗口 nuLL
hMenu, 菜单 NULL;
hInstance, 实例句柄 hInstance
lpParam 附加值 NULL
*/
HWND hwnd =CreateWindow(wc.lpszClassName, TEXT("hello world"), WS_OVERLAPPEDWINDOW, 500, 500, 1000, 300, NULL, NULL, hinstance, NULL);
//4,显示和更新
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//5,通过循环取消息
/*
typedef struct tagMSG {
HWND hwnd; 主窗口句柄
UINT message; 具体消息名称
WPARAM wParam; 附加消息 键盘消息
LPARAM lParam; 附加消息 鼠标消息
DWORD time; 消息产生时间
POINT pt; 附加消息 鼠标消息(x,y)
#ifdef _MAC
DWORD lPrivate;
#endif*/
MSG msg;
while (1)
{
/*
_Out_ LPMSG lpMsg, 消息(指针)
_In_opt_ HWND hWnd, 捕获窗口 填NULL代表捕获所有窗口
_In_ UINT wMsgFilterMin, 最小和最大的过滤消息,一般填入0
_In_ UINT wMsgFilterMax); 填入0 代表捕获所有的消息
*/
if (GetMessage(&msg, NULL, 0, 0) == FALSE)
{
break;
}
//翻译消息
TranslateMessage(&msg);
//不为false 分发消息
DispatchMessage(&msg);
}
return 0;
}
初识MFC
最新推荐文章于 2023-06-19 17:58:38 发布