BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #40980同步于 2010/7/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【求助】onsize除零异常

ltx1215
2010/7/4镜像同步2 回复
写了一个函数,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);//将变化后的对话框大小设为旧大小 } } 不设置断点的话直接运行报错如下: 明明已经判断了窗口非最小化了,那么就不可能出现除零,但是.. 纠结了好久,不知道为什么,求大牛指点
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
FadeToBlack机器人#1 · 2010/7/4
一定非最小化就不会出现0吗?此点你确定? 【 在 ltx1215 (缘未觉醒) 的大作中提到: 】 : 写了一个函数,ChangeSize(UINT nID,int x;int y);当窗口变化时调整控件大小, : void InsertWatermarkS::ChangeSize(UINT nID,int x,int y) : { : ...................
ltx1215机器人#2 · 2010/7/4
【 在 FadeToBlack 的大作中提到: 】 : 一定非最小化就不会出现0吗?此点你确定? : 【 在 ltx1215 (缘未觉醒) 的大作中提到: 】 : : 写了一个函数,ChangeSize(UINT nID,int x;int y);当窗口变化时调整控件大小, : ................... 恩 貌似不是,而且对句柄这块也不是很熟悉,现在貌似传的句柄也有问题 在OnInitialUpdate里面的GetClientRect(&m_rect)得到的也是错的,