MFC不同工程(解决方案)之间对话框资源的复制与重用方法

项目是一个基于MFC的VS2013工程A,主要实现一个通过GPRS网络接收一个传感器系统采集的数据并存储的功能。最近需要添加一个带有温度计、罗盘等控件的对话框,但由于原程序已经比较完善,而新控件以前并未使用过,怕直接添加会出现莫名的问题,因此先创建一个新工程B,将界面设计好,控件成功运行,然后将工程B的界面与类文件移植到工程A中使用即可。

实际上是MFC工程中rc资源文件的重用与resource.h文件的修改,经多方尝试发现一个较为简单的方法:

步骤:

  1. 工程B的UI设计完成后,先确保所有控件ID与工程A中的控件ID不重名
  2. 直接在原工程A的解决方案管理器中,右键–>添加–>现有项,将工程B添加至工程A中
  3. 在资源视图中,直接右击工程B的新对话框资源IDD_METER_DIALOG,复制,然后选中工程A,右键粘贴即可
  4. 切换到解决方案管理器,打开resource.h文件,发现新加入的对话框资源ID以及控件ID已经自动添加进来,但是ID号可能会有重复,需要手动重新设置新加入的控件ID号,设置完成注意修改resource.h文件底部#ifdef APSTUDIO_INVOKED 下面的几个数字,以便增加新控件时VS能够自动正确生成新ID号
  5. 将工程B中对话框类文件MeterDlg.h和MeterDlg.cpp复制到工程A中,并添加至解决方案管理器中
  6. 将工程B从工程A中移除
  7. 测试新对话框IDD_METER_DIALOG,只要在工程A中,
    (CMeterDlg*)m_pVMdlg = new CMeterDlg;
    if (m_pVMdlg->Create(IDD_METER_DIALOG) == NULL)
    {
    AfxMessageBox(_T("Meter对话框创建失败!"));
    return;
    }
    m_pVMdlg->ShowWindow(TRUE);

    即可

新对话框创建出现失败,则在MeterDlg.h的类定义头部加入DECLARE_DYNAMIC(CMeterDlg),在MeterDlg.cpp文件前部加入IMPLEMENT_DYNAMIC(CMeterDlg, CDialogEx)即可

参考资料:
MFC中对话框资源的复制
资源文件 (C++)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章