二、C语言创建桌面:Hello World!

一、示例

#include <windows.h>

/**
 * 处理窗口事件的函数
 * @return
 */
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,  HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){

    static TCHAR szClassName[] = TEXT("HelloWin");  //窗口类名
    HWND     hwnd;  //窗口句柄
    MSG      msg;  //消息
    WNDCLASS wndclass;  //窗口类

    /**********第①步:注册窗口类**********/
    //为窗口类的各个字段赋值
    wndclass.style = CS_HREDRAW | CS_VREDRAW;  //窗口风格
    wndclass.lpfnWndProc  = WndProc;  //窗口过程
    wndclass.cbClsExtra   = 0;  //暂时不需要理解
    wndclass.cbWndExtra   = 0;  //暂时不需要理解
    wndclass.hInstance    = hInstance;  //当前窗口句柄
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);  //窗口图标
    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW);  //鼠标样式
    wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);  //窗口背景画刷
    wndclass.lpszMenuName = NULL ;  //窗口菜单
    wndclass.lpszClassName= szClassName;  //窗口类名

    //注册窗口
    RegisterClass(&wndclass);

    /*****第②步:创建窗口(并让窗口显示出来)*****/
    hwnd = CreateWindow(
            szClassName,  //窗口类的名字
            TEXT("Welcome"),  //窗口标题(出现在标题栏)
            WS_OVERLAPPEDWINDOW,  //窗口风格
            CW_USEDEFAULT,  //初始化时x轴的位置
            CW_USEDEFAULT,  //初始化时y轴的位置
            500,  //窗口宽度
            300,  //窗口高度
            NULL,  //父窗口句柄
            NULL,  //窗口菜单句柄
            hInstance,  //当前窗口的句柄
            NULL  //不使用该值
    );

    //显示窗口
    ShowWindow (hwnd, iCmdShow);

    //更新(绘制)窗口
    UpdateWindow (hwnd);

    /**********第③步:消息循环**********/
    // GetMessage 函数用来从消息队列中获取一条消息,并保存到 MSG 结构体变量
    // GetMessage 每获取到一条消息,最终都会丢给窗口过程(WndProc)去处理。
    while(GetMessage(&msg, NULL, 0, 0) ){
        TranslateMessage(&msg);  //翻译消息
        DispatchMessage (&msg);  //分派消息
    }

    return msg.wParam;
}

/**********第④步:窗口过程**********/
/**
 * GetMessage 每获取到一条消息,最终都会丢给窗口过程(WndProc)去处理
 * 窗口过程有一个参数 message,会传入发生的事件类型,常用的有:
 *      WM_CREATE:窗口被创建。
 *      WM_PAINT:窗口需要更新或重绘。
 *      WM_WM_DESTROY:窗口被销毁(关闭)。
 * @param hwnd
 * @param message
 * @param wParam
 * @param lParam
 * @return
 */
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
    HDC         hdc;  //设备环境句柄
    PAINTSTRUCT ps;
    RECT        rect;

    switch (message){
        //窗口绘制消息
        case WM_PAINT:
            hdc = BeginPaint (hwnd, &ps) ;
            GetClientRect (hwnd, &rect) ;
            DrawText(
                    hdc,
                    TEXT("Hello World!"),
                    -1,
                    &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER
            );
            EndPaint (hwnd, &ps) ;
            return 0 ;

            //窗口销毁消息
        case WM_DESTROY:
            PostQuitMessage(0) ;
            return 0 ;
    }
    return DefWindowProc(hwnd, message, wParam, lParam) ;
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值