返回首页

 60;
{S0}简介
文章介绍了一个标准的MFC状态栏控件的增强版本。新类应该让你轻松地添加/删除/从应用程序的状态栏的窗格,上飞。状态栏的窗格可能包含几乎所有的控制,您需要:按钮,编辑,动画,进度条,等
类是部分的基础上提出的免费版本在状态栏。如何使用它
CExtStatusControlBar类是简单易用。要添加到您的项目,请按照下列步骤:正确的文件夹放入它的源文件(CExtStatusControlBar.cpp和CExtStatusControlBar.h)和它们的文件名添加到您的Visual Studio项目。包括适当的头文件的头。如果您计划在您的应用程序的几个地方使用CExtStatusControlBar,它的合理将它添加到您的stdafx.h文件。 #quot; CExtStatusControlBar.hquot;如果您使用CStatusBar,你应该与CExtStatusControlBar取代无处不在的项目。 CExtStatusControlBar m_wndStatusBar;样品
StatusPanes示例项目显示了如何在实践中使用的类(包括如何控制放入控制栏的窗格)。方法列表BOOL AddPane(UINT的NID,INT参数nIndex)
插入到新的状态栏窗格。参数NID窗格的ID以复加。参数nIndex新创建的窗格中的索引。返回值非零,如果成功的。BOOL RemovePane(UINT的NID)
删除一个从状态栏窗格。参数NID窗格的ID将被删除。返回值非零,如果成功的。BOOL AddPaneControl(的CWnd * pWnd,UINT的NID,布尔bAutoDestroy)
插入到指定窗格的控制。参数pWnd控制指针。NID目标窗格的ID。bAutoDestroy指定窗格中删除时,控制是否应予以销毁。返回值非零,如果成功,否则为零。BOOL AddPaneControl(HWND的HWND,UINT的NID,布尔bAutoDestroy)
插入到指定窗格的控制。参数HWND要添加处理,以控制。NID目标窗格的ID。bAutoDestroy指定窗格中删除时,控制是否应予以销毁。返回值非零,如果成功的。无效DisableControl(INT参数nIndex,BOOL bDisable = TRUE)
禁止在指定窗格的控制。参数参数nIndex窗格的索引。bDisable标志,指定该控件是启用的,如果它被设置为TRUE。 GetPanesCount INT()常量
获取当前窗格在状态栏中。无效SetPaneWidth(INT参数nIndex,INT nWidth)
设置在指定窗格中的像素宽度。参数参数nIndex窗格的索引。n型式要设置的宽度。
无效SetPaneInfo(INT参数nIndex,UINT NID,UINT n型式,INT cxWidth)
指定的窗格中设置一个新的ID,样式和宽度。参数参数nIndex其风格要设置"窗格中的指数。NID窗格的新编号。n型式窗格的新风格。cxWidth窗格的新的宽度。无效SetPaneStyle(INT参数nIndex,UINT n型式)
设置状态栏的窗格中的样式。窗格的风格决定如何窗格中出现。参数参数nIndex其风格要设置"窗格中的指数。n型式其风格要设置"窗格中的样式。版权所有
,您可以完全免费使用这些来源。
您的问题,建议和bug报告,可以张贴到下面的论坛,或到网站。

回答

评论会员:thready 时间:2011/11/30
伟大的工作!谢谢分享!

我创建了一个自定义控制和来自CStatic的。控制正确显示在状态栏上,但现在整个休息状态栏的背景是黑色的(而不是正常的灰色)。你知道这一个修复?

谢谢!
麦克
评论会员:JohnWallis42 时间:2011/11/30
ExtStatusControlBar.h(131):错误:CARRAY不是一个模板
我可以编译的演示,但我只是包括你的文件和编译
我得到的错误。
评论会员:JohnWallis42 时间:2011/11/30
#包括LT; afxtempl.hgt;
评论会员:mrshcom 时间:2011/11/30
穆罕默德礼\计算机工程师\马什哈德\ shahrivar88 tankyou
评论会员:Moak 时间:2011/11/30
状态栏的控制,德米特里!

我错过的文章,它是如何工作的,我很好奇,你怎么比简单的文字在状态栏显示。 {S1}

从寻找到源代码状态栏本身保持"空",您可以将子控件。当调整状态栏子控件重新aranged可见状态栏面积在RepositionControls做,()内。在主应用程序创建这些控件必须与作为父的状态栏,请参阅CChildFormView::OnAddPane()。一个小小的建议,状态栏可以设置正确的父与CWnd的照顾:SetParent(),也许需要创建的对象的所有权(调用DestroyWindow和删除在析构函数)

作为一种替代方法可以覆盖一个简单的状态栏CStatusBar::的DrawItem

