返回首页

{A}
{S0}简介
CTrueColorToolBar是一个真正的真彩色工具栏。类的实现非常容易。此工具栏的特殊性是自动检测面具颜色与DIB位图工具栏的第一个像素"部分。步骤使用 创建的数字按钮和最后16假人在VC的颜色工具栏 你需要的大小。 在您最喜爱的画家,其他3真彩色工具栏位图 第一个状态按钮(普通,热,残疾人)的基础上。 在VC中导入您的新的真彩色工具栏。 创建新的样本实施CTrueColorToolBar工具栏 正常的工具栏。 LoadTrueColorToolBar呼叫功能,你真彩色工具栏位图 一个按钮的大小。 这就是它!范例

//In Mainframe.h

#define TOOLBAR_DRAW_BUTTON_WIDTH 24

#include "TrueColorToolBar.h"

class CMainFrame : public CFrameWnd

{

    CTrueColorToolBar m_ToolBarDrawLeft;

}



//In Mainframe.cpp

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

        return -1;

    m_ToolBarDrawLeft.SetBorders(1, 1, 

        1, 1); //Fix for WinXP



    if (!m_ToolBarDrawLeft.Create(this, WS_CHILD | 

        WS_VISIBLE | CBRS_LEFT  | CBRS_GRIPPER | 

        CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

        !m_ToolBarDrawLeft.LoadToolBar(IDR_TOOLBAR_DRAW))

    {

        TRACE0("Failed to create toolbar\n");

        return -1; //Failed to create

    }



    m_ToolBarDrawLeft.ModifyStyle(0, 

        TBSTYLE_FLAT);//Fix for WinXP

    m_ToolBarDrawLeft.LoadTrueColorToolBar(

        TOOLBAR_DRAW_BUTTON_WIDTH,

        IDB_TOOLBAR_DRAW,

        IDB_TOOLBAR_DRAW_HOT,

        IDB_TOOLBAR_DRAW_DISABLED);

    return 0;

}



结论
还要注意的功能LoadTrueColorToolBar,如果你省略了禁用工具栏的最后一个参数,你会得到一个默认浮雕禁用的工具栏。享受!

回答

评论会员:msh_kr 时间:2011/11/29
当我创建一些工具栏whith这个类和码头,其中的任何其他的左侧,一些工具栏下拉到下一行。我使用DockControlBarLeftOf的功能。此功能是在微软的Visual Studio DockTool样品。可以帮我
评论会员:?KarstenK 时间:2011/11/29
旧的东西,需要更新
评论会员:JabraJabra 时间:2011/11/29
?我如何添加文字这个工具栏
在使用一个线程的例子INT l_ButtonIndex = m_MainToolBar.CommandToIndex(IDB_EMPFORM) m_wndToolBar.SetButtonText(l_ButtonIndex,"ciccio");

我得到excetion ...
做有什么想法?
评论会员:manero 时间:2011/11/29
您好,
我有一个基于对话框的应用程序要使用我的工具栏....我怎么去
Satadru
评论会员:ahmad01 时间:2011/11/29
您好,
我有一个关于资源泄漏的问题CTrueColorToolbar被销毁时。
修改了一下示例项目以有CTrueColorToolbar指针,而不是一个CTrueColorToolbar数据成员,并创建和销毁的工具栏,我发现了一个GDI泄漏每一个新的工具栏的实例被创建的时间。

任何帮助将不胜感激
感谢 manero。
这里是代码:

H:
...

保护:/ /控制栏嵌入式成员
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
CTrueColorToolBar * m_ToolBarDrawLeft;
CTrueColorToolBar m_ToolBarDrawRight;
...
CPP:

...

