请教2个简单的问题 1.怎么控制子对话框同一时间只能打开一个。比如我做的一个东西的一个子对话框,非模态的,我想用一个bool全局变量判断这个子对话框是不是正在运行,可是在重写的onclose()函数里改变bool变量的值不好使,总是把我的程序终止;请问该怎么做。2.怎么能让控件的大小随对话框大小的改变而改变?请详细点,菜鸟。谢谢回答!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第二个是不是在窗口重绘时获得对话框大小,然后按比例缩放控件。是不是在OnDraw()中实现。偶也是菜鸟。 全局变量控制是可以的 是你程序写的有问题.简单点你可以使用一个全局CDialog对象.这样只会有一个了.动态缩放控件 实现较麻烦 需要手动计算坐标.在你窗体size()事件中处理即可. 1. 把你设置bool量的代码放到WM_DESTORY消息响应函数里面实现;2. 在对话框的OnSize消息里面,首先获取对话框当前大小,然后逐个计算每个控件在新窗口里面大小和位置,这个只能用代码实现,最后用MoveWindow函数重置每个控件的位置和大小 第一个问题我觉得可以写一个函数,假如父对话框是dialog,子对话框是CDialog dlg,可以这样写: void CDialog::IsChildDlgExist(){ if(dlg.IsWindowVisble()) { return; } dlg.ShowWindow(SW_SHOW);}前提是子对话框一定要创建出来,这个可以设置BOOL形变量来判断。每次需要显示对话框时就先调用这个函数。第二个问题在对话框的OnSize()函数里面处理,响应WM_SIZE消息,先获取对话框的大小,再按照控件和对话框的相对比例进行缩放就可以了 第二个问题,控件大小用相对的,获得对话框的RECT然后控件MOVEWINDOW. 3楼的,放在OnDestroy()里也不行啊。是不是我做错了???我把部分代码贴出来,大家指教。void CMyDlg::OnButton1() //主对话框的代码{ // TODO: Add your control notification handler code here if(!g_exist1) //g_exist1 全局控制变量 { m_djczDlg.Create(IDD_DJCZ,this); //子对话框 g_exist1 = true; } else MessageBox("there is anothor instance is running !");}void CDJCZDlg::OnDestroy() //重写子对话框{ CDialog::OnDestroy(); // TODO: Add your message handler code here g_exist1 = false; //改变值} //判断Dlg是否已经打开bool CMyDlg::::IsOpen(){ return m_hWnd ? true : false ;}//判断Dlg是否显示bool CMyDlg::::IsShow(){ if(!IsOpen()) return true; WINDOWPLACEMENT wpm; GetWindowPlacement(&wpm); if (wpm.showCmd == SW_SHOW) { return true; } else { return false; }} CWinThread类中使用SetTimer WM_TIMER wParam的值不固定 求解释 这样的列表框如何操作 如何捕捉类似股市窗口软件字符? OCX 中的接口函数怎么返回指针呢 我试了 void* char* 都不可以啊 谁帮帮我啊 如何用pop3协议收邮件,pop3服务端编程 CDC的LineTo 总是被其它控件挡住 如何作出类似ghost..建议就给分, 用Visual C++作一个小型的数据库程序什么方式最快? 关于单文档程序定时器的问题 一个简单问题:编译时连接错误。 Block Header中属性项“Code Page”和“Language”的区别 钩子回调函数有限制?
简单点你可以使用一个全局CDialog对象.这样只会有一个了.动态缩放控件 实现较麻烦 需要手动计算坐标.在你窗体size()事件中处理即可.
void CDialog::IsChildDlgExist()
{
if(dlg.IsWindowVisble())
{
return;
}
dlg.ShowWindow(SW_SHOW);
}
前提是子对话框一定要创建出来,这个可以设置BOOL形变量来判断。每次需要显示对话框时就先调用这个函数。
第二个问题在对话框的OnSize()函数里面处理,响应WM_SIZE消息,先获取对话框的大小,再按照控件和对话框的相对比例进行缩放就可以了
void CMyDlg::OnButton1() //主对话框的代码
{
// TODO: Add your control notification handler code here
if(!g_exist1) //g_exist1 全局控制变量
{
m_djczDlg.Create(IDD_DJCZ,this); //子对话框
g_exist1 = true;
}
else
MessageBox("there is anothor instance is running !");
}void CDJCZDlg::OnDestroy() //重写子对话框
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
g_exist1 = false; //改变值
}
bool CMyDlg::::IsOpen()
{
return m_hWnd ? true : false ;
}
//判断Dlg是否显示
bool CMyDlg::::IsShow()
{
if(!IsOpen())
return true;
WINDOWPLACEMENT wpm;
GetWindowPlacement(&wpm);
if (wpm.showCmd == SW_SHOW)
{
return true;
}
else
{
return false;
}
}