如何使一个对话框在模态与非模态进行切换?在线等 如题 :动态创一个对话框,可否根据需要将此对话框风格在模态与非模态进行切换? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对话框可以用一个类,只不过一个DoModal方式,一个Create方式不过对话框之间要数据交换 改变对话框的m_pParentWnd就可以了吧,domodal的dlg只是锁定这个m_pParentWnd 应该可以做到。就是有点麻烦。1. 把窗口建成非模态的。然后设置一个全局状态变量,用于标记当前窗口所趋向的模态/非模态状态。2. 改写主窗口消息循环,如果此全局状态量为表示模态,则屏蔽HWND不是此窗口的所有消息。当程序需要时,可以随时修改全局状态变量,以达到切换模态/非模态的目的。 CMyDlg 创建的对话框必须是new 出来的,或者是全局的class CMyDlg{public: BOOL m_bModal;public: int ShowMyDialog( BOOL bModal ){ m_bModal = bModal; if ( m_bModal) { return DoModal(); }else { Create( ); }return 0;}// 在 OnOK 和 OnCancel 里面判断一下 void OnOk(){if ( m_bModal ) { CDialog::OnOK(); } else { DestroyWindow(); } }OnCancel 也一样} 希望对一个对话框类对象操作,并且是运行时刻改变其模态,本来想使用SetWindowLongEX等,未果。试想SetWindowPos是否可行, 如果显示区域不可MOve 不能满足要求,有可能对话框挡住父窗口的交互部分 这个好办。点模态按钮的时候,直接把非模态的ShowWindow(SW_HIDE)掉,再DoModal()出来一个;点非模态的时候,直接调用模态的OnCancel(),之后把非模态的那个ShowWindow(SW_SHOW)出来。祝楼主成功! 请问如何在高效追加CEdit内容时不移动滚动条位置? MFC对话框嵌套ESC子窗口关闭 程序等待的问题!高分~! 自己做的服务端与客户端程序 想向各位请教个问题? VC++.net中UML逆向工程 dll中的内存泄漏问题,高手来帮忙! 请问我是用OnSocketRead(WM_SOCKET_READ)读取UDP过来的数据,我怎么才能像recvfrom那样能获取发送端的sockaddr_in信息呢?(立即给分!) CString类的多线程问题 请大家指点或讨论学习 c++ primer 这本书的方法 谢谢 VC++.Net到底什么东西啊 mfc如何对封闭图形进行颜色填充?
不过对话框之间要数据交换
2. 改写主窗口消息循环,如果此全局状态量为表示模态,则屏蔽HWND不是此窗口的所有消息。当程序需要时,可以随时修改全局状态变量,以达到切换模态/非模态的目的。
class CMyDlg
{
public:
BOOL m_bModal;public:
int ShowMyDialog( BOOL bModal )
{
m_bModal = bModal;
if ( m_bModal)
{
return DoModal();
}
else
{
Create( );
}return 0;
}
// 在 OnOK 和 OnCancel 里面判断一下
void OnOk()
{
if ( m_bModal )
{
CDialog::OnOK();
}
else
{
DestroyWindow();
}
}OnCancel 也一样
}
试想SetWindowPos是否可行,
点模态按钮的时候,直接把非模态的ShowWindow(SW_HIDE)掉,再DoModal()出来一个;
点非模态的时候,直接调用模态的OnCancel(),之后把非模态的那个ShowWindow(SW_SHOW)出来。祝楼主成功!