17 个解决方案
#1
可能是变量没有初始化,检查一下
#2
初始化了,代码如下:
void CDataReportDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
// if (m_infoList.GetSafeHwnd())
// {
// m_infoList.MoveWindow(0,0,cx,cy);
// }
CWnd *pWnd;
pWnd = GetDlgItem(IDC_infoList); //获取控件句柄
CRect rect; //获取控件变化前大小
if(nType==1) return; //如果是窗体最小化则什么都不做
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.right=rect.right*cx/m_rect.Width();
rect.left=rect.left*cx/m_rect.Width();
rect.bottom=rect.bottom*cy/m_rect.Height();
rect.top=rect.top*cy/m_rect.Height();
CString a,b,c,d;
a.Format("%d",rect.right);
b.Format("%d",rect.left);
c.Format("%d",rect.bottom);
d.Format("%d",rect.top);
MessageBox(a+" "+b+" "+c+" "+d);
pWnd->MoveWindow(rect);//设置控件大小
}
GetWindowRect(&m_rect);
}
#3
if(pWnd->m_hWnd)
#4
#5
#6
计算rect的时候把m_rect的值也打印出来看下
#7
什么意思?
#8
方法一:
加个变量,bool m_binit;
构造函数中初始化m_binit=false;
在oninitlizedialog中m_binit=true;
OnSize中if(m_binit){....}
方法二:
OnSize中
if(pWnd&&IsWindow(pWnd->m_hWnd)){...}
加个变量,bool m_binit;
构造函数中初始化m_binit=false;
在oninitlizedialog中m_binit=true;
OnSize中if(m_binit){....}
方法二:
OnSize中
if(pWnd&&IsWindow(pWnd->m_hWnd)){...}
#9
m_rect的值在两个模式下是一样的。
#10
没效果,主要是debug下和release下的cx,cy的值不一样。
#11
用outputdebugstring试试,是不是打印了多次
#12
用 GetClientRect 获取高和宽
#13
楼主获取有问题。
窗体不存在也获取。
判断得重写
窗体不存在也获取。
判断得重写
#14
怎么弄?
#15
为什么两个版本下的cx和cy的值不一样呢。谁给指导下啊,很急!!!!
#16
得把窗体初始化一下看下,窗体和控件大小都固定了 就变不了了
#17
我也遇到了同样的问题,请问解决了吗?
#1
可能是变量没有初始化,检查一下
#2
初始化了,代码如下:
void CDataReportDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
// if (m_infoList.GetSafeHwnd())
// {
// m_infoList.MoveWindow(0,0,cx,cy);
// }
CWnd *pWnd;
pWnd = GetDlgItem(IDC_infoList); //获取控件句柄
CRect rect; //获取控件变化前大小
if(nType==1) return; //如果是窗体最小化则什么都不做
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.right=rect.right*cx/m_rect.Width();
rect.left=rect.left*cx/m_rect.Width();
rect.bottom=rect.bottom*cy/m_rect.Height();
rect.top=rect.top*cy/m_rect.Height();
CString a,b,c,d;
a.Format("%d",rect.right);
b.Format("%d",rect.left);
c.Format("%d",rect.bottom);
d.Format("%d",rect.top);
MessageBox(a+" "+b+" "+c+" "+d);
pWnd->MoveWindow(rect);//设置控件大小
}
GetWindowRect(&m_rect);
}
#3
if(pWnd->m_hWnd)
#4
#5
#6
计算rect的时候把m_rect的值也打印出来看下
#7
什么意思?
#8
方法一:
加个变量,bool m_binit;
构造函数中初始化m_binit=false;
在oninitlizedialog中m_binit=true;
OnSize中if(m_binit){....}
方法二:
OnSize中
if(pWnd&&IsWindow(pWnd->m_hWnd)){...}
加个变量,bool m_binit;
构造函数中初始化m_binit=false;
在oninitlizedialog中m_binit=true;
OnSize中if(m_binit){....}
方法二:
OnSize中
if(pWnd&&IsWindow(pWnd->m_hWnd)){...}
#9
m_rect的值在两个模式下是一样的。
#10
没效果,主要是debug下和release下的cx,cy的值不一样。
#11
用outputdebugstring试试,是不是打印了多次
#12
用 GetClientRect 获取高和宽
#13
楼主获取有问题。
窗体不存在也获取。
判断得重写
窗体不存在也获取。
判断得重写
#14
怎么弄?
#15
为什么两个版本下的cx和cy的值不一样呢。谁给指导下啊,很急!!!!
#16
得把窗体初始化一下看下,窗体和控件大小都固定了 就变不了了
#17
我也遇到了同样的问题,请问解决了吗?