返回信息流写了一个函数,ChangeSize(UINT nID,int x;int y);当窗口变化时调整控件大小,
void InsertWatermarkS::ChangeSize(UINT nID,int x,int y)
{
CWnd *pWnd;
pWnd = GetDlgItem(nID); //获取控件句柄
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
// cx/m_rect.Width()为对话框在横向的变化比例
rect.left=rect.left*x/m_rect.Width();/**//////调整控件大小
rect.right=rect.right*x/m_rect.Width();
rect.top=rect.top*y/m_rect.Height();
rect.bottom=rect.bottom*y/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
}
单步运行第一步显示m_rect的参数还是正确的:如下
F10继续的话就会显示m_rect内部的参数不正确
再在onsize内部调用ChangeSize调整控件大小,代码如下
void InsertWatermarkS::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if(nType!=SIZE_MINIMIZED ){
ChangeSize(IDC_STATIC, cx, cy);
ChangeSize(IDC_STATIC_PIC1, cx, cy);
ChangeSize(IDC_STATIC_PIC2, cx, cy);
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
}
}
不设置断点的话直接运行报错如下:
明明已经判断了窗口非最小化了,那么就不可能出现除零,但是..
纠结了好久,不知道为什么,求大牛指点
这是一条镜像帖。来源:北邮人论坛 / cpp / #40980同步于 2010/7/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】onsize除零异常
ltx1215
2010/7/4镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
一定非最小化就不会出现0吗?此点你确定?
【 在 ltx1215 (缘未觉醒) 的大作中提到: 】
: 写了一个函数,ChangeSize(UINT nID,int x;int y);当窗口变化时调整控件大小,
: void InsertWatermarkS::ChangeSize(UINT nID,int x,int y)
: {
: ...................
【 在 FadeToBlack 的大作中提到: 】
: 一定非最小化就不会出现0吗?此点你确定?
: 【 在 ltx1215 (缘未觉醒) 的大作中提到: 】
: : 写了一个函数,ChangeSize(UINT nID,int x;int y);当窗口变化时调整控件大小,
: ...................
恩 貌似不是,而且对句柄这块也不是很熟悉,现在貌似传的句柄也有问题 在OnInitialUpdate里面的GetClientRect(&m_rect)得到的也是错的,