MFC开发IM--MFC非模态对话框的创建及显示

我们需要在原对话框CMFC_Kinect_TrackingDlg设计一个按钮,点击这个按钮后弹出一个非模态对话框Color_Based_SettingDlg,

并且同时两个对话框都是**状态,都可以*操作,步骤入下:

1.在头文件MFC_Kinect_TrackingDlg.h中包含Color_Based_SettingDlg.h

2.在MFC_Kinect_TrackingDlg.h中的类CMFC_Kinect_TrackingDlg添加一个Color_Based_SettingDlg对话框的成员变量

并声明为私有类型。

[cpp] view plain copy
  1. private:  
  2.     //new a Color_Based_SettingDlg obj pointor  
  3.     Color_Based_SettingDlg * m_pColorBasedSetting;  

3.添加构造函数。如果cpp文件中函数太多,我们可以在Class View上半个视图中找到CMFC_Kinect_TrackingDlg类(在MFC_Kinect_TrackingDlg.cpp中),再在下半个视图中找到其构造函数双击,中间客户区域即可马上切到构造函数的实现处。在构造函数体中添加m_pColorBasedSetting= NULL;

MFC开发IM--MFC非模态对话框的创建及显示


4. 在构造函数下方添加一个析构函数,找寻位置和方法和构造函数一样,另外,还需要在MFC_Kinect_TrackingDlg.h中对析构函数进行声明,位置在构造函数下方。

[cpp] view plain copy
  1. //析构函数  
  2. CMFC_Kinect_TrackingDlg::~CMFC_Kinect_TrackingDlg()  
  3. {  
  4.     if( NULL != m_pColorBasedSetting)  
  5.         delete m_pColorBasedSetting;  
  6. }  

5. 接下来就可以在对话框 CMFC_Kinect_TrackingDlg的消息处理函数OnBnClickedButtonColorSetting中创建非模态对话框

并添加要处理的函数。

[cpp] view plain copy
  1. if(NULL == m_pColorBasedSetting)  
  2. {  
  3.     m_pColorBasedSetting = new Color_Based_SettingDlg;  
  4.     //define Color_Based_SettingDlg dialog  
  5.     m_pColorBasedSetting-> Create( IDD_DIALOG_BASE_COLOR_SETTING,this);   
  6. }  
  7. m_pColorBasedSetting->SetWindowPos( NULL, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );   
  8. m_pColorBasedSetting->ShowWindow( SW_SHOW );   
  9.    m_pColorBasedSetting->SetActiveWindow();