干杯
{S2}
评论会员:huutho411 时间:2011/11/30
我prolem。我想在状态栏显示的颜色,但我不知道该怎么做。
任何建议,将有很大的帮助。
感谢{S1}
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
在CExtStatusControlBar实施在这篇文章中,你不能直接改变窗格的背景颜色。您需要重绘窗格自己或插入一些控制,改变背景颜色即CStatic的。但是,如果这个控制是用来教授统计研究所图书馆的一部分,你应该知道,2.64版本中,我们增加了GetPaneBkColor()/ SetPaneBkColor(),GetPaneTextColor()/ SetPaneTextColor(),和OnQueryPaneBackColor()方法的CExtStatusControlBar,其中使您可以获取和设置在状态栏的背景和文本窗格的颜色。您可以从相应的网站www.prof uis.com
下载免费教授统计研究所图书馆的最新版本
最好的问候,
德米特里雅​​科夫列夫
评论会员:丑陋的野兽 时间:2011/11/30
我快速的问题(对不起,如果它是愚蠢的):为什么我只能添加1种控制ExtStatusControlBar???对于我来说没有任何意义,在所有。
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
不要担心。这只是一个示例应用程序的限制。您可以自由添加任何形式的几个控制。刚刚尝试。

最好的问候,
德米特里雅​​科夫列夫
评论会员:mnupadhya 时间:2011/11/30
您好,
正如我以前的帖子,我想我的状态栏设置为背景的形象。
我画的图像处理状态栏类NCPAINT,但之间的形象和正常的背景状态栏交替移动窗口,每当我周围。有人可以请建议任何其他方式,我可以实现我的状态栏中的形象backgroun ð。

在此先感谢。
的问候,
哈日
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
你处理WM_ERASEBKGND消息?

最好的问候,
德米特里雅​​科夫列夫
评论会员:约翰谭晶杰 时间:2011/11/30
您好,

我使用这个源代码,添加字幕进度只会出现我的应用程序是忙时。然而,当它处于隐藏状态,进度条会出现每当我调整窗口的大小。当我实现这个控制,迫使它隐藏每当它不需要ON_UPDATE_COMMAND_UI_RANGE,它就会消失,当我松开鼠标停止调整窗口的大小。有没有人有任何想法,不使其出现在所有吗?
我想,只要是没有必要的,完全消除控制和取代它与一个虚拟的空白对照。不过,我认为这将使应用程序的不稳定,因为当控制被替换时,会有一个短暂的瞬间被删除控制。在那个时间点,一些其他线程可以写在其他状态窗格的文本,这可能导致应用程序崩溃的是更新的最高指数窗格。
这是除非,我增加了额外的措施,以保护使用互斥发生,这将是一个痛苦的过程只是为了隐藏控制。
任何意见,将不胜感激。

感谢

约翰
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
为什么不使用RemovePane和AddPane方法
RemovePane方法不会破坏你的控制,如果你会使用bAutoDestroy参数设置为false SetPaneControl的方法。

最好的问候,
德米特里雅​​科夫列夫
评论会员:约翰谭晶杰 时间:2011/11/30
谢谢德米特里

它的工作。此外,此外,我会经常使用CommandToID始终得到正确的索引,即使是对齐的。
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
是的,这是正确的做法。

最好的问候,
德米特里雅​​科夫列夫
评论会员:mnupadhya 时间:2011/11/30
您好,

有没有人尝试设置状态栏的背景图像?我已经尝试了各种方法,但没有能够实现。
任何建议,将有很大的帮助。

在此先感谢,
Narahari
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
您的意思是设置一个状态栏窗格的图标?如果是的话,那么你可以使用的CStatusBarCtrl:SetIcon方法。

最好的问候,
德米特里雅​​科夫列夫
评论会员:mnupadhya 时间:2011/11/30
快速反应。BR}
其实我是想设置一个位图作为整个状态栏的背景图像,而不是一个图标。
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
在这种情况下,你必须手动绘制所有的状态栏的背景和窗格。在这篇文章中的类没有做到这一点。 ]库,让您整个背景或特别窗格的背景overide画,您可以使用原来的类CExtStatusControlBar。这是在OnPaintEntireBackground OnErasePaneBackground虚拟方法。

最好的问候,
德米特里雅​​科夫列夫
评论会员:mnupadhya 时间:2011/11/30
。感谢您的建议

将尝试使用这个类。

的问候,

narahari Upadhya
评论会员:Ingenious001 时间:2011/11/30
喜迪米特里,

我可以在DialogBox中使用这个类也没有在类的继承和修改?
谢谢。

我们是互相帮助,例如
评论会员:游客 时间:2011/11/30
。德米特里雅​​科夫列夫
使用对话框中的状态栏是非常容易的。
请在的外观。

我们刚刚生成一个简单的基于对话框的应用程序,添加CTestDlg::m_wndStatusBar财产和创建CTestDlg::的OnInitDialog()方法。要坚持对话窗口底部的状态栏,我们调用的CWnd::RepositionBars()方法在OnInitDialog()和OnSize()方法。您可以用CExtStatusControlBar的CStatusBar类。其结果将是相同的。当然,在对话框创建后的状态栏,你需要初始化其窗格。

最好的问候,
德米特里雅​​科夫列夫
评论会员:Ingenious001 时间:2011/11/30
好Dimitry,
你是一个快速反应帮助我与你的大家伙。我工作以后,但再次非常感谢你! {五}

我们是互相帮助的例子
评论会员:。liuty2006 时间:2011/11/30
我要弹出一个对话框,点击进度条时

怎么办呢?
评论会员:游客 时间:2011/11/30
德米特里雅​​科夫列夫
只需创建CExtStatusControlBar派生类和派生类内处理鼠标点击事件。

最好的问候,
德米特里雅​​科夫列夫