MFC之Dialog

/*
大部分的非模态对话框都指定WS_POPUP、WS_CAPTION、WS_BORDER及WS_SYSTEMMENU
风格。非模态对话框从主程序的消息循环中取得输入信息。如果非模态对话框中
有控件存在,而且允许用户使用键盘去选择,那么必须在消息循环中调用CWnd类(或其继承类)
的成员函数IsDialogMessage()来判断用户输入信息是否要发送给非模态对话框。
非模态对话框的建立靠CDialog类的成员函数Create()来完成,关闭则用CWnd类
的成员函数DestroyWindow()来实现。

非模态对话框必须定义为全局变量或用new操作符产生一个。一般需要需要3个步骤:
(1)构造一个对话框类的对象
有两种方法:
方法一,在框架窗口类的头文件中
*/
class CMainFrame:public CFrameWnd
{
	...
	public:
	CMyDlg m_Mydlg;
	...
};
//另一种方法是在框架窗口类中声明一个对话框类的指针变量
CMyDlg* pMyDlg = new CMyDlg;
/*
(2)调用CDialog::Create()方法来创建对话框窗口
在非模态对话框命令的COMMAND消息处理函数中创建非模态对话框
*/
void CMainFrame::OnModelessdlg()
{
	if(!m_Mydlg.m_hWnd)
	{
		m_Mydlg.Create(IDD_MYDLG);
	}
	m_Mydlg.ShowWindow(SW_SHOW);
}

/*
对话框与控件之间的数据交换通过CDialog::DoDataExchange()来完成。
当程序需要交换数据时,并不需要用户直接调用DoDataExchange()函数,
而应该调用CWnd::UpdateData()函数,因为在UpdateData()函数内部调用了
DoDataExchange()。
UpdateData(True)表示将数据从对话框的控件中传送到对应的数据成员中;
UpdateData(False)表示将数据从数据成员中传送给对应的控件。

非模态对话框通过调用CDialog::Create()创建,而模态对话框通过调用CDialog::DoModal()创建。
非模态对话框调用CWnd::DestroyWindow()关闭,而模态对话框调用CDialog::EndDialog()
来关闭。
由于默认的CDialog::OnOK()和CDialog::OnCancel()函数均调用EndDialog,因此
用户必须编写自己的OnOK()和OnCancel()函数。

必须有一个标志标明非模态对话框是否已经打开。通常可以用拥有者窗口中的指向
对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋NULL值,以标明对话框对象
已不存在了;也可以将所创建的类的对象的成员变量m_hWnd作为标志。
*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值