对话框编程小结之界面消息传递

背景:

         应用程序以对话框进行编程,会出现一个主对话框界面,在主对话框中会出现不同的模态对话框。这时子对话框向主界面对话框的消息传递就成为该设计的关键。

方法:

1、  在子对话框类定义时,传递主对话框指针;

2、  通过主对话框指针获取主对话框变量,及发送消息。

详细代码:

子对话框文件:MaxDisplayDlg.h中

class SystemDlg; //声明使用主对话框类

//CMaxDisplayDlg dialog

class CMaxDisplayDlg : publicCDialogEx

{

         DECLARE_DYNAMIC(CMaxDisplayDlg)

 

public:

         CMaxDisplayDlg(CCapsuleTestSystemDlg*pMain,CWnd* pParent=NULL);  // standard constructor

         virtual~CMaxDisplayDlg();

 

//Dialog Data

         enum {IDD = IDD_DISPLAY };

 

protected:

         virtualvoid DoDataExchange(CDataExchange* pDX);   // DDX/DDVsupport

 

         DECLARE_MESSAGE_MAP()

public:

         afx_msg voidOnBnClickedDisexit();

         intm_radCamera;

         virtualBOOL OnInitDialog();

         afx_msg voidOnBnClickedButton1();

private:

         CCapsuleTestSystemDlg* m_pMainDlg;  //定义成员变量,用于保存主对话框指针

        

};

子对话框文件:MaxDisplayDlg.cpp中

#include "SystemDlg.h" //必须包含主对话框头文件

//默认构造函数更改如下:

CMaxDisplayDlg::CMaxDisplayDlg(CCapsuleTestSystemDlg*pMain,CWnd* pParent/*=NULL*/)

         : CDialogEx(CMaxDisplayDlg::IDD,pParent)

         , m_radCamera(0)

{

         ASSERT(pMain);

         m_pMainDlg=pMain;

}

void CMaxDisplayDlg::OnBnClickedButton1()

{

        

                   m_pMainDlg->SendMessage(UM_SINGLEDRABB,0,0);//如此发送消息

 

}

 

 在主对话框类SystemDlg.cpp中

在某个按钮单击函数中,定义子对话框,并显示模态。

void SystemDlg::OnBnClickedDisplay()

{

         // TODO: Addyour control notification handler code here

         CMaxDisplayDlg cameradis(this);

         cameradis.DoModal();

}


方法二:通过获得主对话框的句柄来传递消息.  

在主对话框的成员类中头文件中定义:

HWND m_hmaindlg;  //主对话框句柄

在主对话框的成员类的OnInitDialog()函数中添加:m_hmaindlg=AfxGetApp()->GetMainWnd()->GetSafeHwnd();

在stdafx.h中定义自定义消息:#define  UM_CAMERASETCHANGE (WM_USER+120)

通过主对话框的class Wizard...在主对话框中添加自定义消息UM_CAMERASETCHANGE

在主对话框的成员类需要发送消息的地方:::PostMessage(m_hmaindlg,UM_CAMERASETCHANGE,0,0); //发送数据更新消息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值