返回首页

下载完整的源代码和演示项目 - 685 KB
{S0}简介
本文介绍设置Windows XP的浏览器栏的全面实施Win32控件和MFC包装。浏览器栏在Windows 98/Me/2k/XP是完全shellstyle.dll知道的,即可以用任何XP视觉主题(标准,第三方不规范,和传统的Windows计划)。
新的自定义控件,包括扩展的按钮控制,扩展的静态控制,tasklink控制,并可折叠头控制。背景
Windows资源管理器与Windows XP引入了一种奇特的新的控制栏所谓的"浏览器栏"。酒吧处理一个或多个可折叠的窗格包含tasklinks翔实的文字和一个可折叠的头控制。
浏览器栏既不是出口的任何API,也不使用它的标准的XP主题,渲染。所有位图和度量驻留在名为"shellstyle.dll"的专业DLL。
这里介绍的实施,已为这个非标准的信息和高度分析器先进的渲染引擎,允许应用扩展/折叠褪色,滚动效应窗格。使用代码
ZIP存档包含一个完整的文档(Win32/MFC)HTMLHelp文件(explorerbar.chm)这样的平台SDK。使用库之前,您必须建立explorerbar.dsw所有配置。如果你有兴趣示例应用程序,然后建立ExpBarSample.dsw以及。
建设的explorerbar.dsw所有配置后,你发现在"explorerbar \ LIB"库和MFC包装"explorerbar \ LIB \ MFC"。一般的意见,兴趣点
约。 18.000行代码需要被写入,以支持所有功能Windows XP中浏览器栏,即预期错误修复!
,即使浏览器栏将在未来出口的一个API,它不会工作在Windows下98/Me/2k因为它可能会使用一个新的XP主题渲染,紧紧地联系在一起到Windows XP。
一个大的TODO项目是一个纯粹的MFC版本的浏览器栏。这将简化消息处理表示在浏览器栏SDK(HTMLHELP)。最大的Win32应用程序已被写入当前的实现(explorerbar.dll)平台的支持。历史
1.0版是第一个发布版本的浏览器栏。这是在伟大的嵌入式克里斯提Posea相当大的控制栏。

回答

评论会员:yyyzlf 时间:2011/12/01
,当其他窗口重叠的explorebar,将无法正确显示
在类CExpBarXP中添加计时器事件
1。增加一个定时器INT CExpBarXP:在OnCreate(LPCREATESTRUCT lpCreateStruct)
SetTimer的(1,50,NULL)2.response WM_ONTIMER 无效CExpBarXP:的OnTimer(UINT nIDEvent)
{
/ / TODO:在此处添加消息处理程序代码和/或调用默认
UpdateWindow();
_baseclassExpBarXP:的OnTimer(nIDEvent)
}
3.release定时器无效CExpBarXP:OnDestroy()
{
&# 160;
KillTimer(1);}


修订于2009年12月10日(星期四)下午08:28
评论会员:斯特凡达林 时间:2011/12/01
是否有可能使这项工作在Windows 7?
我有Visual Studio 2008和它似乎编译,但我不能在我的项目中使用它工作在XP。
/斯特凡
评论会员:hunzaixa 时间:2011/12/01

评论会员:thuong101277 时间:2011/12/01
以下是一些错误,当我建立它:

致命错误C1083:无法打开包括文件:"Tmschema.h":没有这样的文件或目录
错误C2065:'IDC_HAND":未声明的标识符
错误C2065:'WM_THEMECHANGED":未声明的标识符
错误C2051:case表达式不是常数
错误C2065:'AC_SRC_ALPHA":未声明的标识符

有谁能够帮我解决这个问题呢?

非常感谢。
评论会员:an7777 时间:2011/12/01
!非常好的控制
欣赏shareing。
评论会员:迈克尔Chourdakis 时间:2011/12/01
如何使用这个很好的控制在Vista?已一段时间,因为不相容宣布任何更新尚未....{ BR}

