工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
MFC程序员的WTL指南之分隔窗口
[文章信息]
作者:LITHE
时间:2005-03-08
出处:BLOG
责任编辑:方舟
[文章导读]
随着使用两个分隔的视图管理文件系统的资源管理器在Windows 95中第一次出现
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· 软件盗版与反盗版之战
· 图解PS按比例自动批量裁剪照片
· Windows开机关机故障分析及排除
· Visual FoxPro9.0构建管理系统图解
· 体验面对面的网络视频通讯
· 对付网页恶意代码
· Word动画教程:表格操作全接触
· JBuilder 2005开发Applet游戏全接触
· WinRAR操作技巧与另类应用
[正文]

上一页  1 2 3 4 5 6  下一页

  窗格容器

  WTL还有一个被称为窗格容器的构件,它就像Explorer中左边的窗格那样,顶部有一个可以显示文字的区域,还有一个可选择是否显示的Close按钮:


  就像分隔窗口管理两个窗格窗口一样,这个窗格容器也管理一个子窗口,当容器窗口的大小改变时,子窗口也相应的改变大小以便能够填充容器窗口的内部空间。

  相关的类

  这个窗格容器的实现需要两个类:CPaneContainerImpl和CPaneContainer,它们都在atlctrlx.h中声明。CPaneContainerImpl是一个CWindowImpl派生类,它含有窗格容器的完整实现,CPaneContainer只是提供了一个类名,除非重载CPaneContainerImpl的方法或改变容器的外观,一般使用CPaneContainer就够了。

  基本方法

HWND Create(
 HWND hWndParent, LPCTSTR lpstrTitle = NULL,
 DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
 DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL)
 HWND Create(
  HWND hWndParent, UINT uTitleID,
  DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
  DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL)

  创建一个CPaneContainer窗口和创建其它子窗口一样。有两个Create()函数,它们的区别仅仅是第二个参数不同。第一个函数需要传递一个字符串作为容器顶部区域显示的文字,第二个参数需要需要传一个字符串的资源ID,其他参数只要使用默认值就行了。

DWORD SetPaneContainerExtendedStyle(DWORD dwExtendedStyle, DWORD dwMask = 0)
DWORD GetPaneContainerExtendedStyle()

  CPaneContainer还有一些扩展样式用来控制容器窗口上Close按钮的布局方式:

  ·PANECNT_NOCLOSEBUTTON:使用样式去掉顶部的Close按钮。

  ·PANECNT_VERTICAL:设置这个样式后,顶部的文字区域将沿着容器窗口的左边界垂直放置。

  扩展样式的默认值是0,表示容器窗口是水平放置的,还有一个Close按钮。

HWND SetClient(HWND hWndClient)
HWND GetClient()

  调用SetClient()可以将一个子窗口指派给窗格容器,这和调用CSplitterWindow类的SetSplitterPane()方法作用类似。SetClient()同时返回原来的客户区窗口句柄而调用GetClient()则可以得到当前的客户区窗口句柄。

BOOL SetTitle(LPCTSTR lpstrTitle)
BOOL GetTitle(LPTSTR lpstrTitle, int cchLength)
int GetTitleLength()

  调用SetTitle()可以改变容器窗口顶部显示的文字,调用GetTitle()可以得到当前窗口顶部区域显示的文字,调用GetTitleLength()可以得到当前显示的文字的字符个数(不包括结尾的空字符)。

BOOL EnableCloseButton(BOOL bEnable)

  如果窗格容器使用的Close按钮,你可以调用EnableCloseButton()来控制这个按钮的状态。

  在分隔窗口中使用窗格容器

  为了说明窗格容器的使用方法,我们将向ClipSpy的分隔窗口的左窗格添加一个窗格容器,我们将一个窗格容器指派给左窗格取代原来使用的list控件,而将list控件指派给窗格容器。下面是在CMainFrame::OnCreate()中为支持窗格容器而添加的代码。

LRESULT CMainFrame::OnCreate ( LPCREATESTRUCT lpcs )
{
 //...
 m_wndVertSplit.Create ( *this, rcDefault, NULL, dwSplitStyle, dwSplitExStyle );

 // Create the pane container.
 m_wndPaneContainer.Create ( m_wndVertSplit, IDS_LIST_HEADER );

 // Create the left pane (list of clip formats)
 m_wndFormatList.Create ( m_wndPaneContainer, rcDefault );
 //...
 // Set up the splitter panes
 m_wndPaneContainer.SetClient ( m_wndFormatList );
 m_wndVertSplit.SetSplitterPanes ( m_wndPaneContainer, m_wndDataViewer );

  注意,现在list控件的父窗口是m_wndPaneContainer,同时m_wndPaneContainer被设定成分隔窗口的左窗格。

  下面是修改后的左窗格的外观,由于窗格容器在顶部的文本区域自己画了一个三维边框,所以我还要稍微修改一下边框的样式。这样看起来不是很好看,你可以自己调整样式知道你满意为止。(当然,你需要在Windows XP 上测试一下哪个界面主题可以使得分隔窗口看起来“更有意思”。)



上一页  1 2 3 4 5 6  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 制作一个基于MFC对话框的OpenGL类
  • MFC六大关键技术之运行时类型识别
  • 轻松实现Visual C++源代码规范整理
  • 用Visual C++实现CPU特权指令操作
  • VC下用串口与电台通信需注意的问题
  • 盛大董事长陈天桥:参股新浪只是一个开始
  • 6C联盟降低DVD收费标准 国内厂商持观望态度
  • 熊猫易美崩盘后无人打理 贴牌模式弊端显现
  • 盛大新浪遭口水突袭 分析称有背后集团操纵
  • 百度发布首款可检索中英文双语硬盘搜索软件
  • 电脑报:涉嫌赌博 盛大“劫天牢”调查
  • 英特尔日本“回扣风波”未了 又遭欧盟调查
  • 黄宏生建议国家投1500亿美元搞10年科技会战
  • Advertisement