• Visual Studio C++ MFC界面常用参数更改(改变图标,添加控件,调试打印函数等等)


    背景

    需要使用Visual Studio C++做一些界面。此篇文章既是记录Visual Studio C++在调整界面时常常遇见的问题。

    正文

    一、如何更改窗体图标,以及生成的.exe图标

    • 更改窗体图标
      首先要有一个.ico的图标文件,然后在解决方案管理器内找到资源文件,然后将想要更改的.ico图标添加至该资源内,添加的类型为Icon。打开Recourse.h文件,该文件供界面文件.rc使用,如下所示:
    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ 生成的包含文件。
    // 供 wzCAN.rc 使用
    //
    #define IDM_ABOUTBOX                    0x0010
    #define IDD_ABOUTBOX                    100
    #define IDS_ABOUTBOX                    101
    #define IDD_WZCAN_DIALOG                102
    #define IDI_ICON1                       129    // 导入图标时,MFC产生的对应宏
    #define IDR_MAINFRAME                   128    // MFC默认图标对应的宏
    #define IDC_CHECK1                      1000
    

    注意IDR_MAINFRAME这个宏定义,接着打开wzCANDlg.cpp文件,其中wzCAN为类名,找到如下函数:

    CwzCANDlg::CwzCANDlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CwzCANDlg::IDD, pParent)
    {
            // 此段代码既是加载窗体图标
            // IDR_MAINFRAME即为默认的窗体显示图标文件
            m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
    }
    

    将IDR_MAINFRAME改成IDI_ICON1,类窗体显示的既是导入的新图标文件。

    • 更改生成的.exe文件的图标
      经过上述步骤,类窗体图标确实改变了,可是生成的.exe文件却没有改变。原因在于MFC总是默认将宏定义最小值所对应的图标设为.exe图标。在.rc文件内已经说明,如下所示:
    // Icon with lowest ID value placed first to ensure application icon
    // remains consistent on all systems.
    IDI_ICON1               ICON                    'res\Aplex.ico'
    IDR_MAINFRAME           ICON                    'res\wzCAN.ico'
    

    因此,只需要将我们导入图标所对应的宏定义值改成最小即可。

    #define IDI_ICON1                       128    // 导入图标时,MFC产生的对应宏
    #define IDR_MAINFRAME                   129    // MFC默认图标对应的宏
    

    二、如何添加菜单栏,并实现相应菜单栏的命令响应

    关于菜单栏的操作的更加详细说明已经另外开了一篇博客Visual studio C++ MFC之Menu editor记录。
    菜单栏在Visual Studio C++工程中以资源文件存在,所以不要误认为其为控件。以下分为实现菜单栏以及单击菜单产生命令的的两个步骤:

    1. 实现菜单

      • 创建Menu相关资源文件:在资源视图对应的.rc文件内右击添加资源,选择Menu,将会生成Menu相关文件。
      • 编辑菜单栏,直接输入即可,如下图:
      • 在要显示该菜单栏的Dialog的属性里找到Menu,选择新添加菜单栏的ID
      • 编译运行后,则可看到菜单栏在窗口中显示。效果如下图:
    2. 设置点击某一个菜单栏选项实现对应命令:

      • 在对应的菜单栏右击选择添加事件处理程序,如下图:
      • 左边一栏中的消息类型分为两类,一类是Command,一类是UI命令,该命令和Command的不同在于,UI命令会增加传递一个UI指针的参数,使该函数内可对UI进行更改。
        右边一栏中的类列表则是对应在哪个窗口类去实现这个命令,毫无疑问,在哪个Dialog实现则去那个窗口类实现对应的函数。
      • 正确选择消息类型类列表后,则会在对应窗口类实现对应的函数,而我在里面实现了一个消息通知,代码如下:
    void CwzCANDlg::OnChyqAge()
    {
        // TODO: 在此添加命令处理程序代码
        MessageBox((LPCWSTR)L"AGE Error",NULL,MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2);
    }
    

    实现如下函数后,当点击对应的菜单栏,则会弹出一个警告框。

    1. 至此即完成了菜单栏和相应菜单栏的命令响应。

    三、调试打印函数TRACE(...)

    在调试程序的时候,时常需要知道一些变量的值,又不愿意将变量添加到监视窗口,此时就可以调用函数TRACE(...),它的使用和printf(...)函数基本一致,运行程序时进入调试模式,则该函数输出的信息显示在输出窗口。

    四、无法将成员变量添加到ID为IDC_STATIC的控件中解决办法

    添加了一个Static Text的控件,想在运行的时候更改这个文本框的内容,就需要添加变量,然后出现了无法添加的错误。
    解决办法既是将ID改成其他的ID即可以添加了。

    更多问题,未完待续

    参考链接:

    记录时间:2017-1-20
    记录地点:深圳WZ

  • 相关阅读:
    分布式事务
    事务
    shell 脚本编写
    使用fail2ban 防止ssh暴力破解
    数据加密
    英文字符串排序算法
    SpringCloud-ServerConfig 配置中心服务端 / 客户端
    maven setting参考配置
    java面向对象设计原则
    Java Object
  • 原文地址:https://www.cnblogs.com/ChYQ/p/6322849.html
Copyright © 2020-2023  润新知