返回首页

[1.0.2版]{A}简介
本文介绍如何把任务栏上的进度条控件。
{S0}
它是如何工作?
首先,我们需要建立进度控制的一个实例。进度条控件将自动连接到任务栏。在启动时,程序将搜索三个具体HWNDs的。这些都是Shell_TrayWnd,ReBarWindow32和TrayNotifyWnd。该计划的任务,快捷工具栏等。都纳入到这个窗口中使用的ReBarWindow32类。 ReBarWindow32直接放在旁边TrayNotifyWnd的窗口。我们现在需要做的的是创建使用该方法创建的进度条,但我们不把它添加到我们的主窗口,我们把它添加到任务栏。一个重要的事实是,控制需要其自己的消息映射,否则你会得到100%的CPU使用率,由于该消息的处理当我们点击任务栏上的控制。事实进度控制是直接连接到任务栏。当您已启用自动隐藏Windows任务栏选项,控制移动。我们需要延长控制,当我们:添加到托盘通知栏图标。改变/移动任务栏,从水平到垂直,反之亦然。*等。 要续订的控制,我们需要一个定时器,在这个时候(我还没有找到一种广播消息)。控制的父窗口的任务栏Shell_TrayWnd。使用的其他类CTextProgressCtrl由克里斯蒙德。它在哪里工作?
的测试:WINXPWin2000的教授Win2003服务器
使用这个程序/源代码,在您自己的风险。该方案的作者是不是这个程序上的任何损害或引起另一台计算机负责。

回答

评论会员:迪马波利亚科夫 时间:2011/12/05
通过某种原因,这个控制是透明的,在Vista任务栏
运行该示例,然后隐藏所有窗口,你会看到控制是透明的,它不是寻找善于。如何使不透明的呢?我尝试不同的风格,设置黑色背景 - 没有任何帮助,控制仍然是透明的
任何想法如何解决它?

