返回首页

{A}
简介
XTrueColorToolBar允许您使用您的真彩色(每像素24位)工具栏加入只有一行代码的应用程序。彼得李的文章是基于XTrueColorToolBar。彼得介绍非常详细的实施,所以我不想在这里重复它。我所做的是彼得的包裹在一个C类的代码,并添加一个额外的功能:支持Office风格的工具栏的颜色按钮。
在V1.1的新功能
我已经在这个版本中添加下拉按钮,示范项目,要求此功能后,收到几个邮件。您仍然可以下载版本没有下拉按钮()。 Office风格的颜色按钮
许多应用程序都需要改变文字颜色,它们通常允许用户通过工具栏按钮。例如,您可能会看到这样的: {S0}或本

这种颜色的按钮显示当前选定的颜色在信下方的酒吧{S2}。在演示程序,显示格式工具栏上的颜色按钮:
{S3}
此按钮的工作方式是,当你单击向下箭头,将显示颜色选择器:
{S4}的
当你选择一种颜色,颜色的按钮将被更新:
{五}
现在你可以选择一些文本:
{中六}
单击您刚刚采摘到选定的文本应用颜色的彩色按钮的左侧:
{七}
上演示应用程序的注意事项
为了说明如何使用XTrueColorToolBar和颜色的按钮,我用分布在VS6。在演示程序中,我只是使用的标准CColorDialog MFC类,而不是一个更好看的颜色选取器在CodeProject上。在演示应用程序的工具栏是16色的工具栏,我与MS画图转换到24位位图。
载入真彩色工具栏
在演示程序mainfrm.cpp,该代码加载工具栏位图创建的图像列表:

    // set up true-color image buttons

    m_wndFormatBar.AttachToolbarImages(IDB_FORMATBAR,

                                       8,   // no. of images in bitmap

                                       0);  // 0 = normal, 1 = disabled, 2 = hot
这是所有你需要做的,如果你只是想没有颜色的按钮的工具栏支持真彩色。
设置"颜色"按钮
在使用颜色按钮的第一步是创建工具栏位图图像。您必须使用以下的信中出现的酒吧,独特的色彩{S2}。这种独特的颜色将被替换为实际的颜色,用户选择。在演示程序中,位图格式"工具栏(formatba.bmp)的样子:
{S9}
根据信中的酒吧{S2}是红色的,这是不使用位图,其他地方。为了确保未来的独特性,酒吧,是使用RGB(255,0,1),我最喜欢的事业,所示:

在工具栏已被加载(见),下面的代码将设置初始颜色栏颜色按钮:{C}每个工具栏到CreateTemplate()的调用是必要的,只有一次。它创建了一个工具栏的图像列表的副本(实际修改工具栏的图像列表每次用户更改颜色)和设置掩码颜色。
每个工具栏到InitColorButton()的调用是必要的,只有一次。 InitColorButton()的参数是颜色按钮的命令ID,和最初的RGB颜色值。
当用户点击向下箭头的颜色按钮演示程序mainfrm.cpp,消息映射项 ON_NOTIFY(TBN_DROPDOWN,ID_VIEW_FORMATBAR,OnColorDropDown)
调用OnColorDropDown()。显示颜色选择器,并设置新的颜色,在颜色按钮: //================================================ =============================无效的CMainFrame::OnColorDropDown(NMTOOLBAR * pNMTOOLBAR,LRESULT * / * pResult * /)//================================================ ============================={ (pNMTOOLBAR放大器;放大器;(pNMTOOLBAR>的iItem == ID_SET_TEXT_COLOR)) { TRACE(_T("OnColorDropDown - 点击颜色按钮的下拉箭头\ nquot;)); & #160; / /获取(下字母A栏)颜色的彩色按钮 COLORREF RGB = m_wndFormatBar.GetColorButton(); CColorDialog DLG(RGB); / /显示颜色选择器"对话框 如果(dlg.DoModal()== IDOK) & #160;{ RGB = dlg.GetColor(); 60; / /更新下颜色的彩色按钮(栏字母A) m_wndFormatBar.SetColorButton(ID_SET_TEXT_COLOR,RGB); } }}
当用户点击颜色按钮的左侧演示程序 mainfrm.cpp,消息映射项 ON_COMMAND(ID_SET_TEXT_COLOR,OnTextColor)
调用OnTextColor(),它适用于选定的文本的颜色:
//=============================================================================

void CMainFrame::OnTextColor()

//=============================================================================

