Windows API编程(二)Hello World程序

版权声明:本文为博主原创文章,转载请注明原创链接! 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编写窗体程序非常繁杂。以上带面可以预见。

猜你喜欢

转载自blog.csdn.net/qq_34706280/article/details/79348610
今日推荐