评论会员:奥尔hexosa 时间:2011/12/01
我尝试编译VC 6,但这个错误的发生:
错误C2065:'DWORD_PTR':未声明的标识符
我应该怎么办? thanx
评论会员:迈克尔Chourdakis 时间:2011/12/01
我试图创建一个静态库和它的作品,但我的EXE似乎已经在他们的部分列表第一个可写的共享,这将防止UPX压缩

如何消除任何线索?


迈克尔

评论会员:迈克尔Chourdakis 时间:2011/12/01
我固定它,它是在dllmain.c
代码我删除了它,一切顺利。


评论会员:yhw19850401 时间:2011/12/01
。非常感谢您浏览器栏,它是一个非常好的控制,但XPExplorerBar.dsw是它运行时的错误,我不能发现错误,只要求你,或者如果你可以给menbsp; 的explorerbard.lib,它的OK.Thanke you.Please告诉我quickly.my电子邮件yhw19850401@yahoo.com.cn
小牛

评论会员:manuel357 时间:2011/12/01
感谢您浏览器栏,它非常是一个非常漂亮的的控制和它工作得很好。
但我需要你的帮助,因为我不能在代码中找到在那里我可以调整
初始宽度吧。
请帮助我!
在此先感谢,
曼努埃尔
评论会员:Tornado8a 时间:2011/12/01
你必须改变这一行:
m_szVert = CSIZE(253,253);
在CExpBarXP:CExpBarXP()
文件:ExpBarXP.cpp

你必须你想要的值加10(即243 10 = 253)

泽维尔又名adko
评论会员:sunika 时间:2011/12/01
我尝试运行调试版本,并有消息
应用程序作出了尝试没有使用清单加载C运行时库。
MSGBOX图片
{A}
评论会员:斯特凡达林 时间:2011/12/01
我如何禁用在运行时TaskLink32控制?
评论会员:kurome 时间:2011/12/01
编译...
scbarg.cpp
D:\ [00] kurome_work \ [060525]短信精灵\#49324;#48376; - sms_wizard \ scbarg.cpp(57):错误C2440:'的static_cast":无法从"UINT(__thiscall CSizingControlBarG:转换:*)(口岸系统)","LRESULT(__thiscall的CWnd::*)(连接点)
转换基地派生需要的dynamic_cast或的static_cast
sizecbar.cpp
D:\ [00] kurome_work \ [060525]短信精灵\#49324;#48376; - sms_wizard \ sizecbar.cpp(109):错误C2440:'的static_cast":无法转换从"UINT(__thiscall CSizingControlBar::*)(口岸系统)","LRESULT(__thiscall的CWnd::*)(连接点)
转换基地派生需要的dynamic_cast或的static_cast
D:\ [00] kurome_work \ [060525]短信精灵\#49324;#48376; - sms_wizard \ sizecbar.cpp(1296):错误C2065:'afxChNil":未声明的标识符
生成代码...
生成日志保存在"文件:/ / D:\ [00] Kurome_work \ [060525]短信精灵\#49324;#48376; - SMS_WIZARD \ DEBUG \ BuildLog.htm"
SMS_WIZARD - 3个错误(S),0警告(S)

////////////////////////////////////////////////// /////////////////////////{ BR}
请帮我〜〜

世界您好〜
评论会员:!New_Rulz 时间:2011/12/01
更换单位为WM_NCHITTEST LRESULT。

贾韦德
评论会员:kurome 时间:2011/12/01
感谢!!!!{ BR}


世界您好〜
评论会员:!frewah 时间:2011/12/01
我想能够从cloing浏览器栏或更好,以防止任何用户,有一个菜单命令,以便它可以再现。我thougt我可以使用父CS_NOCLOSE,但没有帮助。有谁知道如何做到这一点?
评论会员:frewah 时间:2011/12/01
我发现我自己的问题的解决。我不得不这样做是这样的:

