网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
MFC窗口位置管理详细分析及实例
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
么时候呢?我是这样认为的:通常都是在主框架窗口的尺寸改变
时,子窗口在响应WM_SIZEPARENT消息时调整自己的尺寸以便跟上框架窗口的尺寸变化。有这样的情况:父窗口的客户区内的子窗口的数目是动态变
化的,而且这些子窗口互相不能重叠,他们的尺寸由于某种原因不好改变。那么当子窗口的数目发生增减时,如不调整父窗口自己的尺寸,就会导
致客户区留下空白或新增加的子窗口没有多余空间安排。FWS_SNAPTOBARS风格就是用在这种情况下,使父窗口能调整自己的大小以便容纳子窗口。
看这个分支里的语句,似乎是这样的。
一般都不会有FWS_SNAPTOBARS风格的,所以一般是执行else分支。在这个分支里简单地调用RepositionBars去重排所有的子窗口,它的参数
lpRectClient 使用默认的NULL值,意思就是初始可用区域是父窗口的整个客户区。
可以在自己的派生类里编写自己的RecalcLayout函数,以便用自己的方法调用RepositionBars函数。要注意的是在CFrameWnd类的窗口刚被创建
时RecalcLayout函数也被调用,此时可能某些用户自己加的子窗口还未被创建出来,所以在这个函数内如果要引用某个用户自己加的子窗口的句柄
的话必须先用::IsWindow()函数判断一下该窗口句柄是否可用。否则的话就会出现非法操作了。


实战演练
由于精力有限,只提供一个实战例子:将视图,工具栏和状态栏赶到右边
我们要生成这样的界面:视图窗口,工具栏和状态条统统在右边,左边是个自己加的窗口。
第一步:启动AppWizard生成一个单文档程序,全部使用默认设置。
第二步:在CMainFrame类里增加一个成员 CWnd m_mywnd。
第三步:在CMainFrame::OnCreate()函数里增加这几行:
m_mywnd.CreateEx
(
WS_EX_CLIENTEDGE,
AfxRegisterWndClass
(
CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL,IDC_ARROW),
::CreateSolidBrush(RGB(190,190,190))
),
"",
WS_VISIBLE|WS_CHILD,
CRect(0,0,0,0),
this,
IDC_MYPANE //用IDE的菜单view/resource symbols项加入的id。
);

第四步:启动ClassView,在CMainFrame里加上虚函数RecalcLayout(),函数体这样写:
void CMainFrame::RecalcLayout(BOOL bNotify)
{
if (m_bInRecalcLayout)
return;
m_bInRecalcLayout = TRUE;

//rect1是新加的窗口将占据的区域
//rect2就是提供给工具栏,状态条和视图窗口的初始可用区域。
CRect rect1,rect2;
GetClientRect(&rect1);
rect1.right=rect1.right/3;
GetClientRect(&rect2);
rect2.left=rect2.right/3;

if(::IsWindow(m_mywnd.m_hWnd)) //这句是不能少的
m_mywnd.MoveWindow(&rect1);
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposExtra, CRect(0,0,0,0),&rect2);
m_bInRecalcLayout = FALSE;
}

第五步:用IDE的菜单view/resource symbols项加入一个id:IDC_MYPANE。
第六步:编译并运行程序

好了,在主框架窗口的左边多了一个灰色的窗口,它占主窗口客户区的三分之一。工具栏,状态条和视图都被赶到右边三分之二的地方去了。

  • 上一篇资讯: VC中设置Dialog背景图象
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号