扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
相信各位兄弟对微软公司的IE一定非常的熟悉,由其是其右侧可以显示和隐藏的收藏夹看上去非常的美观,基于这点,我便做了这个关于IE控制条的示例工程,希望能够于大家共享,另外,由于我VC水平有限,所以在该工程中肯定会出现这样或是那样的问题,希望大家能够多多提出一些问题,我将会一如既往的将其一一更正。
该工程的运行结果如下:
为了方便大家对代码的阅读,下面对CIEBar类作一简单介绍:
一、IEBar界面的绘制
CIEBar从CDialogBar派生而来, 在OnPaint中调用了DrawFrm, DrawTitleTxt, DrawHideBtn三个函数
DrawFrm函数调用 MoveTo,LineTo函数绘制框架,DrawTitleTxt函数调用DrawText绘制标题文字,DrawHideBtn函数用于绘制关闭按钮,其关键代码如下:
// 添加tooltip
m_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控制条”选项来显示和隐藏。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者