CFormView大小改变问题

fvan 2005-01-09 11:32:13
用VC生成一个视图框架,视图类继承CFormView.当视图大小改变时,CFormView不随改变,(视图小于时会出现滚动条)。我在重载了消息OnSize却总是显示不正常。
该如何实现CFormView随着视图区域的变化而变化
...全文
1140 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
stavck 2005-01-18
  • 打赏
  • 举报
回复
第一次发WM_SIZE时,窗口都没有创建,这时候引用就会把访问非法地址的错误!
fvan 2005-01-18
  • 打赏
  • 举报
回复
谢谢了,可我不明白为什么没判断 m_Button.GetSafeHwnd() 是否为NULL则
总是运行出错呢?
stavck 2005-01-18
  • 打赏
  • 举报
回复
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if(m_Button.GetSafeHwnd() != NULL)
{
m_Button.MoveWindow(cx-100,cy-100,60,30);//没有此,则运行正常
}

SetScrollSizes(MM_TEXT,CSize(cx,cy));
}
fvan 2005-01-18
  • 打赏
  • 举报
回复
UP
fvan 2005-01-18
  • 打赏
  • 举报
回复
我用的方法如下
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

m_Button.MoveWindow(cx-100,cy-100,60,30);//没有此,则运行正常
SetScrollSizes(MM_TEXT,CSize(cx,cy));
}
即重载CMyView中的OnSize,不产生滚动条能做到,但想让控件在离右下角的固定
位置显示,运行却总出错。该如何解决?
fvan 2005-01-18
  • 打赏
  • 举报
回复
楼上的,我在View直接重载OnSize也试过,显示不正常啊
stavck 2005-01-18
  • 打赏
  • 举报
回复
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

CRect rc;
GetClientRect(&rc);

if(GetSafeHwnd() != NULL)
{
MoveWindow(&rc);
}

}
fvan 2005-01-18
  • 打赏
  • 举报
回复
上述办法虽然能行,但又有新的问题,
若在动态的改变CFormView中控件的大小或位置,编译能通过去运行总出错,
有什么解决办法吗?
fengqinggao 2005-01-10
  • 打赏
  • 举报
回复
在CMainFrame里重载OnSize,设置CFormView的大小,或者调用CFormView里的设置大小的函数……
oyljerry 2005-01-10
  • 打赏
  • 举报
回复
重载OnSize消息,然后MoveWindow调整大小成比例
poplau 2005-01-10
  • 打赏
  • 举报
回复
我是这样做的。
首先将CFormView和资源文件dialog联系起来,然后把dialog长宽设置得很小。
然后可以用CFormView中的SetScrollSize来设定CFormView的大小,具体用法可以看看MSDN
Kudeet 2005-01-10
  • 打赏
  • 举报
回复
同意楼上

external YourCtrl yourCtrl;
RECT rect;
GetClientRect(&rect);
int cx = rect.left+10;
int cy = rect.top +20;
int width = rect.right- rect.left - 10 - 10;
int height = rect.bottom - rect.top - 20 -20;
yourCtrl.SetWindowPos(
NULL,
cx,
cy,
width,
height,
SWP_DRAWFRAME);
cdchengyi 2005-01-10
  • 打赏
  • 举报
回复
在OnInitialUpdate()里添加
CSize sizeTotal;
sizeTotal.cx=0;
sizeTotal.cy=0;
SetScrollSizes(MM_TEXT, sizeTotal);
在onsize()里加
CFormView::OnSize(nType, cx, cy);
Invalidate(TRUE);
fvan 2005-01-10
  • 打赏
  • 举报
回复
就是重载Onsize中用MoveWindow,可总是显示不正常?不知阁下如何实现啊
fvan 2005-01-09
  • 打赏
  • 举报
回复
up

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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