对话框为WS_POPUP的,Border为Resizing有最大化按钮,窗口在创建的时候是先发WM_INITDIALOG消息还是先发WM_SIZE消息啊?
我在窗口中有个Group Box控件,想使他随窗口大小的改变而改变自己的大小来适应窗口。在窗口类中定义了一个CRect m_rectDlgClient;并在OnInitDialog()中
GetClientRect(&m_rectDlgClient);然后在OnSize函数中加入
void CXXXDlg::OnSize(UINT nType, int cx, int cy)
{ CDialog::OnSize(nType, cx, cy);
CRect rect;
if ((m_rectDlgClient.Width() != 0) && (m_rectDlgClient.Height() != 0) && (nType != SIZE_MINIMIZED))
{
GetDlgItem(IDC_GROUPBOX)->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.SetRect(rect.left,rect.top,rect.right+cx-m_rectDlgClient.Width(),rect.bottom);
GetDlgItem(IDC_GROUPBOX)->MoveWindow(&rect);
}
if (nType != SIZE_MINIMIZED)
{
GetClientRect(&m_rectDlgClient);
}
}
为什么我在Debug模式下面运行就是正常的,而在Release模式下运行的时候说
内存不能读啊?在这一句GetDlgItem(IDC_GROUPBOX)->GetWindowRect(&rect);
的时候出错
而把窗口风格改成Overlapped就可以正常运行,Popup的对话框和Overlapped的对话框有什么区别吗?我在Release下在OnInitDialog和OnSize函数中设置断点时,程序是先在OnSize中先断的,请问大家是怎么回事啊?能不能给一个关于对话框的OnSize处理的例程,谢谢大家了
我在窗口中有个Group Box控件,想使他随窗口大小的改变而改变自己的大小来适应窗口。在窗口类中定义了一个CRect m_rectDlgClient;并在OnInitDialog()中
GetClientRect(&m_rectDlgClient);然后在OnSize函数中加入
void CXXXDlg::OnSize(UINT nType, int cx, int cy)
{ CDialog::OnSize(nType, cx, cy);
CRect rect;
if ((m_rectDlgClient.Width() != 0) && (m_rectDlgClient.Height() != 0) && (nType != SIZE_MINIMIZED))
{
GetDlgItem(IDC_GROUPBOX)->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.SetRect(rect.left,rect.top,rect.right+cx-m_rectDlgClient.Width(),rect.bottom);
GetDlgItem(IDC_GROUPBOX)->MoveWindow(&rect);
}
if (nType != SIZE_MINIMIZED)
{
GetClientRect(&m_rectDlgClient);
}
}
为什么我在Debug模式下面运行就是正常的,而在Release模式下运行的时候说
内存不能读啊?在这一句GetDlgItem(IDC_GROUPBOX)->GetWindowRect(&rect);
的时候出错
而把窗口风格改成Overlapped就可以正常运行,Popup的对话框和Overlapped的对话框有什么区别吗?我在Release下在OnInitDialog和OnSize函数中设置断点时,程序是先在OnSize中先断的,请问大家是怎么回事啊?能不能给一个关于对话框的OnSize处理的例程,谢谢大家了
解决方案 »
- installshield12多国语言提示语言实现
- 在看一段代码,对代码中其中一段定义不太明白,请大家指教
- 谈安装程序的制作
- 同一个程序在不同的机器上执行,有时会终止执行,和系统或硬件有什么关系吗?向高手请教
- [急!!!]大虾帮忙怎么用vc打开数据库中存贮的文件
- 对话框里怎么加不了toolbar??!
- 为什么用URLDownloadToFile下载文件时,如果网络慢一些或者通过代理上网,下载失败的次数很多,如何把连接超时时间设置长一些啊。如果改善
- 如何让控件在窗口最大化时跟着增大,在窗口还原时缩小到适当大小
- 关于_bstr_t的一些问题
- 位域的问题
- 使用QueryInterface 出错?
- 如何同时在程序中应用窗口界面与控制台界面?
在OnSize中判断窗口是否被创建出来即可
void CXXXDlg::OnSize(UINT nType, int cx, int cy)
{
if (m_wndStatus.GetSafeHwnd() != NULL)
{......}
}
--------------
可以自己做个试验啊。分别在里面设置断点,然后test啊试验结果先进入WM_SIZE 再到WM_INITDIALOG
要判断GetDlgItem(IDC_GROUPBOX)的返回值是否为NULL,或者直接判断对话框是否被创建完成GetSafeHwnd() == NULL .....如果创建完成再调用GetDlgItem(IDC_GROUPBOX)
{
CDialog::OnWindowPosChanged(lpwndpos); // TODO: 在此处添加消息处理程序代码
CRect rc(0, 0, 0, 0);
GetClientRect(&rc);
GetDlgItem(IDC_MY)->MoveWindow(&rc);
}
{
CRect rect;
if (m_ctrlweb.m_hWnd != NULL)
{
m_ctrlweb.GetWindowRect(rect);
ScreenToClient(rect);
m_ctrlweb.MoveWindow(rect.left, rect.top,
cx-(2*rect.left), cy-rect.top-rect.left);
}
}
在OnSize中判断窗口是否被创建出来即可
void CXXXDlg::OnSize(UINT nType, int cx, int cy)
{
if (m_wndStatus.GetSafeHwnd() != NULL)
{......}
}