BOOL的CMainFrame::CreateToolbarDrawLeft()
{

ASSERT(m_ToolBarDrawLeft!); m_ToolBarDrawLeft =新CTrueColorToolBar
m_ToolBarDrawLeft -> SetBorders(1,1,1,1);
(m_ToolBarDrawLeft>创建(本,WS_CHILD | WS_VISIBLE | CBRS_LEFT
CBRS_TOOLTIPS | CBRS_GRIPPER | | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)| |
!m_ToolBarDrawLeft LoadToolBar(IDR_TOOLBAR_​​DRAW))
{
TRACE0("未能创建工具栏\ n");
返回FALSE,/ /未能创建
}
m_ToolBarDrawLeft -> ModifyStyle(0,TBSTYLE_FLAT);

m_ToolBarDrawLeft - > LoadTrueColorToolBar(TOOLBAR_​​DRAW_BUTTON_WIDTH,
IDB_TOOLBAR_​​DRAW,
IDB_TOOLBAR_​​DRAW_HOT,
IDB_TOOLBAR_​​DRAW_DISABLED);

m_ToolBarDrawLeft> EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(m_ToolBarDrawLeft);  0;
返回TRUE;}

无效的CMainFrame::OnEditToggleToolbar()
{
(m_ToolBarDrawLeft)
{
删除m_ToolBarDrawLeft;
m_ToolBarDrawLeft = NULL;
}
& #160; ELSE
CreateToolbarDrawLeft()

}

...


评论会员:卢卡diciotti 时间:2011/11/29
我有一个问题将文本添加到工具栏,使用"SetButtonText"的方法,没有文字显示,任何人都有一个答案吗?

艾哈迈德Fadlallah
评论会员:埃里克忘记 时间:2011/11/29
我认为这个问题是工具栏的高度(太小)。文本是存在的,但如果你想看到它的工具栏的高度必须超过更宽的图标的高度。尝试调用SetSizes中()放大。
例如:
p_ToolBar.SetSizes(CSIZE(l_MaxButtonWidth,p_ToolbarHeight),CSIZE(p_ImageWidth,p_ImageHeight))


p_ToolbarHeight> p_ImageHeight;

希望这有助于
卢卡
评论会员:卢卡diciotti 时间:2011/11/29
你的伎俩,不要工作!

埃里克
评论会员:Zebster 时间:2011/11/29

在CMainFrame::OnCreate中(...)方法
在示例项目中和后的
m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT)

添加以下线

INT l_ButtonIndex = m_wndToolBar.CommandToIndex(ID_FILE_NEW) m_wndToolBar.SetButtonText(l_ButtonIndex,"ciccio");
m_wndToolBar.SetSizes(CSIZE(24,52),CSIZE(16,16));
52工具栏的高度
24按钮的宽度
16x16的图标的大小。

CIAO,卢卡。
& #160;
评论会员:Zebster 时间:2011/11/29
我要设置一些具有以下功能的按钮(如何IEXPLORER看起来)的文本:
m_ToolBarDrawLeft.SetButtonText(0,"开始");
多数民众赞成工作得很好,但我得到所有的按钮,在相同的宽度,即使我在创建函数
TBSTYLE_AUTOSIZE m_ToolBarDrawLeft.SetBorders(1,1,1,1);
(m_ToolBarDrawLeft.CreateEx(这TBSTYLE_LIST,TBSTYLE_AUTOSIZE |!WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)| |!m_ToolBarDrawLeft.LoadToolBar(IDR_TOOLBAR_​​DRAW))
{
TRACE0("未能创建工具栏\ n");
返回-1; / /未能创建
}
m_ToolBarDrawLeft.ModifyStyle(0,TBSTYLE_FLAT)

m_ToolBarDrawLeft.LoadTrueColorToolBar(TOOLBAR_​​DRAW_BUTTON_WIDTH,IDB_TOOLBAR_​​DRAW,IDB_TOOLBAR_​​DRAW_HOT,IDB_TOOLBAR_​​DRAW_DISABLED);
任何人都可以帮助我这个?

THX安德斯

评论会员:rb26 时间:2011/11/29
牛,我发现这个问题。我需要设置的按钮样式。

m_ToolBarDrawLeft.SetButtonStyle(0,TBSTYLE_AUTOSIZE)

/安德斯
评论会员:丹尼Cantin 时间:2011/11/29
我修改此略工作在我的ATL应用程序。当我创建的图像列表和重视,它工作得很好,除了有一个真正的选中状态(上)按钮。任何想法?这里有一个加载我的BMP和重视图像列表的代码片段:

CImageList m_cImageList;
CImageList m_cImageListHot;
CImageList m_cImageListDisabled;

