C++ win32 应用程序

#include <windows.h>                               //一个windows应用程序应该包含的头文件
#include <stdio.h>                                 //标准输入输出流文件

                                                   //声明一个回调函数  
LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lparam);
//窗口句柄,窗口消息

//创建一个完整的窗口需要经过四个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口
//WinMain:Windows 程序的入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{   //hInstance 实例句柄、hPrevInstance默认这个参数为NULL、lpCmdLine存储一个命令行参数

    WNDCLASS wndcls;            //定义一个窗口对象
    wndcls.cbClsExtra = 0;      //指定额外内存空间
    wndcls.cbWndExtra = 0;      //指定额外内存空间
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   //指定窗口背景颜色
    wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);                 //设置光标样式
    wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);                     //设置图标样式
    wndcls.hInstance = hInstance;                                 //指定窗口实例句柄
    wndcls.lpfnWndProc = WinSunProc;                              //指定窗口函数、窗口主处理函数
    wndcls.lpszClassName = "Visual C++ Game";                     //窗口类名称
    wndcls.lpszMenuName = NULL;                                   //菜单
    wndcls.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndcls);                    //注册窗口类
    HWND hwnd;                                 //声名窗口句柄

    //创建窗口,但是这里的窗口是不会显示的
    hwnd = CreateWindow
        ("Visual C++ Game",                      // 已注册窗口类的名称   
        "Visual C++ 游戏开发",                  //窗口标题
        WS_OVERLAPPEDWINDOW,                    //窗口风格
        200,                                    //窗口位置的横坐标
        200,                                    //窗口位置的纵坐标
        600,                                    //窗口宽度
        400,                                    //窗口高度
        NULL,
        NULL,
        hInstance,                              //实例句柄
        NULL
        );
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);               //更新显示
    //初始化完成后,WinMain进入消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);          //转换键盘消息
        DispatchMessage(&msg);           //分派消息
    }
    return 0;
}
    //窗口函数,窗口函数通常利用switch/case 方式判断消息的种类,以决定处置方式,由于其被Windows 系统所调用的,所以这是一种call back 函数
    LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)                  //判断消息类型
        {
        case WM_PAINT:                 //更新窗口消息
            HDC hDC;                   //定义 hDC 设备
            PAINTSTRUCT ps;
            hDC = BeginPaint(hwnd, &ps);       //得到设备hDC
            TextOut(hDC, 200, 0, "游戏的世界", strlen("游戏的世界"));
            EndPaint(hwnd, &ps);
            break;
        case WM_CLOSE:                        //当单击关闭按钮时,产生关闭消息
            if (IDYES == MessageBox(hwnd, "是否真的结束?","游戏开发", MB_YESNO))
            {
                DestroyWindow(hwnd);              //单击“确认”按钮,销毁窗口
            }
            break;
        case WM_DESTROY:                         //销毁窗口消息
            PostQuitMessage(0);                  //退出程序
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam,lParam);
            //在default 处必须调用DefWindowProc,这是Windows内部默认的消息处理函数
        }
        return 0;
    }

转载于:https://my.oschina.net/u/3244697/blog/1504366

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值