WIN32模态对话框按钮消息处理

       本文根据网络课程学习笔记整理,内容为建立了一个win32模态对话框,并拖入两个按钮后对按钮消息进行处理,程序在VS2019上运行通过。对代码做了详细注释。

一、视窗部分:
      1.  右键方案名(解决方案资源管理器中的方案名)->添加->资源->Dialog->创建

        *  创建方案时选择创建空C++ Windows项目
        *  这个Dialog就是下一步编程的模板
        *  此时系统自动生成的***.rc文件(不要改动)
        *  选中Dialog后点击右键 ,可以设置对话框的各种属性
       2. 向Dialog中加入各种控件
        *  工具箱:视图->工具箱->对话框编辑器(按住拖进对话框)(此处,拖入按钮两个)
        *  右上方的几个按钮可以调整控件位置等,用Ctrl键选中数个按钮后,按四个朝外箭头,可让按钮外形一边大,
            四个箭头附近都是调整位置和外形的
 二、代码部分
//一. 需要的头文件
#include<windows.h>
#include<tchar.h>     //使用TCHAR类型所需的头文件,如TEXT()函数
#include<commctrl.h>  //控件头文件
#include"resource.h"  //拖入对话框后自动生成的头文件,如不包含无法运行
#pragma warning(disable:28251)  //因编译器报C28251错,予以排除

//二. 对话框消息处理函数的声明
INT_PTR WINAPI dProc(  HWND Dlg,  UINT uMsg,  WPARAM wParam,  LPARAM lParam);

//三. 程序主函数
int WINAPI WinMain (   //入口主函数名称及参数与win32入口函数形同
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow )

{                                   //入口主函数内容与WIN32窗口函数大为不同,比win32窗口简单很多,没有窗口类注册、
                                    //创建、显示等步骤。仅需一个对话框的声明,如下:
                                  
    DialogBox(              //从一个对话框资源中创建一个模态对话框
        hInstance,          //标识模块实例(默认传WinMain中的Instance句柄)
        MAKEINTRESOURCE(IDD_DIALOG1),   //把一个"数字形ID",转化为"字符串".但是执行前后,输入的数据的内
                                                                       // 容和长度是不变的!它只不过就是C语言里面"强制类型转换"而已. 
                                                                       //这里的IDD_DIALOG1是拖入的对话框的ID号
        NULL,  //指定拥有对话框的父窗口(这里没有,用NULL)
        dProc); //对话框消息处理函数的名字,这里作为参数传递进去

    return TRUE;
}
//四. 对话框消息处理函数

INT_PTR WINAPI dProc(    //讲授者在此处没有用CALLBACK声明,而是用WINAPI声明,试着用CALLBACK声明,
                                           //编译也能通过,运行正常。函数是作为参数被主函数中的DialogBox函数调用。
    HWND Dlg,          //声明对话框窗口句柄
    UINT uMsg,         //声明接受主函数及系统发出的消息变量
    WPARAM wParam,     //声明消息参数,具体内容与消息类别相关,不固定
    LPARAM lParam)     //声明详细参数,(同上)
{
    switch (uMsg)
    {
    case WM_INITDIALOG:  //对初始化消息的处理
                       //处理初始化消息:WM_INITDIALOG消息是只有对话框才能收到的消息;收到该消息表明对话框及其
                       //所有子控件都创建完毕了。与WM_CREATE消息对比:
                       //WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕,可以在上面上面画控件了。在
                       //响应WM_CREATE消息的时候,对话框及子控件还未创建完成,只是通知系统说要开始创建窗口啦,
                      //这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初
                      //始化。
        MessageBox(Dlg, _T("对话框窗口初始化完成!!!"), _T("对话框"),MB_OK);
        break;
    case WM_COMMAND:
        UINT nCtrlID = LOWORD(wParam);  //wParam低位中存有控件ID(在控件属性表中可以看到)
        UINT nCode = HIWORD(wParam);    //wParam高位中存有鼠标信息
        if (nCode == BN_CLICKED)  //BN_CLICKED消息(按钮控件被点击了)
        {
            if (nCtrlID == IDC_BUTTON1)
            {
                MessageBox(Dlg, L"按钮一被点击", L"按钮", MB_OK);
            }
           else if (nCtrlID == IDC_BUTTON2)
            {
                MessageBox(Dlg, L"按钮二被点击", L"按钮", MB_OK);
            }
           else if (nCtrlID == IDCANCEL||nCtrlID==IDOK)  //按对话框默认的确认或取消退出
            {
                EndDialog(Dlg,true);
            }
           return TRUE;//正常情况应返回TRUE
        }
    }
    return false;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值