HBITMAP bmNormal = At​​lLoadBitmapImage(bmpNormal,LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)
HBITMAP bmHot = At​​lLoadBitmapImage(bmpHot,LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)
HBITMAP bmDisabled = At​​lLoadBitmapImage(bmpDisabled,LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)

/ /创建正常图像列表,并添加到工具栏
如果(!m_cImageList.m_hImageList)
{
如果(m_cImageList.Create(宽度,高度,ILC_COLOR24,4,4))
{ m_cImageList.Add(bmNormal);wndColorToolBar.SetImageList(m_cImageList.m_hImageList);
}
}

感谢您的帮助..
评论会员:rb26 时间:2011/11/29
既然不能更新我的文章,因为它似乎是封闭的,我会添加下拉按钮的代码,DLL和您的问题后新文章的到来。

- > L' enfer EST密镶的女佣意图! :- S
- >地狱的道路是好心铺成的! :- S
评论会员:Gozhhu 时间:2011/11/29
大。让我知道,当你发布新的文章。
评论会员:明明路 时间:2011/11/29
我与您truecolorbar使用XP和VC6.0的..
但我从来没有发现所示的平面样式。

后面的代码:
m_wndToolBar.SetBorders(1,1,1,1);
(m_wndToolBar.Create(这WS_CHILD | WS_VISIBLE | CBRS_TOP
CBRS_TOOLTIPS | CBRS_GRIPPER | | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)| |
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏\ n");
返回-1; / /未能创建
}
m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT)

Gozhhu
评论会员:丹尼Cantin 时间:2011/11/29
好工作!正是我想要的。然而,当我添加一些工具栏按钮的下拉箭头,它只是不能显示出来。与任何帮助吗?谢谢!
 60;

来吧!解码我
评论会员:。弗兰克Pascutti 时间:2011/11/29
http://www.codeproject.com/docking/tool​​bar_droparrow.asp
的外观
做工精细!!

- > L' enfer EST密镶的女佣意图! :- S
- >地狱的道路是好心铺成的! :- S
评论会员:AnthonyWinters 时间:2011/11/29
伟大的工作!正是我所需要的!

但我有一个问题:你不应该使用"AfxGetInstanceHandle"的地方"AfxGetResourceHandle"
因为如果使用外部DLL加载的资源,你不会找到的位图。
评论会员:丹尼Cantin 时间:2011/11/29
这是没有直接关系到这篇文章,但我以为你会知道如何帮助我。我想在一个CTreeView MFC生成的程序禁用的工具栏按钮。在OnCreate函数MainFraim.cpp中,我做了以下内容:

CToolBarCtrl工具= m_wndToolBar.GetToolBarCtrl() tools.EnableButton(ID_ADD_PAGE,FALSE);
EnableButton函数什么也不做!像DeleteButton和不确定的正常工作,但EnableButton其他功能无法正常工作。我做别的事情,使这一变化生效?非常感谢


安东尼
评论会员:AnthonyWinters 时间:2011/11/29
在一般的方式,你需要捕获命令按钮OnUpdate事件,这样的布尔成员BR}
无效CXXX:OnUpdateButton1(CCmdUI * pCmdUI)
{
pCmdUI - >启用(m_bEnable);
pCmdUI -> SetCheck(m_bSetCheck);
 60; ...
}


- 铺平了良好的意图到底是
评论会员:AnthonyWinters 时间:2011/11/29
太感谢你了。!我已经不知道该怎么办,很长一段时间。我永远不会出在我自己。再次感谢。

非常感谢
评论会员:丹尼Cantin 时间:2011/11/29
太感谢你了!!我已经不知道该怎么办,很长一段时间。我永远不会出在我自己。再次感谢。你碰巧知道如何改变树的样式(即显示/ - 按钮,线条等),在一个CTreeView?帮助表示使用SetWindowLong函数,但似乎没有做任何事情。

许多非常感谢
评论会员:爱在下雪 时间:2011/11/29
先来看看这篇文章http://www.codeproject.com/treectrl/ColorTreeCtrl.asp#xx191980xx很简单!

- 到底是好心铺成
评论会员:丹尼Cantin 时间:2011/11/29
为什么我们要改变工具栏的风格,以平
评论会员:。 时间:2011/11/29