{

    TRACE(_T("OnTextColor - click on color button left side\n"));



    // get color of color button (bar under letter A)

    COLORREF rgb = m_wndFormatBar.GetColorButton();



    CWordPadView * pView = (CWordPadView *) GetActiveView();



    // set new text color in current view

    if (pView)

        pView->SetColor(rgb);

}

颜色按钮工具提示
如果你想显示颜色按钮的工具提示,看一看OnToolTipText()在演示应用程序mainfrm.cpp。请注意,工具提示代码XNamedColors.cpp和XNamedColors.h。
XTrueColorToolBar实施
类CXTrueColorToolBar是来自,并增加了这些公共职能:
功能说明无效AttachToolbarImages(UINT nBitmapId,INT nNumImages,INT nToolbar)加载工具栏上的图像,并将其附加到工具栏。 BOOL CreateTemplate(COLORREF RGB)创建工具栏的图像列表的副本。COLORREF GetBackgroundColor()检索工具栏位图的背景颜色(透明度)。COLORREF GetColorButton()检索颜色按钮的颜色。无效GetImageDimensions(INT nWidth,INT nHeight)检索位图的宽度和图像的高度。COLORREF GetMaskColor()检索下A.彩条的颜色无效InitColorButton(UINT nCommandId,COLORREF RGB)初始化工具栏下拉颜色的按钮,并设置初始颜色。无效SetBackgroundColor(COLORREF RGB)设置背景颜色(透明度)的工具栏位图。默认为RGB(192,192,192)。无效SetColorButton(UINT nCommandId,COLORREF RGB)设置颜色按钮的颜色。默认为RGB(0,0,0)。无效SetImageDimensions(INT nWidth,INT nHeight)设置位图图像的宽度和高度。默认为16x16。无效SetMaskColor(COLORREF RGB)答:根据颜色栏的颜色必须设置在工具栏上的独特。默认为RGB(0,0,1)。
如何使用
XTrueColorToolBar融入你的应用程序,请按照下列步骤:
步骤1:添加XTrueColorToolBar文件
将下列文件添加到项目中:XTrueColorToolBar.cppXTrueColorToolBar.h
注:对于上述cpp文件,您必须选择在Visual Studio中使用预编译头。

回答

评论会员:shazzababs 时间:2011/12/15
这是伟大的,正是我所需要的。然而,有一个小虫子在AttachToolbarImages这意味着,只有最后一组提供的图像工具栏。

这意味着,形象不改变,当按钮被禁用。

我已修改如下(并添加为每个nToolbar类型的图像列表):

//================================================ =================={ BR}/ /负载高色彩的工具栏,并将其附加影像工具栏
无效CXTrueColorToolBar:AttachToolbarImages
(UINT nBitmapId,INT nNumImages,INT nToolbar)/ / 0 =正常,1 =禁用,2 =热
//================================================ ===================={ BR}{
ASSERT(nNumImages GT; 0)

m_nNumImages = nNumImages;
/ /为位图
真彩色图像列表
/ /获取工具栏控制CToolbar对象
CToolBarCtrl CTRL = GetToolBarCtrl()

/ /图像列表附加到工具栏控制
开关(nToolbar)
{
默认值:
情况下,0:
{
&# 160; (m_TrueColorImagesNorm.GetSafeHandle())
m_TrueColorImagesNorm.DeleteImageList()

MakeToolbarImageList(nBitmapId,m_TrueColorImagesNorm)
ASSERT(m_TrueColorImagesNorm.GetSafeHandle ());{ BR}
ctrl.SetImageList(m_TrueColorImagesNorm); }
打破;
例1:
  ; {
 0;(m_TrueColorImagesCold.GetSafeHandle())
m_TrueColorImagesCold.DeleteImageList()

MakeToolbarImageList(nBitmapId,m_TrueColorImagesCold)
ASSERT(m_TrueColorImagesCold.GetSafeHandle()) ctrl.SetDisabledImageList(m_TrueColorImagesCold);  60; }
打破;
案例2:
{
(m_TrueColorImagesHot.GetSafeHandle())
m_TrueColorImagesHot.DeleteImageList()

MakeToolbarImageList(nBitmapId,m_TrueColorImagesHot)
ASSERT(m_TrueColorImagesHot.GetSafeHandle ());{ BR}
ctrl.SetHotImageList(m_TrueColorImagesHot); }
打破;
}
}

评论会员:汉斯迪特里希 时间:2011/12/15


最美好的祝愿,
汉斯


评论会员:里克纽约 时间:2011/12/15
此修复程序。我被刮伤相当长一段时间我的头,为什么禁用图像不会显示出来。我真的希望的代码已被更新以包括此
评论会员:。code_discuss 时间:2011/12/15
我只需要在我的代码