我的win32窗口程序(第一个,在VS2019通过)

#include<windows.h>  //win32程序需要包含<windows.h>
#include<TCHAR.h>  //程序中使用了TCHAR类型,因此需要包含<TCHAR.h>
static TCHAR szWindowClass[] = _T("WindowClass"); //窗口名字
static TCHAR szTitle[] = _T("我的窗口程序");  //窗口标题

//(先看一至四)第五步:窗口函数中处理窗口消息
//如仅在此做声明,函数的实现可以放到主函数后边,也就是第五步放到第四步之后
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
//CALLBACK代表这个函数是回调函数,也就是作为主函数的参数(这里是在注册窗口时作为
//WNDCLASSEX声明的wcex的成员被主函数调用
{
    PAINTSTRUCT ps;//每个需要显示的窗口都需有一个PAINTSTRUCT结构来记录一些绘制信息,
                   //PAINTSTRUCT结构保存了窗口绘制信息用来绘制窗口
    HDC hdc = {0};//HDC是指向窗体、控件的句柄(带H的基本都是句柄类型),是长整类型。
                  //它唯一标识了如窗口,按钮等对象。由Windows系统定义。
    TCHAR greeting[] = _T("祝大家好!!!");  //窗口中显示的文字
    switch (uMsg) //接收第四步DispatchMessage()发出得消息或者系统直接发出的消息
    {
    case WM_PAINT: //接到由系统发出的WM_PAINT消息时,画出窗口
        hdc = BeginPaint(hWnd, &ps);//开始画hWnd窗口,画窗口的
                                    //可以理解为:hWnd是第二步注册的句柄,但还没
                                    //实际画出,而hdc是已经画出来的窗口的句柄;
                                    //如没有向窗口中写入内容的需要,"hdc="可以没
                                    //空白窗口照样可以画出,hdc是将画出的窗口的句
                                    //柄,这个句柄为写入这个窗口内容的语句使用
        TextOut(hdc, 15, 15, greeting, _tcslen(greeting));//向窗口中写入内容
                                                            
        EndPaint(hWnd, &ps);  
        MessageBox(NULL, _T("回车继续"), _T("Tip"), NULL);
    case  WM_DESTROY://接到DispatchMessage()发来WM_DESTROY消息
        PostQuitMessage(0);//通知系统进程中止退出
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);//由系统默认处理的其它消息
        break;
    }

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
//第一步:注册窗口类:指定窗口的名称与窗口回调函数(在此步骤并无实质窗口显示出来)
    WNDCLASSEX wx = { 0 }; //注意:1.注册的窗口类并不直接显示;
                             //      2.WNDCLASSEX成员很多,先赋值0;
                             //      3.赋值0后,除下面必要的给成员赋值外,其余赋值0的
                             //        均自动使用默认值。
    wx.cbSize = sizeof(WNDCLASSEX);  //因适应不同操作系统版本需要,必须如此赋值不能缺省。
    wx.lpfnWndProc = WindowProc;     //回调函数(在第五步实现),我们的显示内容在回调
                                       //函数中实现
    wx.lpszClassName = szWindowClass;//窗口名称:在程序开始定义
    if (!RegisterClassEx(&wx))  //声明并赋值的wcex窗口类由RegisterClassEx()向系统注册
    {
        MessageBox(NULL, _T("注册窗口失败"), _T("Caption"), NULL);
    }

//第二步:创建窗口,指定注册窗口类,窗口标题,窗口大小
    HWND hWnd = CreateWindow(  //该函数创建一个重叠式窗口、弹出式窗口或子窗口。hWnd是它的句柄。并
                               //指定窗口类、标题、风格、初始位置及大小(可选的)。
        szWindowClass,//程序开始已定义:是窗口的名字,这里是"WindowClass"。这个名字已在第一步注册。
        szTitle,  //程序开始已经定义:是窗口的标题,这里是"我的窗口程序"。
        WS_OVERLAPPEDWINDOW,//窗口类型
        CW_USEDEFAULT,//初始位置 x 用缺省
        CW_USEDEFAULT,//初始位置 y 用缺省
        500, 300,//窗口大小:x=500 y=300
        NULL, //指向被创建窗口的父窗口或所有者窗口的句柄
        NULL, //菜单句柄
        hInstance,//应用程序当前实例句柄(注意,只有运行中的程序实例,才有实例句柄)
        NULL//指向一个值的指针,该值传递给窗口 WM_CREATE 消息
    );
    if (!hWnd)
    {
        MessageBox(NULL, _T("创建窗口失败"),_T("Tip"), NULL);
        return 1;
    }
    //第三步:显示窗口
    ShowWindow(hWnd, nCmdShow);//将窗口在屏幕上显示出来,显示模式nCmdShow按缺省
    //第四步:开始消息循环
    MSG msg = { 0 };//声明一个
    while (GetMessage(&msg, NULL, 0, 0))//从系统消息队列里获得消息
    {
        TranslateMessage(&msg);//virtual-keys消息到characters消息
        DispatchMessage(&msg); //分发消息
    }
    return (int)msg.wParam;//通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值