#include <windows.h>
#include <tchar.h>
static TCHAR szWindowClass[] = _T("WindowClass");
static TCHAR szTitle[] = _T("我的第一个程序");
//第五步:窗口函数中处理窗口消息
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc; //HDC绘图句柄
TCHAR greeting[] = _T("第一个程序");
switch (uMsg)
{
case WM_CLOSE:
{
int iRet = MessageBox(hWnd, _T("要关闭窗口吗?"), _T("Tip"), MB_OKCANCEL);
if (iRet == IDOK) PostQuitMessage(0);
}
break;
case WM_PAINT: //第一次创建窗口
hdc = BeginPaint(hWnd, &ps); //准备指定的绘图窗口
TextOut(hdc, 100, 100, greeting, _tcslen(greeting)); //在指定位置写一个字符串
EndPaint(hWnd, &ps); //在指定的窗口绘画结束
break;
case WM_DESTROY://点击关闭按钮
PostQuitMessage(0);//指定应用程序退出
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam); //吧没用的消息丢给他处理
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//第一步:注册窗口类,指定窗口类的名称与窗口回调函数
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX); //注册窗口类的大小
wcex.lpfnWndProc = WindowProc; //处理消息,当有消息产生都交给他处理
wcex.lpszClassName = szWindowClass;//注册窗口
if (!RegisterClassEx(&wcex)) //判断是否注册成功
{
MessageBox(NULL, _T("注册窗口类失败"), _T("Tip"), NULL);
return 1;
}
//第二步:创建窗口,指定注册窗口类,窗口标题,窗口的大小
HWND hWnd = CreateWindow(
szWindowClass, //只有先注册了该窗口,才能创建该窗口
szTitle, //窗口名
WS_OVERLAPPEDWINDOW | WS_MAXIMIZE, //窗口样式
400,250, // 窗口x与y坐标
500, 300,//窗口的宽度与高度
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd) //窗口是否创建成功
{
MessageBox(NULL, _T("创建窗口失败!"), _T("Tip"), NULL);
return 1;
}
//第三步:显示窗口
ShowWindow(hWnd, nCmdShow);
//第四步:开始消息循环
MSG msg = { 0 }; //定义消息结构体变量
while (GetMessage(&msg, NULL, 0, 0)) //判断是否存在消息
{
TranslateMessage(&msg); //将虚拟消息转化字符消息
DispatchMessage(&msg); //该函数调度一个消息给窗口程序
}
return (int)msg.wParam;
}
流程:
1.注册窗口
2.创建窗口
3.显示窗口
4.开始消息循环
5.窗口函数中处理窗口消息.