适用于对话框和属性页的原始工具栏,带有许多漂亮的样式(版本 1.00)






2.97/5 (17投票s)
适用于对话框和属性页的原始工具栏,具有许多精美样式
下载和版本回顾
版本 | 发布日期 | 源程序 |
1.00 | 2006 年 8 月 17 日 | 下载 |
工具栏的最新版本 1.01 可在此处下载。
我将把更新发布在新文章中,以节省时间并保留开发历史。
简介
我不太喜欢 Windows 的工具栏,因为它样式太少,尤其是在用于对话框和属性页时。
上周,我决定忘掉所有关于 Windows 工具栏的问题,并创建了我自己的“原始”工具栏。
经过几个小时有趣的开发,我开发了这个“原始”工具栏,它继承自 CWnd,并有一个 CImageList 作为成员变量——仅此而已——没有涉及任何 CToolBarCtrl 或 Win32 工具栏的问题。
现在我觉得我掌握了工具栏的控制权,因为我可以随意更新它。
下面是源程序的截图,显示了 14 个具有不同按钮样式的工具栏。
(工具栏有 7 种样式,另外 3 张截图显示了其中几种,位于页面底部)。
截图中左侧的文字描述了 14 个工具栏的 14 种按钮样式(不是工具栏样式),这些工具栏使用了相同的资源位图。
当前状态和用法
用法很简单:在 VC 资源中绘制一个长位图,该位图包含工具栏上的所有按钮,然后将位图的 ID 告诉工具栏——请参见下面的 Create(...) 函数——工具栏就会被创建。
目前工具栏有 2 种功能:
- 所有按钮独立工作
- 所有按钮在一个检查组中工作——只有一个按钮被选中/按下
(上面的截图是关于功能 2 的——第一个按钮被选中)
文件和类
源程序“lib”目录中有 2 个文件:ToolbarMine(.h 和 .cpp)。
该文件仅包含一个类:ToolbarMine(继承自 CWnd)。
后缀 Mine 表示这是我的——如果你修改了它,它就是你的——但不是微软的。
类的函数
必须调用以下 2 个函数:
- BOOL Create(CWnd*pMum,int iBmpID,int cx,int iBarID=-1)iBmpID:资源中的位图 ID
cx:位图中按钮图像的宽度(与 CImageList 的 cx 相同)
iBarID:工具栏 ID,如果未指定 iBarID(默认),则工具栏使用 iBmpID 作为控件 ID。
注意:对于父窗口,iBarID 必须是唯一的(类似于菜单或其他控件 ID)——它与消息有关
- BOOL DockingOnTop(int iL, int iT, int iR=0,int iButtonStyle=Button::RAISED)
iL:左边位置
IT:顶部位置
iR:右边位置,如果输入为 0,则函数会将其更改为父窗口客户区的右侧。
这三个值与 CRect 的左、上、右值相同,底部值无用,因为工具栏会根据按钮自动调整高度。如果空间(iR-iL)不足,按钮将显示在多行中。
iButtonStyle:总共有 14 种按钮样式(参见上面的截图),按钮样式不能通过其他函数更改——但该函数可以多次调用以更改按钮样式。
注意:没有用于停靠在底部、左侧和右侧的函数,因为我现在只需要将工具栏停靠在顶部——但源代码很容易修改以停靠在其他侧面。
- void SetCheckGroup(BOOL bGroup=TRUE)
将所有按钮设置为一个检查组(默认不设置)
- void SetToolbarBorderStyle(int iBorderStyle)
工具栏有 7 种边框样式,上面截图中的是 NONE(平坦)
- BOOL SetCheckedButton(int iBtn,BOOL bMessage=FALSE);
int GetCheckedButton();
如果工具栏在检查组中,可以通过编程设置选中按钮。
bMessage 表示是否在函数调用时发送消息。
第二个函数获取哪个按钮被选中。
- void SetButtonBorderColor(COLORREF clr)
如果按钮样式为 COLORED、LARGE_COLORED、STRONG_COLORED 或 LARGE_STRONG_COLORED,则可以更改按钮的边框颜色(参见上面的截图)。
- void SetToolbarBorderColor(COLORREF clr)
类似于函数 6,但用于工具栏的颜色。
- CSize GetToolbarSize();
获取工具栏的大小,类似于 VC 的 GetWindowRect() 函数。
其他函数也很有用但不是最重要的,例如 GetButtonSize(),这里不再一一列出。
消息:
- 如果工具栏在检查组中
按下(WM_LBUTTONDOWN)一个未被选中的按钮时,会立即发送消息
如果按钮之前处于选中状态,则不会发送消息。 - 否则(独立按钮)
按下按钮然后释放鼠标光标在按钮的矩形区域内时,会发送消息(WM_LBUTTONUP)。
如果鼠标离开按下状态的按钮矩形区域,则不会发送消息。
(模拟 Windows 按钮的功能)。
消息:WM_COMMAND,wParam:工具栏 ID,lParam:按钮索引。该工具栏仅使用此消息。
(消息在示例程序中显示为标题文本)
另外 3 张不同工具栏样式的截图:
上面截图中的工具栏样式是 NONE(默认),可以随时更改。
总共有 7 种工具栏样式,以下截图是另外 3 种。
注意:所有截图的按钮样式(14 种)都是相同的。
工具栏样式:STRONG_SUNKEN
工具栏样式:STONG_COLORED
工具栏样式:STRONG_RAISED
更多关于样式的说明:
- 按钮样式:
截图顶部 3 个工具栏的按钮大小与 CToolBar 相同。
LARGE、STRONG、RAISED_SUNKEN 或 SUNKEN_RAISED 会使按钮大小增加 2x2 像素。例如,LARGEE_STRONG_RAISED 会使按钮大小增加 4x4 像素。
STRONG 表示绘制两次按钮边框。 - 工具栏样式
所有工具栏样式的大小都是固定的,因为为不同样式留出了绘制空间(3 像素)。