CControlBar * pBar = pFrame -> GetControlBar(ID_EXPLORERBAR);
pFrame -> ShowControlBar(pBar,TRUE,0);
评论会员:gunag 时间:2011/12/01
嗨大家,

在一个项目有时图形用户界面的变化,我用这段代码的一件。我的应用程序都有一个explorerbar的文件夹,包含有时是不可见的几个项目。我现在已经非常糟糕的重绘问题时,我改变了explorerbar窗口的大小,因为第一个非可见项目产生一个WM_PAINT消息层出不穷。有谁知道任何原因为什么它这样做,或知道这个问题的解决方法?

干杯

gunag
评论会员:南方 时间:2011/12/01
Anyboy知道,同样的问题TP我太
评论会员:?gunag 时间:2011/12/01
如果你曾经试图改变"TaskLink32"基于项目的风格,你可能很难。我试图问一个关于它的问题的前面。但我没有得到答案。

笔者采用了PTLSTRUCT指针,它包含有关控件的风格等数据,结合GWL_STYLE的SetWindowLong函数VAR()函数创建的,但它不会更新在飞。因此,处理,删除的控制和新的样式创建一个新的,像这样:
无效UpdateCtrl(DWORD nDialog,DWORD风格,DWORD nDlgItem)
{
/ /假设,你的explorerbar是名为m_wndExpBar
HWND的hWndDlg = m_wndExpBar.GetPaneDialogWindow(nDialog)
HWND的hWnd2 =::GetDlgItem(hWndDlg,nDlgItem)

(hWnd2 == NULL)
返回

/ /获取大小的RECT
RECT矩形;
RECT取胜; :GetWindowRect(hWndDlg,共赢);
:GetWindowRect(hWnd2,RECT);
/ /设置退出信号控制我们要去的夹层! m_wndExpBar.ThreadSendDlgItemMessage(hWndDlg,IDC_ADVANCE,WM_CLOSE,NULL,NULL);
HWND的HWND = CreateWindow的(TASKLINKCLASSNAME,"一些文字,你可以提取这只是一个例子",风格,Rect.left Win.left,Rect.top Win.top,Rect.right Rect.left,Rect.bottom
Rect.top,hWndDlg,NULL,NULL,NULL);
/ /设置窗口DLG ID :SetWindowLong函数(HWND,GWL_ID,nDlgItem);} 自定义此功能,只要你喜欢,它的工作,但它不是一个方便的解决方案。

====================={ BR}拉斯[大]沃纳
lars@werner.no
http://lars.werner.no
你试过填写您的CD / DVD的终极工具?
====================={ BR}
评论会员:gunag 时间:2011/12/01
大家好,

我仍然困扰我的问题,如何隐藏在浏览器栏控制的个人任务列表控制。
不知怎的,这种控制对我来说实在是奇怪。在一个方法,我可以隐藏个别几个任务列表控件调用Windows函数:ShowWindow的(,FALSE 0)和另一种方法,我只能用相同的窗口,它代表在tasklist控制方法的ShowWindow(SW_HIDE)。第三种方法没有在这两个选项的作品。我真的很好奇,在那里你乡亲如何解决这个问题,因为我想,你必须有与此对照类似的问题。
也有一个调整大小的问题,因为无论我怎么隐藏这样一个任务列表控制,该地区为代表的一个对话框并没有变小。
我注意到该地区代表一个对话框,并变得越来越小,如果我设置为0的任务列表控制的文本长度,但后来我有问题对话框不正确调整大小,当我再次再次添加一些文本在tasklist控制在tasklist控制是不能完全显示,但只是一个非常渺茫的像素行显示的问题。其余的背后,隐藏着的控制,应低于第一控制实际上所使用的一些像素。
我任何提示打开。
干杯

gunag
评论会员:南方 时间:2011/12/01
嗨伙计,

我想我想通了,为什么控制在我的应用程序不工作的原因。我还从图书馆CJ60Lib类CCJTabCtrlBar,这两个控件似乎不喜欢对方。

干杯

gunag