评论会员:游客 时间:2011/12/05
迪马波利亚科夫:"我想通了,它可能是因为主题我试图禁用控制的主题-这是行不通的(控制仍然是透明的),但我可以禁用任何其他窗口在任务栏的主题...PutWindowIntoTaskbar(...){BR}{...HWND的HWND-m_hWnd;HRESULT=::SetWindowTheme(HWND,_T(""),_T(""));{BR}}但我不明白什么的是如何在任务栏上的按钮,图标是不透明的?迪马
阿努jaggi
评论会员:游客 时间:2011/12/05
您好我可以显示我的应用程序上的进度条不使用MFC但我想显示进度,根据完成任务的百分比假设我保护我的文件,当我点击启动按钮,它应该开始显示:多少%的总规模的年龄总规模是受到保护。感谢
鹦鹉螺主
评论会员:游客 时间:2011/12/05
新的文件TTaskbarContainerTemplate.zip(尽快CodeProject上上传)包含新的模板类TTaskbarContainer这是能够添加不同种类的CStatic或CButton的控制,等等..到任务栏。已知问题:-由于控制的事实,像CEdit包含在创建方法不同的方法参数,模板可能会失败,如果你试着编译它。例如CEdit有一个超过CEdit或CStatic的参数。在这种情况下,只需删除模板的创建方法的第一个参数,如果你需要。我希望我会尽快找到一个更好的解决方案。-更改在此模板messagemap的参数的CWnd继承的类名-此模板的编译可能会导致VisualStudio2005中的一些错误。我写在VC++6.0现在的事实是:在VC6.0模板的工作是不是如我想象的那样容易。VC++6.0似乎已经在本节中的错误。大家谁写的任何类型的模板等知道我*G*到快乐编码imgsrc=http://www.orcode.com/upimg/2011_12_05_18_47_57_2.gif-修改在18时10分(星期六)2007年3月,31
。Port2332
评论会员:游客 时间:2011/12/05
CNProgressBar:m_bCreated财产可能是没有正确初始化CNProgressBar以下代码示例:PutWindowIntoTaskbar()将无法正常工作IF未初始化属性:{BRBR}...{}如果(m_bCreated=TRUE){NBSP,这GT;创建(PBS_SMOOTH|WS_CHILD|WS_VISIBLE,coRect的CWnd::FromHandle(m_pcoParent-GT;GetHWnd()),NULL);m_bCreated=TRUE;BR}}{BR}...{BR}你能不能给一些提示可能的解决方案的问题感谢您的关注?
鹦鹉螺主
评论会员:游客 时间:2011/12/05
用于测试的感谢imgsrc=http://www.orcode.com/upimg/2011_12_05_18_47_57_3.gif你是对的。我宣布在NProgressbar.h却忘了在NProgressBar.cpp构造函数中初始化。添加一行行:m_bCreated=FALSE;CNProgressBar::CNProgressBar(CWnd的*pcoParent)构造NProgressbar.cpp(顶端)我不会再上传就为这一个修正。也许我应该做一个完整的代码的返工,所以,这将是完全地动态。让我们来看看,如果我有,enoth时间*G*
goldli
评论会员:游客 时间:2011/12/05
我从来没有learnd的VC,所以我想在C#版本,请。
鹦鹉螺主
评论会员:游客 时间:2011/12/05
C#的版本是没有计划在这个时候。
quin58
评论会员:游客 时间:2011/12/05
我们非常需要一个C#版本,请
JimmyO
评论会员:游客 时间:2011/12/05
您好,你可以分成2部分1)TaskBarHandler2)控制,你将添加也将被罚款,如果你可以添加多个控制。像这样类CTaskBarHandler{市民:CTaskBarHandler()虚拟〜CTaskBarHandler()无效地址(的CWnd*pWnd)无效删除(的CWnd*pWnd) GetWnd的CWnd*(){返回m_pWndShellTray;}}CTaskBarHandlerTheTaskBarHandler()无效MyApplic:的OnInitDialog(){。TheTaskBarHandler()(新CSearchEdit(CRECT(0,0,50,20),TheTaskBar()GetWnd());TheTaskBarHandler()添加(新CStateStatic(CRECT(0,0,70,20),TheTaskBar()GetWnd());麦
鹦鹉螺主
评论会员:游客 时间:2011/12/05
版本1.0.2是目前上传。这取决于如何快速将可在CodeProject团队imgsrc=http://www.orcode.com/upimg/2011_12_05_18_47_57_3.gif此更新只包含zerolan22的问题,修正错误的-修改于15时02分,2006年七月二十四日(星期一)
。抛出窗外
评论会员:游客 时间:2011/12/05
更新你也可以更新的文章图像使用的JPEG,PNG格式,而不是因为一些图像不是很清楚。
jur1sa:任何一个帮助,我需要在VB NET 2003
样本
THX
评论会员:鹦鹉螺主 时间:2011/12/05
。事实上,这是唯一一个这样的控制示例代码
我认为只有IBM发表了这样一种控制。

此代码使用WINAPI,你也可以使用VB。您
需要在您的VB项目进口的原型和翻译
这段代码的某些部分VB。
评论会员:zerolan22 时间:2011/12/05


如果你放大你任务栏的双倍高度(如果它的水平),而对照显示,
它开始失去它的任务栏的位置。你是能够
其他工具(如语言工具栏移动通过控制(有时
)begind)

不过,这个问题似乎的消失当您第一次放大的任务栏,然后开始
控制

它需要一些额外的调整大小的消息挂钩?

马库斯
评论会员:鹦鹉螺主 时间:2011/12/05
好了,这个版本不包括任何类型的挂钩。它只是使用轮询模式。每次得到改变任务栏大小,进度应调整全自动上指定的任务栏类recangles。这似乎是一个actualizing问题。
此问题已无关的消息挂钩。我是不能够找到一个消息,特别是任务栏挂钩(尚未)的方式

我带你去看一下就可以了。也许我会找到一个解决方案。

测试的感谢!


- 十二时54日(星期五)二十一,2006年7月
修改
评论会员:zerolan22 时间:2011/12/05


您好,
我知道,这不是真正的挂钩,我只是倾向于使用这个词
如果事情是不太正常的方式... ...即使是
技术上不正确

感谢您的答复反正
我真的很喜欢这是如何实现的方法和
希望它能够克服这种
现实化问题 - 到目前为止我见过
- 唯一的问题。 良好的工作!

评论会员:鹦鹉螺主 时间:2011/12/05
干得好。我更新了它今晚。这取决于如何快速将可用上CodeProject上队。
评论会员:zerolan22 时间:2011/12/05
。干得确实
,固定的问题。

好东西!

评论会员:加文元 时间:2011/12/05
我已经下载的源代码和重新编译它通过Visual Studio 2005。我的版本是Windows 2000服务器平台上运行的应用程序。进度窗口将显示在第一,但随后几分钟后任务栏上的图标的应用程序将覆盖。
我已经测试平台上的版本是Windows XP。上述问题是不存在的。
评论会员:鹦鹉螺主 时间:2011/12/05
!首先感谢测试

Windows任务栏上每个系统W98或以上,包括Windows Vista中,如我​​所描述的那样。因此,覆盖进度的主要问题可能是定时器。由于这样的事实,这个版本不使用任何一种任务栏勾了系统接收消息发生了变化,在右侧的iconbar,实现,只有这样,才能刷新进度,使用计时器。这刷新进度可能需要的最大时间。 1秒。
看来,定时器问题。尝试改变的时间间隔。我还会做一些测试,在Windows 2003服务器系统尽快尽可能
评论会员:am0n_666 时间:2011/12/05

评论会员:WREY 时间:2011/12/05
应用将冻结(加一切运行),如果你点击ProgressBar的右手部分重叠在任务栏上的标签。发生这种情况时,CPU使用率跳转到50%以上和使用不能减少。

冻结的影响在任务栏,系统托盘,快速启动区,甚至在底部的屏幕左上角的"开始"按钮的一切。
在这一点上,左单击或右键点击鼠标没有任何效果,并按下Esc键并没有帮助。
因为我是无法收回的任何其他应用程序的运行(包括任务管理)的控制,我可以杀死示例应用程序的唯一途径是通过按CTRL - ALT - DELETE(然后提出了"Windows安全"对话框),然后让我
上的任务管理单击"结束任务"。 样品绝对需要大返工。


威廉

等opere真正的特长
评论会员:!鹦鹉螺硕士 时间:2011/12/05
嗯,

这个问题应该是已经固定的控制messagemap。工作到目前为止,我所有的测试系统。这是你下载的版本。

我再次做了测试,现在,一切似乎工作的伟大。我也有到BatteryX并没有就可以了大约3个星期的测试,一切似乎工作带来极大的

也许这可能是一个主窗口和任务栏之间的消息冲突。

我会做进一步的测试,并让你知道。

测试的感谢!
- 在7时52分,2005年10月30日(星期日)
修改
评论会员:鹦鹉螺主 时间:2011/12/05
- 当调整任务栏,控制始终是中心,不伸
- 修正:如果您运行在Windows的经典皮肤,任务栏Shell_TrayWnd在横向模式左侧为-2。在垂直模式下,它有一个顶级值-2。在剥皮手法是正确放置在0。这个问题现在是固定的。
- 如果你已经开始控制之前的一个以上的实例,该方案所导致的错误,这个错误现在固定
! - ... ...

享受