版权声明:本文为博主原创文章,转载请注明原创链接! https://blog.csdn.net/qq_34706280/article/details/79348610
代码如下:
#include "Windows.h"
//处理WM_PAINT消息
void OnPaint(HWND hWnd)
{
//获取设备上下文句柄
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hWnd, &ps);
//获取窗口客户去矩形
RECT rcClient;
GetClientRect(hWnd, &rcClient);
//在窗口客户区内显示文本
DrawText(hDC, "Hello , World!", -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
//释放设备上下文
EndPaint(hWnd, &ps);
}
//主窗口过程函数
LRESULT CALLBACK MainWndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
case WM_PAINT: //窗口绘制消息
{
OnPaint(hWnd);
}break;
case WM_DESTROY: //窗口销毁消息
{
PostQuitMessage(0); //投递WM_QUIT消息
return 0;
}break;
}
//对任何消息都不感兴趣,缺省方式处理,直接交给内核
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//注册窗口类
ATOM InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc = {0};
//窗口类的风格, 描述一些共性的信息
wc.style = CS_HREDRAW | CS_VREDRAW;
//主窗口过程函数指针
wc.lpfnWndProc/*是一个函数指针,专门用来处理对象消息的函数*/ = MainWndProc;
//窗口类附加数据字节数 自己定义的数据,指定字节长度
wc.cbClsExtra = 0;
//窗口附加数据字节数,类附加数据全员共享,窗口附加数据是一个窗口一套
wc.cbWndExtra = 0;
//应用程序的实例句柄
wc.hInstance = hInstance;//此处使用了函数参数
//指定窗口图标句柄
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
//窗口光标句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
//背景
wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
//指定菜单名字
wc.lpszMenuName = NULL;//没有菜单
//类名
wc.lpszClassName = "MAIN";
//注册结构,将结构复制进内核
return RegisterClass(&wc);
}
//创建、显示并刷新窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
//创建窗口
HWND hWnd = CreateWindow(
"MAIN", //窗口类的类名
"WinHello", //窗口的标题
WS_OVERLAPPEDWINDOW, //窗口的风格 描述个性化的特征
//窗口的位置和大小
CW_USEDEFAULT, //窗口左上角水平坐标
CW_USEDEFAULT, //窗口左上角垂直坐标
CW_USEDEFAULT, //窗口宽度
CW_USEDEFAULT, //窗口高度 右下角,单位:像素
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //应用程序实力句柄
NULL //扩展数据
);
if(! hWnd)
{
return FALSE;
}
//显示窗口
ShowWindow(hWnd, nCmdShow);
//刷新窗口
UpdateWindow(hWnd);
return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//注册窗口类
if(! InitApplication(hInstance))
{
return 0;
}
//创建、显示并刷新窗口
if(! InitInstance(hInstance, nCmdShow))
{
return 0;
}
//消息泵,即:消息循环
MSG msg = {0};
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg); //间接调用窗口过程函数
}
return 0;
}
在Windows XP系统Visual C++6.0IDE环境下执行结果如下:
Windows的API编写窗体程序非常繁杂。以上带面可以预见。