关闭

通过向父亲窗口发送消息,要求其他窗口对其进行销毁

1032人阅读 评论(0) 收藏 举报
  • 通过向父亲窗口发送消息,要求其他窗口对其进行销毁:首先需要定义一个消息用于进行通知,然后在对话框中映射WM_DESTROY消息,在消息处理函数中调用消息发送函数通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射处理消息的函数,并在消息处理函数中删除对话框对象。相关代码如下:
    /*更改对话框的有关文件*/
    CTestDlg2::CTestDlg2(CWnd* pParent /*=NULL*/)
    	: CDialog(CTestDlg2::IDD, pParent)
    {/*m_pParent为一成员变量,用于保存通知窗口的指针,
    所以该指针不能是一个临时指针*/
    	ASSERT(pParent);
    	m_pParent=pParent;
    	//{{AFX_DATA_INIT(CTestDlg2)
    		// NOTE: the ClassWizard will add member initialization here
    	//}}AFX_DATA_INIT
    }
    void CTestDlg2::OnOK()
    {
    	CDialog::OnOK();
    	DestroyWindow();
    }
    
    void CTestDlg2::OnCancel()
    {
    	CDialog::OnCancel();
    	DestroyWindow();
    }
    
    void CTestDlg2::OnDestroy() 
    {
    	CDialog::OnDestroy();
    	/*向其他窗口发送消息,将自身指针作为一个参数发送*/
    	m_pParent->PostMessage(WM_DELETE_DLG,(WPARAM)this);
    }
    
    /*在消息接收窗口中添加消息映射*/
    /*在头文件中添加函数定义*/
    	afx_msg LONG OnDelDlgMsg(WPARAM wP,LPARAM lP);
    /*添加消息映射代码*/
    	ON_MESSAGE(WM_DELETE_DLG,OnDelDlgMsg)
    END_MESSAGE_MAP()
    /*实现消息处理函数*/
    LONG CMy53_s1View::OnDelDlgMsg(WPARAM wP,LPARAM lP)
    {
    	delete (CTestDlg2*)wP;
    	return 0;
    }
    /*创建对话框*/
    void CMy53_s1View::OnTest2() 
    {
    	CTestDlg2 *dlg=new CTestDlg2(this);
    	dlg->Create(IDD_TEST_DLG_2);
    	dlg->ShowWindow(SW_SHOW);
    }
    
    在这种方法中我们利用消息来进行通知,在Window系统中利用消息进行通知和传递数据的用法是很多的。
  • 同样无模式对话框的另一个作用还可以用来在用户在对话框中的输入改变时可以及时的反映到其他窗口。下面的代码演示了在对话框中输入一段文字,然后将其更新到视图的显示区域中,这同样也是利用了消息进行通知和数据传递。

    /*在对话框中取出数据,并向其他窗口发送消息和数据,将数据指针作为一个参数发送*/
    void CTestDlg2::OnCommBtn() 
    {
    	char szOut[30];
    	GetDlgItemText(IDC_OUT,szOut,30);
    	m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);
    }
    
    /*在消息接收窗口中*/
    /*映射消息处理函数*/
    	ON_MESSAGE(WM_DLG_NOTIFY,OnDlgNotifyMsg)
    
    /*在视图中绘制出字符串 m_szOut*/
    void CMy53_s1View::OnDraw(CDC* pDC)
    {
    	CMy53_s1Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// TODO: add draw code for native data here
    	pDC->TextOut(0,0,"Display String");
    	pDC->TextOut(0,20,m_szOut);
    }
    /*处理通知消息,保存信息并更新显示*/
    LONG CMy53_s1View::OnDlgNotifyMsg(WPARAM wP,LPARAM lP)
    {
    	m_szOut=(char*)wP;
    	Invalidate();
    	return 0;
    }
    
    0
    0

    查看评论
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
      个人资料
      • 访问:3768952次
      • 积分:60954
      • 等级:
      • 排名:第41名
      • 原创:1549篇
      • 转载:1252篇
      • 译文:0篇
      • 评论:459条
      最新评论