Windows窗口原理
消息提示框
参数一: HWND(显示在哪一个窗口之上)
参数二: 所要提示的文本内容(注意使用UniCode编码 例: L"123")
参数三: 消息提示框标题
参数四: 消息提示框中按钮组件(MB_OK) | 图标组件(MB_ICONEXCLAMATION)
MessageBox(NULL, L"First Window!", L"Window", MB_OK);
MessageBox有返回值
例如: IDYES = MessageBox(......); //点击了是按钮
WINAPI : 实质是一个__stdcall(函数调用约定) 的宏
__cdecl 调用方清理栈
__stdcall 被调用方清理栈
MAKEINTRESOURCE(int); //将宏转换为LPSTR类型
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#include<Windows.h>
#include"resource.h"
LRESULT CALLBACK WindowProcfn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
//设计窗口类
WNDCLASS wc = { 0 };
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; //水平重绘 竖直重绘 双击窗口
wc.lpfnWndProc = WindowProcfn; //窗口处理函数
wc.cbClsExtra = 0; //窗口类结构体额外申请字节
wc.cbWndExtra = 0; //窗口实例额外申请字节
wc.hInstance = hInstance; //当前应用程序实例句柄
wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1)); //窗口图标句柄
wc.hCursor = LoadCursor(NULL,IDC_HAND); //窗口光标句柄
wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 255)); //窗口画刷(背景)句柄
wc.lpszMenuName = NULL; //窗口菜单
wc.lpszClassName = L"byteDance"; //窗口类型名;
//注册窗口类
ATOM at = RegisterClass(&wc); //ATOM返回值为 unsigned short 返回0注册窗口失败
if (at == 0)
{
MessageBox(NULL, L"注册窗口失败!", L"温馨提示", MB_YESNO);
}
else
{
MessageBox(NULL, L"注册窗口成功!", L"温馨提示", MB_YESNO);
}
//创建窗口
HWND hWnd = CreateWindow(
L"byteDance", //窗口类型名
L"窗口一", //窗口标题
WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZE | WS_MINIMIZE, //窗口的风格
100,100, //窗口左上角坐标
400,400, //窗口宽高
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //当前应用程序实例句柄类型
NULL //创建窗口添加的附加参数
);
//显示窗口
ShowWindow(hWnd, SW_SHOW); //显示的窗口 显示方式
//更新窗口
UpdateWindow(hWnd);
//消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
//1.将虚拟键消息转换为字符消息
TranslateMessage(&msg);
//2.将消息分发给窗口处理函数
DispatchMessage(&msg);
}
return 0;
}
//定义窗口处理函数
LRESULT CALLBACK WindowProcfn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//消息处理
switch (uMsg)
{
case WM_CLOSE: //窗口关闭消息
DestroyWindow(hWnd); //发送一个WM_DESTROY消息
break;
case WM_DESTROY:
PostQuitMessage(0); //发送一个WM_QUIT消息
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam); //默认窗口处理函数
}