MFC的的模态窗口使用很方便,只需要 CXXX wnd; wnd.DoModal() 就可以了
当窗口存在时,不能对操作父窗口进行任何操作,程序进入DoModal()函数中直到子窗口被关闭才返回
这样我在实际运用的时候就遇到一个问题。
问题情景
客户端 ----》socket ---》解析协议----》sendmessage 到界面进行对应操作。
1、有个对客户端的参数调试界面,只有当客户点了调试,才会出现调试界面,因此sendmessage 需要的第一个参数有可能是无效的
2、当关掉调试界面的时候,界面的数据又会重新初始化,需要设置的状态丢失。
我的解决方法如下:
用非模态窗口模拟模态窗口 实现方法和MFC 类似
1创建子窗口
if (GetDlgItem(IDC_BUTTON5)->IsWindowEnabled()==0)
return ;
DWORD stlye=0;
if (!IsWindow(p_SetPram->m_hWnd))
{
p_SetPram->Create(IDD_DIALOG5,this);
p_SetPram->ModifyStyle(1,MLF_SHOWONIDLE);//
}
p_SetPram->ShowWindow(SW_NORMAL);
2.禁用父窗口所有控件
控件禁用/恢复函数
void COnSetPram::SetAllDisable(BOOL bSet)
{
if (IsWindow(this->m_hWnd))
{
int nCtrlId[9]={IDC_XSUB,IDC_XADD,IDC_YSUB ,IDC_YADD,IDC_ZSUB ,IDC_ZADD,IDC_XZERO,IDC_YZERO,IDC_ZZERO};
CWnd * tempPtr;
for (int i=0;i<9;i++)
{
tempPtr=(CWnd *)GetDlgItem(nCtrlId[i]);
tempPtr->EnableWindow(bSet);
}
}
}