当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 自动隐藏停泊窗体实现

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 自动隐藏停泊窗体实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 161 ::
收藏到网摘: n/a

自动隐藏停泊窗体实现
-- 轻松实现类MSDN2002界面(二)(续)

作者:Redcloth

下载源代码

自动隐藏停泊窗体在商业的MFC图形库中(如Xtreme)已支持得很好,但他们大多都重写了MFC相应的支持代码

像Cristi Posea的CSizingControlBar实现VC6界面那样,重用大部分MFC Dock 框架类而实现Vc .Net界面的免费库很少见(偶没发现:)

本实现,准确地说是在Cuick 的《轻松实现类MSDN2002界面(二)》基础上的增强版。
其主要更新为:

Bugfixs:
1.增加定时器 TID_AUTO_HIDE_DELAY 避免出现两个自动隐藏窗口(AHFloatWnds)同时显示的问题.
2.focus 切换问题(特别是在 自动隐藏窗口(AHFloatwnd) 与 停泊窗体(DockPageBar)之间的切换).
3.在改变停泊窗体大小时会有的闪烁、颤动.
4.在改变自动窗体(AHFloatWnd)大小时,尺寸不能超出Mainframe.
5.static MFC 连接(Release & Debug)的问题(增加STATIC_MFC_LINK 编译选项).
6.在CDockPageBar::AddPage 函数中检验 pWnd的 style,确保其为 WS_CHILD style,
避免由此引发的窗口管理混乱(如把一个WS_POPUP类型的对话框加载到停泊窗).

Improvements&Newfeatures:

1.增加自动隐藏窗口( AHFloatWnd) SLIDE_IN/SLIDE_OUT 动画效果
(windows API ::AnimateWindow 对于自画窗体好像不行)
2.增加的新的自动停泊算法,即 精确停泊(as in VC .net), 但是由于停泊窗体的类
是从Cristi Posea的CSizingControlBar继承而来, 横向停泊的窗体会优先充满剩余空间
的问题依然存在
3. 重写了 CDockPageBar 类的NcPaint,NcCalClient,OnNcLButtonXXXX,OnNcHitTest 的实现
把标签和标题栏的重画放到非客户区来做,把原来的绘图效果作了改进
4.增加对MDI 的支持

仍有待解决的问题:
1.横向停泊的窗体会优先充满剩余空间
2.如果框架程序中有工具条,且为可停泊的(Dockable),在自动隐藏时行为不是很合理(浮动窗体
有可能会将遮住工具条)


图一: 多文档框架的停泊窗体


图二: 多文档框架的自动隐藏窗体

使用的方法与《轻松实现类MSDN2002界面(二)》中基本一样

不同在于对于多文档 CMainframe 是从CDMIAutoHideFrame 继承的.
例子工程中MDI是vc2003 作的,SDI VC6和vc2003都可用

另外,如果你想使用静态MFC 连接,需要加一个编译选项STATIC_MFC_LINK ,否则画出的窗体会比较难看。

很希望有人能帮助解决尚存的两个问题