自动隐藏停泊窗体实现

2016-01-29 12:09 40 1 收藏

自动隐藏停泊窗体实现,自动隐藏停泊窗体实现

【 tulaoshi.com - C语言心得技巧 】

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

作者:Redcloth

下载源代码

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

本实现,准确地说是在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类型的对话框加载到停泊窗).

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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 ,否则画出的窗体会比较难看。

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

来源:http://www.tulaoshi.com/n/20160129/1484864.html

延伸阅读
标签: word
Word自动隐藏功能区实现全屏浏览文档的方法   在看视屏时,默认情况下我们都会全屏观看,想必这一是很多人的习惯了,那么如果看一篇文章该如何全屏呢?其实Word2013中可以通过隐藏阅读工具栏和显示阅读工具栏来达到全屏和退出全屏的目的。下面有个不错的教程,感兴趣的朋友可以参考下。 简要概述 实现全屏与退出全屏主要是对...
标签: Web开发
文字隐藏 应用广泛,但常用的方法没有什么亲和力。 常用文字隐藏方法的缺陷: 1、display:none 这种方法搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略; 屏幕阅读器会忽略被隐藏的文字。 2、visibility: hidden 这种方法隐藏了文字却仍然占据物理空间。 更好的方法: overflow:hidden .class{ display:block;/*统一转...
标签: 办公软件
朋友在用Excel统计学生的成绩时,在E63单元格中输入公式:=AVERAGE(E3:E62),准备计算平均分,由于上面的单元格中还没有输入成绩数据,因而公式返回了一个错误结果(如图1)。 朋友问我,如何让这些错误结果不显示或打印出来呢?我向他介绍了下面三种方法。 图1 一、函数处理法 ...
标签: 办公软件
朋友在用Excel统计学生的成绩时,在E63单元格中输入公式:=AVERAGE(E3:E62),准备计算平均分,由于上面的单元格中还没有输入成绩数据,因而公式返回了一个错误结果(如图1)。朋友问我,如何让这些错误结果不显示或打印出来呢?我向他介绍了下面三种方法。 图1一、函数处理法我们只要用IF和ISERROR函数对公式稍作处理,这个错误值就不再显示出...
文字隐藏应用广泛,但常用的方法没有什么亲和力。常用文字隐藏方法的缺陷: 1、display:none 这种方法搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略; 屏幕阅读器会忽略被隐藏的文字。 2、visibility: hidden 这种方法隐藏了文字却仍然占据物理空间。 3、推荐大家使用这个更好的方法: ...

经验教程

187

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部