返回首页


简介
大多数应用程序都在其主窗口状态栏的一些描述,以及有时其他窗口。从CStatusBar派生,这个类提供了几个新的特点,缺少标准类。它提供的特性如下:自动调整文本
窗格可以被设置来调整新的文本,使文本总是适合完全。父窗口的命令通知
窗格可以发送WM_COMMAND消息到父,允许采取行动上单击或双击窗格调用。上窗格的工具提示
虽然标准的状态栏控件提供工具提示支持,这些都是只显示窗格中有一个图标,没有文字,如果文字太长,不适合在窗格中。我添加了工具提示支持允许任何时候用户自己的鼠标悬停在一个窗格中显示工具提示。为窗格的游标
您可以指定要显示的光标悬停在窗格中的鼠标时。光标可用于给予视觉上点击一个窗格产生一个命令提示。如何使用它
使用CStatusBarACT类是非常简单的。按照以下步骤添加到现有的项目。把你想使用它们从目录源文件(StatusBarACT.cpp和StatusBarACT.h)后,将文件添加到您的Visual Studio项目。添加#include quot; StatusBarACT.hquot;适当的头文件,在这里您将使用CStatusBarACT而定。如果你想在几个地方使用它,它使意识将它添加到您的stdafx.h文件。任何地方您使用的是CStatusBar,它可以被替换CStatusBarACT。常去的地方,有一个状态栏的定义是在AppWizard生成的应用程序为MainFrm.h。
一旦你已经添加到您的项目,你就可以开始利用的特点。有一个方法来设置状态栏的行为方式,你想让它。可以设置窗格中通常使用SetIndicators的方式(),然后调用SetPaneFlags()和/或SetPaneTooltip()和/或SetPaneCursor(每个窗格中,您想设立,或可以取代的调用SetIndicators)( )与一个SetPanes()的调用,并在一个SBACTPANEINFO结构数组传递。如果你想最窗格标准,那么它是简单的设置他们的第一种方式。如果你想最窗格使用的新功能,那么最好是使用SetPanes()。
使用SetPanes()允许你添加的窗格,他们的工具提示和标志,并设置一个函数调用。假设你有一个应用程序向导生成的应用程序,即有一个成员变量称为m_wndStatusBar。您可以取代的定义静态的UINT指标[]
类似于以下内容:静态SBACTPANEINFO asbactpi [] ={ {ID_SEPARATOR,quot;这为我们提供了我们的正常状态informationquo​​t; SBACTF_COMMAND | SBACTF_HANDCURSOR} {ID_INDICATOR_MOUSEPOS,"当前光标positionquo​​t;,SBACTF_AUTOFIT MAKEINTRESOURCE(IDC_MOUSE_CURSOR)}, {ID_INDICATOR_CAPS,"无论是Caps Lock键。 quot; "双右键单击或单左键点击到togglequot; SBACTF_COMMAND | SBACTF_HANDCURSOR | SBACTF_DOUBLECLICK | SBACTF_SINGLECLICK | SBACTF_LEFTBUTTON | SBACTF_RIGHTBUTTON}, {ID_INDICATOR_NUM,"无论Num Lock的。 双击左键点击togglequot; 0; SBACTF_COMMAND | SBACTF_HANDCURSOR} {ID_INDICATOR_SCRL,"无论是滚动锁定。 quot; "双击左键点击进行切换,或右单击menuquot; SBACTF_COMMAND | SBACTF_HANDCURSOR | SBACTF_DOUBLECLICK | SBACTF_SINGLECLICK | SBACTF_LEFTBUTTON | SBACTF_RIGHTBUTTON},};
然后替换 !m_wndStatusBar.SetPanes(指标,SIZEOF(指标)/ SIZEOF(UINT)))
!m_wndStatusBar.SetPanes(asbactpiSIZEOF(asbactpi)/ SIZEOF(SBACTPANEINFO)))
包括标志SBACTF_AUTOFIT窗格中调整设置新的文本时。标志SBACTF_HANDCURSOR使得光标当用户移动鼠标在窗格时的手形光标。为了获得状态栏上的鼠标事件发送WM_COMMAND消息,标志SBACTF_COMMAND需要包括。默认情况下,这将导致当用户双击鼠标左键窗格中的发送WM_COMMAND消息。回应任何双或单点击相结合,与左侧,中间或右边的按钮,使用适当的标记,这可以被覆盖。
状态栏发送WM_COMMAND消息到父,设置窗格的ID消息的wParam和lParam的设置为鼠标消息导致该通知。这使应用程序不同的方式来回应不同的点击,如果需要的话。见这样的一个例子演示程序的源代码。参考功能
类中的公共职能如下:CStatusBarACT();
标准空的构造BOOL SetPanes(LPSBACTPANEINFO lpsbactpi,nPaneInfoCount UINT);
调用状态栏添加窗格BOOL SetPane(LPSBACTPANEINFO lpsbactpi);
呼吁修改窗格BOOL SetPaneTooltipIndex(INT参数nIndex,LPCTSTR lpszText = NULL);BOOL SetPaneTooltipIndex(INT参数nIndex,nTipID UINT);
设置一个窗格的工具提示文本窗格指数。 LT; CODEgt; lpszText是一个文本字符串使用的提示。 nTipID是从中加载字符串资源字符串IDBOOL SetPaneTooltip(UINT的NID,LPCTSTR lpszText = NULL);
设置一个窗格的工具提示文本窗格的ID。 LT; CODEgt; lpszText是一个文本字符串使用的提示。 nTipID是加载字符串资源字符串ID。BOOL SetPaneFlagsIndex(INT参数nIndex,DWORD dwFlags中= SBACTF_NORMAL);
设置窗格指数窗格标志BOOL SetPaneFlags(UINT的NID,DWORD dwFlags中= SBACTF_NORMAL);
设置一个窗格窗格的ID标志DWORD GetPaneFlagsIndex(INT参数nIndex);
获取窗格指数窗格标志DWORD GetPaneFlags(UINT NID);
获取一个窗格窗格的ID标志BOOL SetPaneCursorIndex(INT参数nIndex,HCURSOR HCURSOR);BOOL SetPaneCursorIndex(INT参数nIndex,nCursorID UINT);BOOL SetPaneCursorIndex(INT参数nIndex,LPCTSTR lpszCursor);
设置一个窗格的光标移动到指定的游标,窗格指数。BOOL SetPaneCursor(UINT的NID,HCURSOR HCURSOR);BOOL SetPaneCursor(NID的UINT,UINT nCursorID);BOOL SetPaneCursor(UINT的NID,LPCTSTR lpszCursor);
设置一个窗格的光标移动到指定的游标,窗格的ID。HCURSOR GetPaneCursorIndex(INT参数nIndex);
检索窗格的索引指定窗格的光标句柄HCURSOR GetPaneCursor(UINT NID);
检索窗格的ID指定窗格的光标句柄无效SetHandCursor(HCURSOR HCURSOR,布尔bTryDefault = TRUE);BOOL SetHandCursor(LPCTSTR lpszCursorID,布尔bTryDefault = TRUE);BOOL SetHandCursor(UINT nCursorID,布尔bTryDefault = TRUE);
设置一个游标使用手形光标。如果bTryDefault是TRUE,那么内置的手形光标是试图加载第一。如果这是不可用,并已指定替代,那么这是用来。如果bTryDefault为FALSE,则用于指定游标的手形光标,不管是否内置的光标是。仅适用于Windows 98/Me或窗口2000/XP内置的手形光标。无效AutoFitPane(INT参数nIndex);
重新指定窗格大小完全适合其文本枚举
窗格的标志定义如下:SBACTF_NORMAL = 0x0000时,SBACTF_AUTOFIT = 0x0001,/ /自动调整大小的文本更改SBACTF_COMMAND =地图0x0002,/ /发送一个WM_COMMAND消息   ; / /父框架SBACTF_HANDCURSOR = 0x0004,/ /显示手形光标时  0; / /鼠标在窗格/ /点击发送命令(仅适用于SBACTF_COMMAND指定)SBACTF_DOUBLECLICK = 0x0100,/ /默认,如果没有指定SBACTF_SINGLECLICK = 0x0200,/ /将发送命令(仅适用于SBACTF_COMMAND指定的按钮)SBACTF_LEFTBUTTON = 0x1000中,/ /默认情况下,如果没有指定SBACTF_RIGHTBUTTON = 0x2000,SBACTF_MIDDLEBUTTON =为0x4000,SBACTF_STYLEFLAGMASK = 0x00FF,/ /掩码"风格"的标志SBACTF_CLICKFLAGMASK = 0x0F00,/ /掩码点击标志SBACTF_BUTTONFLAGMASK =从0xf000,/ /遮罩按钮标志结构
用于设置窗格中的信息结构的定义如下:typedef结构SBACTPANEINFOUINT的NID / /窗格的命令ID LPCTSTR lpszTip; / /窗格的工具提示文本 DWORD dwFlags中; / /窗格标志(见上文) LPCTSTR lpszCursor; / /自定义光标,如果指定} * LPSBACTPANEINFO;历史版本3.1 - 2004年6月24日更新支​​持Unicode构建修复的错误: 使用ON_COMMAND宏会导致断言失败 重新更新提示文本中添加的工具,导致旧重叠 崩溃GetPaneCursorIndex()如果没有窗格游标集,同时在 GetPaneFlagsIndex()如果没有窗格标志设置(汤姆梅森报道) 第3版 - 2003年5月28日现在可以指定一个自定义光标的一个窗格新增指定一个手形光标,而不是使用默认(默认为仅在Windows 98/Me和Windows 2000/XP)第2版​​ - 2003年4月15日扩展控件允许被指定为窗格中的工具提示窗格中的文本的一部分,由一个新行('\ N')字符分隔。增加的能力显示多行的工具,包括回车('\ R')和/或在提示文本换行('\ N')提示。第1版 - 2003年02月18日第一个版本

