項目是一個基於MFC的VS2013工程A,主要實現一個通過GPRS網絡接收一個傳感器系統採集的數據並存儲的功能。最近需要添加一個帶有溫度計、羅盤等控件的對話框,但由於原程序已經比較完善,而新控件以前並未使用過,怕直接添加會出現莫名的問題,因此先創建一個新工程B,將界面設計好,控件成功運行,然後將工程B的界面與類文件移植到工程A中使用即可。
實際上是MFC工程中rc資源文件的重用與resource.h文件的修改,經多方嘗試發現一個較爲簡單的方法:
步驟:
- 工程B的UI設計完成後,先確保所有控件ID與工程A中的控件ID不重名
- 直接在原工程A的解決方案管理器中,右鍵–>添加–>現有項,將工程B添加至工程A中
- 在資源視圖中,直接右擊工程B的新對話框資源IDD_METER_DIALOG,複製,然後選中工程A,右鍵粘貼即可
- 切換到解決方案管理器,打開resource.h文件,發現新加入的對話框資源ID以及控件ID已經自動添加進來,但是ID號可能會有重複,需要手動重新設置新加入的控件ID號,設置完成注意修改resource.h文件底部#ifdef APSTUDIO_INVOKED 下面的幾個數字,以便增加新控件時VS能夠自動正確生成新ID號
- 將工程B中對話框類文件MeterDlg.h和MeterDlg.cpp複製到工程A中,並添加至解決方案管理器中
- 將工程B從工程A中移除
- 測試新對話框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++)