MFC 控件开发

michael2988 2013-02-03 04:46:59
在进行MFC ActiveX开发时,在控件里放一个Dialog,如何根据控件的大小自动调整Dialog的大小?
我的方法是:
void CMyActiveXCtrl::OnSize(UINT nType, int cx, int cy)
{
COleControl::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
if (cx > 0 && cy > 0)
{
m_dlgBody.SetDlgSize();
}
}

void CDlgBody::SetDlgSize()
{
CRect rect;
GetParent()->GetClientRect(&rect);
this->MoveWindow(rect);
}

但是没效果。。。
网上查了蛮多资料都说MoveWindow可以动态改变对话框的大小。
请各位大虾帮帮忙啊!!!
...全文
229 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘中远 2013-02-04
  • 打赏
  • 举报
回复
我感觉你那样会崩溃,至少要判断m_dlgBody的句柄是否为空才行 另外MoveWindow是没问题的,你可以设置断点看看
fishion 2013-02-04
  • 打赏
  • 举报
回复
可以先调试下有没有触发那个消息了,其次是在调用这些方法的时候先判断对话框是否已经创建了
michael2988 2013-02-04
  • 打赏
  • 举报
回复
引用 1 楼 tiger9991 的回复:
OnSize的对应映射用了没 WM_SIZE消息映射
在CMyActiveXCtrl里有ON_WM_SIZE(),函数都是用向导生成的。。。
michael2988 2013-02-04
  • 打赏
  • 举报
回复
我的错,由于对话框已有的控件的位置不变,还以为对话框没有放大。。。
michael2988 2013-02-04
  • 打赏
  • 举报
回复
对话框已经创建,句柄不为空,且MoveWindow函数确实是执行了的,this->MoveWindow(rect);rect的bottom和right都和控件OnSize函数的cx和cy一样,但是它就是不随控件大小改变而改变啊!!!
hdg3707 2013-02-04
  • 打赏
  • 举报
回复
COleControl::OnSize(nType, cx, cy); 去掉这句,不要执行默认的基类函数,另外,还有一个坐标系和客户区和屏幕区的问题,你单步执行看看SIZE里的数据是多少,是不是需要进行ClientToScreen和ScreenToClient这两个函数转换
  • 打赏
  • 举报
回复
有个ResizableLib你找找 很好用
jimette 2013-02-03
  • 打赏
  • 举报
回复
我也用这种方法 可以的 是不是向ls说的
引用 1 楼 tiger9991 的回复:
OnSize的对应映射用了没 WM_SIZE消息映射
傻X 2013-02-03
  • 打赏
  • 举报
回复
OnSize的对应映射用了没 WM_SIZE消息映射

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