回答

评论会员:Chizzidy 时间:2011/11/29
我按照您的指示,但没有SetPaneFlags我的状态栏上有任何的影响。我使用

无效的CMainFrame::OnUpdate中... ...(CCmdUI * pCmdUI)

在状态相同的资源。这导致冲突
评论会员:?blamond 时间:2011/11/29
喜保,

我知道这是一个漫长的时间,因为您发表您CStatusBarACT类,但我发现它和我一点指导...

我只是想知道我怎么可能会改变窗格的颜色 - 我试图打dc.SetBkColor(COLORREF)AutoFitPane()函数,但没有什么变化。
任何想法什么是最好的方式做到这一点?
除此之外,一切的伟大工程。谢谢!

布鲁斯
评论会员:迈克尔皮尔斯 时间:2011/11/29
喜保,

只是一个简短的感谢您的扩展状态栏类
我需要添加到我现有的状态栏和工具提示,不得不做它的一大匆匆忙忙!
插入你的类没有整合的问题,并在几分钟之内的工作。

谢谢!

方面,迈克尔。
评论会员:罗恩Hinthorn 时间:2011/11/29
,保罗。您StatusBarACT类提供了指导和我节省了时间!

罗恩Hinthorn
评论会员:汤姆梅森 时间:2011/11/29
阴凉类。很容易使用。感谢。
评论会员:赖泽 时间:2011/11/29
如果没有游标已设置然后GetPaneCursorIndex导致崩溃,当鼠标移动窗格0

