CMainFrame 的子窗口问题,CChildView 不能换成其他的CWnd派生类?

sungengyu 2006-06-13 03:48:08
向导生成的Single document(不要 Document/View architecture surport),CMainFrame 中的子窗口是 CWnd 派生类 CChildView,在 CMainFrame::OnCreate中创建:

我把 CMainFrame 的子窗口换成其他的 CWnd 派生类(比如CListCtrl),发现CMainFrame 改变大小时,CListCtrl 不能自动改变大小。但是原先的 CChildView 却可以随着 CFainFrame 的大小改变而自动调整大小。

请高人解惑。
...全文
288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungengyu 2006-06-14
  • 打赏
  • 举报
回复
laiyiling(【陌生人.MVP】) :

本来也没想用 View 。我就是很委婉的提醒 seasol(海子) 注意看清题目。
Kudeet 2006-06-14
  • 打赏
  • 举报
回复
我想应该是View和CWnd类有区别的,你可以区看看代码。
sungengyu 2006-06-14
  • 打赏
  • 举报
回复
seasol(海子) :CListView 的构造函数是保护的,应该用动态创建。但是我这里需要的就是普通的CWnd派生类,可以直接创建的。

sungengyu 2006-06-14
  • 打赏
  • 举报
回复
解决办法:创建子窗口时,把子窗口的ID设为 AFX_IDW_PANE_FIRST 。
seasol 2006-06-13
  • 打赏
  • 举报
回复
将CListCtrl换成CListView试试。
sungengyu 2006-06-13
  • 打赏
  • 举报
回复
laiyiling(【陌生人.MVP】) : 多谢!

这种办法把问题绕过去了,应该可行。等结贴时100分奉上。


不过我还是想知道答案,感兴趣的继续讨论:(此问题如果解决另加100分)
为什么 CChildView 作为 CMainFrame 子窗口时一切正常,而换成其他的 CWnd 派生类就不正常,到底差在哪里呢?



Kudeet 2006-06-13
  • 打赏
  • 举报
回复
我把 CMainFrame 的子窗口换成其他的 CWnd 派生类(比如CListCtrl)
==========
不需要替换,把CListCtrl定义为CChildView的成员变量,然后处理wm_size,这样会给省很多麻烦。你直接用你的CWnd对象把整个View填满就可以了
sungengyu 2006-06-13
  • 打赏
  • 举报
回复
syy64(太平洋) : 谢谢。

请问为何 CChildView 不需要在 OnSize中改变大小?

另外如果 CMainFrame 有工具条或其他 DialogBar 的话,是没办法在 OnSize 中计算子窗口大小的。

感觉上可以重写 void CFrameWnd::RecalcLayout(BOOL bNotify) 来调整大小 ,但实际上 CFrameWnd::RecalcLayout 里面的代码比较复杂,没办法重写。

问题的重点是:为什么 CChildView 作为 CMainFrame 子窗口时一切正常,而换成其他的 CWnd 派生类就不正常,到底差在哪里呢?
syy64 2006-06-13
  • 打赏
  • 举报
回复
在OnSize里用MoveWindow函数来改变大小。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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