当前位置: 首页 > 图文教程 > 开发语言 > VC++ > IE控制条的实现

VC++
用 auto_ptr 类模板帮助动态内存管理
走近 STL
一步一步学STL标准模板库
使用 <multimap> 库创建重复键关联容器
使用 <map> 库创建关联容器
用 vectors 改进内存的再分配
用函数模板实现和优化抽象操作
STL 字符串类与 UNICODE 及其它......
如何在Dll中导出STL类
再谈“在STL列表(Lists)中插入不同类型的对象”
使用::std::vector<>作为管理动态数组的优先选择
三种常见中文内码的转换方法
JNI 中文处理问题小结
构建 GB2312 汉字库的 unicode 码表
正则表达式简介
在非MFC程序中引用CString
UTF-8与GB2312之间的互换
宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现
用VC++设计语法编辑器
C语言中对时间和日期的处理

VC++ 中的 IE控制条的实现


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

IE控制条的实现
作者:樊文生(合肥)

下载本文源代码

相信各位兄弟对微软公司的IE一定非常的熟悉,由其是其右侧可以显示和隐藏的收藏夹看上去非常的美观,基于这点,我便做了这个关于IE控制条的示例工程,现在将其贴于 www.vckbase.com上,希望能够于大家共享,另外,由于我VC水平有限,所以在该工程中肯定会出现这样或是那样的问题,希望大家能够多多提出一些问题,我将会一如既往的将其一一更正。
该工程的运行结果如下:


为了方便大家对代码的阅读,下面对CIEBar类作一简单介绍:

一、IEBar界面的绘制

CIEBar从CDialogBar派生而来, 在OnPaint中调用了DrawFrm, DrawTitleTxt, DrawHideBtn三个函数
DrawFrm函数调用 MoveTo,LineTo函数绘制框架,DrawTitleTxt函数调用DrawText绘制标题文字,DrawHideBtn函数用于绘制关闭按钮,其关键代码如下:

// 添加tooltipm_TipCtrl.AddTool(this, "关闭", t_HideBtnRc, 1); // 绘制按钮dc.SelectStockObject(NULL_BRUSH);	if(m_bRaised)	dc.Draw3dRect(&t_HideBtnRc, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW));	else if(m_bPressed) dc.Draw3dRect(&t_HideBtnRc, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHIGHLIGHT));// 显示关闭图标HICON hIcon = AfxGetApp()->LoadIcon(IDI_HIDE_BTN);ASSERT(hIcon);::DrawIconEx(dc.m_hDC, t_HideBtnRc.left, t_HideBtnRc.top, hIcon, 16, 16, 0, NULL, DI_NORMAL);
在OnMouseMove中调用DrawHideBtnFace判断鼠标是否在"关闭按钮"上绘制按钮的边框

二、IEBar的关闭实现

在OnLButtonUp中判断是否点在"关闭按钮"上,假如是则关闭,代码如下:
	if(!m_HideBtnRc.IsRectEmpty())	if(m_HideBtnRc.PtInRect(point))	GetDockingFrame()->ShowControlBar(this, FALSE, FALSE);
三、IEBar尺寸调整的实现

在OnLButtonDown中判断是否按在可调边框上,并设置m_bResize记录状态
	CRect t_CursorRc(m_VirClientRc);	t_CursorRc.left = m_VirClientRc.right;	t_CursorRc.right = t_CursorRc.left + IE_FRM_WIDTH;	if(t_CursorRc.PtInRect(point))	m_bResize = true;
在OnMouseMove中根据m_bResize的值来画拖动线。
当鼠标放开,在OnLButtonUp中调用ResizeIEBar对窗口进行移动操作。

四、CIEBar的使用


CIEBar的使用非常简单,在CMainFrame中定义一个变量后,在CMainFrame::OnCreate中用如下代码创建并加入树形控件:
if(!m_IEBar.Create(this, IDD_IEBAR, CBRS_LEFT, 100) || !m_IEBar.InitIEBar())	return -1;	CTreeCtrl* pTreeCtrl = m_IEBar.GetTreeCtrl();	ASSERT(pTreeCtrl);	// modify tree styles	pTreeCtrl->ModifyStyle(NULL,	TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);	HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root");	for(int i=0; i<40; i++)	{	CString t_ItemStr;	t_ItemStr.Format("node %d", i+1);	pTreeCtrl->InsertItem(t_ItemStr, t_hRoot);	}	m_IEBar.EnableDocking(CBRS_ORIENT_HORZ);	DockControlBar(&m_IEBar);

因为该工程是模仿IE浏览器做的,所一其大部分的操作风格都和IE浏览器非常的相似,例如当我门用鼠标调整IE控制条的宽度时,我们最多只能将其拉伸到工作区的一半大小为止,并且可以通过“查看”菜单中的“IE控制条”选项来显示和隐藏。
最后我想感谢vckbase的建设者们,感谢他们能够为我们提供这么优秀的交流空间。