这是因为数组的大小为0和459行是{。 BR}
- ; (参数nIndex GT = NMAX | |参数nIndex <0 | | m_adwCursors.GetSize()LT;参数nIndex)
返回0; BR}

NBSP应该;
(参数nIndex GT = NMAX | |参数nIndex <0 | | m_adwCursors.GetSize()LT; =参数nIndex){BR } 返回0;



(参数nIndex GT = NMAX | |参数nIndex <0 | | m_adwFlags。 GetSize()LT;参数nIndex)



(参数nIndex GT = NMAX | |参数nIndex <0 | | m_adwFlags.GetSize()LT 〔=参数nIndex)

GetPaneFlagsIndex(219线)
评论会员:赖泽 时间:2011/11/29
SBACTF_HANDCURSOR的标志似乎并不工作,甚至与您的演示(至少上NT4.0的)。有什么缺少的资源吗?
随着关于
沃尔特赖泽
评论会员:赖泽 时间:2011/11/29
有什么缺少的资源。我实现了由使用LoadCursor IDC_HAND编号。展望:对文件:LoadCursor,这是仅适用于Windows 98/Me或Windows 2000/XP。任何时候它不能被加载(上NT4.0的实例),默认的游标将被用于。

在反思,我也许应该添加指定游标的资源,这将允许任何要使用光标在资源的能力。如果我时间,我将添加后更新。


"傻瓜的方式,似乎对他的权利,但一个聪明的人听的意见" - 箴言12:15(NIV),
评论会员:赖泽 时间:2011/11/29
我刚刚发布了一个更新,允许指定的手形光标
,也为每个窗格中指定的其他游标。 演示包括一个手形光标资源,并使用代码将尝试加载默认的第一个,但使用指定的游标,如果加载失败。

"傻瓜的方式,似乎对他的权利,但一个聪明的人听的意见" - 箴言12:15(NIV),
评论会员:约尔格霍夫曼 时间:2011/11/29
你没有犹豫多久,你呢?谢谢您,尤其是鼠标光标

沃尔特赖泽