CMFCColorMenuButton 类

CMFCColorMenuButton 类支持用于启动颜色选取器对话框的菜单命令或工具栏按钮。

语法

class CMFCColorMenuButton : public CMFCToolBarMenuButton

成员

公共构造函数

名称 描述
CMFCColorMenuButton::CMFCColorMenuButton 构造 CMFCColorMenuButton 对象。

公共方法

名称 描述
CMFCColorMenuButton::EnableAutomaticButton 启用和禁用常规颜色按钮上方的“自动”按钮。 (标准的系统“自动”按钮标记为“自动”。)
CMFCColorMenuButton::EnableDocumentColors 启用显示特定于文档的颜色而不是系统颜色。
CMFCColorMenuButton::EnableOtherButton 启用和禁用常规颜色按钮下方的“其他”按钮。 (标准的系统“其他”按钮标记为“更多颜色”。)
CMFCColorMenuButton::EnableTearOff 使用户能够移走颜色窗格。
CMFCColorMenuButton::GetAutomaticColor 检索当前的自动颜色。
CMFCColorMenuButton::GetColor 检索当前按钮的颜色。
CMFCColorMenuButton::GetColorByCmdID 检索与指定命令 ID 对应的颜色。
CMFCColorMenuButton::OnChangeParentWnd 在父工具栏更改时由框架调用。
CMFCColorMenuButton::OpenColorDialog 打开颜色选择对话框。
CMFCColorMenuButton::SetColor 设置当前颜色按钮的颜色。
CMFCColorMenuButton::SetColorByCmdID 设置指定颜色菜单按钮的颜色。
CMFCColorMenuButton::SetColorName 为指定的颜色设置新名称。
CMFCColorMenuButton::SetColumnsNumber 设置 CMFCColorBar 对象显示的列数。

受保护方法

名称 描述
CMFCColorMenuButton::CopyFrom 将其他工具栏按钮复制到当前按钮。
CMFCColorMenuButton::CreatePopupMenu 创建颜色选取器对话框。
CMFCColorMenuButton::IsEmptyMenuAllowed 指示是否支持空菜单。
CMFCColorMenuButton::OnDraw 由框架调用以在按钮上显示图像。
CMFCColorMenuButton::OnDrawOnCustomizeList 在工具栏自定义对话框中显示 CMFCColorMenuButton 对象之前由框架调用。

备注

若要将原始菜单命令或工具栏按钮替换为 CMFCColorMenuButton 对象,请创建 CMFCColorMenuButton 对象,设置任何相应的 CMFCColorBar 类样式,然后调用 ReplaceButton 方法。 如果自定义工具栏,请调用 CMFCToolBarsCustomizeDialog::ReplaceButton 方法。

CMFCColorMenuButton::CreatePopupMenu 事件处理程序期间,会创建颜色选取器对话框。 事件处理程序使用 WM_COMMAND 消息通知父框架。 CMFCColorMenuButton 对象会发送分配至原始菜单命令或工具栏按钮的控件 ID。

示例

以下示例演示如何使用 CMFCColorMenuButton 类中的各种方法创建和配置颜色菜单按钮。 在此示例中,首先创建一个 CPalette 对象,然后使用该对象构造 CMFCColorMenuButton 类的对象。 然后,通过启用 CMFCColorMenuButton 对象的“自动”按钮和“其他”按钮,并设置其颜色和列数来配置该对象。 此代码是 Word Pad 示例的一部分。

CPalette m_palColorPicker; // Palette for color picker
int m_nNumColours;
CMFCColorMenuButton *CFormatBar::CreateColorButton()
{
   if (m_palColorPicker.GetSafeHandle() == NULL)
   {
      m_nNumColours = sizeof(crColours) / sizeof(ColourTableEntry);
      ASSERT(m_nNumColours <= MAX_COLOURS);
      if (m_nNumColours > MAX_COLOURS)
         m_nNumColours = MAX_COLOURS;

      // Create the palette
      struct
      {
         LOGPALETTE LogPalette;
         PALETTEENTRY PalEntry[MAX_COLOURS];
      } pal;

      LOGPALETTE *pLogPalette = (LOGPALETTE*)&pal;
      pLogPalette->palVersion = 0x300;
      pLogPalette->palNumEntries = (WORD)m_nNumColours;

      for (int i = 0; i < m_nNumColours; i++)
      {
         pLogPalette->palPalEntry[i].peRed = GetRValue(crColours[i].crColour);
         pLogPalette->palPalEntry[i].peGreen = GetGValue(crColours[i].crColour);
         pLogPalette->palPalEntry[i].peBlue = GetBValue(crColours[i].crColour);
         pLogPalette->palPalEntry[i].peFlags = 0;
      }

      m_palColorPicker.CreatePalette(pLogPalette);
   }

   CMFCColorMenuButton *pColorButton = new CMFCColorMenuButton(ID_CHAR_COLOR, _T("Text Color..."), &m_palColorPicker);

   pColorButton->EnableAutomaticButton(_T("Automatic"), RGB(0, 0, 0));
   pColorButton->EnableOtherButton(_T("More Colors..."));
   pColorButton->EnableDocumentColors(_T("Document's Colors"));
   pColorButton->EnableTearOff(ID_COLOR_TEAROFF, 5, 2);
   pColorButton->SetColumnsNumber(8);
   pColorButton->SetColor(RGB(0, 0, 255));

   // Initialize color names:
   for (int i = 0; i < m_nNumColours; i++)
   {
      CMFCColorMenuButton::SetColorName(crColours[i].crColour, crColours[i].szName);
   }

   return pColorButton;
}

继承层次结构

CObject

CMFCToolBarButton

CMFCToolBarMenuButton

CMFCColorMenuButton

要求

标头:afxcolormenubutton.h

CMFCColorMenuButton::CMFCColorMenuButton

构造 CMFCColorMenuButton 对象。

CMFCColorMenuButton();

CMFCColorMenuButton(
    UINT uiCmdID,
    LPCTSTR lpszText,
    CPalette* pPalette=NULL);

参数

uiCmdID
[in] 按钮命令 ID。

lpszText
[in] 按钮文本。

pPalette
[in] 指向按钮调色板的指针。

返回值

注解

第一个版本是默认构造函数。 对象的当前颜色和自动颜色初始化为黑色 (RGB(0, 0, 0))。

第二个构造函数将按钮初始化为与指定命令 ID 对应的颜色。

CMFCColorMenuButton::CopyFrom

将一个 CMFCToolBarMenuButton 类派生的对象复制到另一个对象。

virtual void CopyFrom(const CMFCToolBarButton& src);

参数

src
[in] 要复制的源按钮。

备注

替代此方法以复制从 CMFCColorMenuButton 对象派生的对象。

CMFCColorMenuButton::CreatePopupMenu

创建颜色选取器对话框。

virtual CMFCPopupMenu* CreatePopupMenu();

返回值

表示颜色选取器对话框的对象。

备注

当用户按下颜色菜单按钮时,框架会调用此方法。

CMFCColorMenuButton::EnableAutomaticButton

启用和禁用常规颜色按钮上方的“自动”按钮。 (标准的系统“自动”按钮标记为“自动”。)

void EnableAutomaticButton(
    LPCTSTR lpszLabel,
    COLORREF colorAutomatic,
    BOOL bEnable=TRUE);

参数

lpszLabel
[in] 指定按钮变为“自动”时显示的按钮文本。

colorAutomatic
[in] 指定新的自动颜色。

bEnable
[in] 指定该按钮是否为自动按钮。

备注

“自动”按钮会应用当前默认颜色。

CMFCColorMenuButton::EnableDocumentColors

启用显示特定于文档的颜色而不是系统颜色。

void EnableDocumentColors(
    LPCTSTR lpszLabel,
    BOOL bEnable=TRUE);

参数

lpszLabel
[in] 指定按钮文本。

bEnable
[in] 若要显示特定于文档的颜色,则为 TRUE;若要显示系统颜色,则为 FALSE。

注解

当用户单击颜色菜单按钮时,使用此方法可显示当前文档颜色或系统调色板颜色。

CMFCColorMenuButton::EnableOtherButton

启用和禁用常规颜色按钮下方的“其他”按钮。 (标准的系统“其他”按钮标记为“更多颜色”。)

void EnableOtherButton(
    LPCTSTR lpszLabel,
    BOOL bAltColorDlg=TRUE,
    BOOL bEnable=TRUE);

参数

lpszLabel
[in] 指定按钮文本。

bAltColorDlg
[in] 若要显示 CMFCColorDialog 对话框,则指定 TRUE;若要显示标准系统颜色对话框,则指定 FALSE。

bEnable
[in] 若要显示“其他”按钮,则指定 TRUE;否则指定 FALSE。 默认值为 TRUE。

注解

CMFCColorMenuButton::EnableTearOff

使用户能够移走颜色窗格。

void EnableTearOff(
    UINT uiID,
    int nVertDockColumns=-1,
    int nHorzDockRows=-1);

参数

uiID
[in] 指定可拖曳窗格的 ID。

nVertDockColumns
[in] 指定在垂直停靠的颜色窗格中且状态为可拖曳的列数。

nHorzDockRows
[in] 指定水平停靠的颜色窗格中且状态为可拖曳的行数。

备注

调用此方法可为按下 CMFCColorMenuButton 按钮时弹出的颜色窗格启用“拆离”功能。

CMFCColorMenuButton::GetAutomaticColor

检索当前的自动颜色。

COLORREF GetAutomaticColor() const;

返回值

表示当前自动颜色的 RGB 颜色值。

备注

调用此方法以获取 CMFCColorMenuButton::EnableAutomaticButton 设置的自动颜色。

CMFCColorMenuButton::GetColor

检索当前按钮的颜色。

COLORREF GetColor() const;

返回值

按钮的颜色。

注解

CMFCColorMenuButton::GetColorByCmdID

检索与指定命令 ID 对应的颜色。

static COLORREF GetColorByCmdID(UINT uiCmdID);

参数

uiCmdID
[in] 命令 ID。

返回值

与指定命令 ID 对应的颜色。

注解

在应用程序中有多个颜色按钮时,请使用此方法。 当用户单击颜色按钮时,该按钮会在 WM_COMMAND 消息中将其命令 ID 发送至其父级。 GetColorByCmdID 方法使用命令 ID 检索相应的颜色。

CMFCColorMenuButton::IsEmptyMenuAllowed

指示是否支持空菜单。

virtual BOOL IsEmptyMenuAllowed() const;

返回值

如果允许空菜单,则为非零值;否则为零。

备注

默认情况下支持空菜单。 替代此方法以更改派生类中的此行为。

CMFCColorMenuButton::OnChangeParentWnd

在父工具栏更改时由框架调用。

virtual void OnChangeParentWnd(CWnd* pWndParent);

参数

pWndParent
[in] 指向新的父窗口的指针。

备注

CMFCColorMenuButton::OnDraw

由框架调用以在按钮上显示图像。

virtual void OnDraw(
    CDC* pDC,
    const CRect& rect,
    CMFCToolBarImages* pImages,
    BOOL bHorz=TRUE,
    BOOL bCustomizeMode=FALSE,
    BOOL bHighlight=FALSE,
    BOOL bDrawBorder=TRUE,
    BOOL bGrayDisabledButtons=TRUE);

参数

pDC
[in] 指向设备上下文的指针。

rect
[in] 用于限定要重新绘制的区域的矩形。

pImages
[in] 指向工具栏图像的列表。

bHorz
[in] 若要指定工具栏处于水平停靠状态,则为 TRUE;否则为 FALSE。 默认值为 TRUE。

bCustomizeMode
[in] 若要指定应用程序处于自定义模式,则为 TRUE;否则为 FALSE。 默认值为 FALSE。

bHighlight
[in] 若要指定突出显示按钮;则为 TRUE;否则为 FALSE。 默认值为 FALSE。

bDrawBorder
[in] 若要指定显示按钮的边框;则为 TRUE;否则为 FALSE。 默认值为 TRUE。

bGrayDisabledButtons
[in] 若要指定灰显禁用的按钮(使其变暗),则为 TRUE;否则为 FALSE。 默认值为 TRUE。

备注

CMFCColorMenuButton::OnDrawOnCustomizeList

在工具栏自定义对话框中显示 CMFCColorMenuButton 对象之前由框架调用。

virtual int OnDrawOnCustomizeList(
    CDC* pDC,
    const CRect& rect,
    BOOL bSelected);

参数

pDC
[in] 指向设备上下文的指针。

rect
[in] 用于限定要绘制的按钮的矩形。

bSelected
[in] TRUE 指定按钮处于选定状态;否则为 FALSE。

返回值

按钮的宽度。

备注

CMFCColorMenuButton 对象在工具栏自定义过程中显示在列表框中时,框架会调用此方法。

CMFCColorMenuButton::OpenColorDialog

打开颜色选择对话框。

virtual BOOL OpenColorDialog(
    const COLORREF colorDefault,
    COLORREF& colorRes);

参数

colorDefault
[in] 在颜色对话框中选定的默认颜色。

colorRes
[out] 返回用户在颜色对话框中选择的颜色。

返回值

如果用户选择新颜色,则为非零值;否则为零。

注解

单击菜单按钮后,调用此方法以打开颜色对话框。 如果返回值为非零值,则用户选择的颜色存储在 colorRes 参数中。 使用 CMFCColorMenuButton::EnableOtherButton 方法在标准颜色对话框和 CMFCColorDialog 类对话框之间切换。

CMFCColorMenuButton::SetColor

设置当前颜色按钮的颜色。

virtual void SetColor(
    COLORREF clr,
    BOOL bNotify=TRUE);

参数

clr
[in] RGB 颜色值。

bNotify
[in] 若要将 clr 参数颜色应用于任何关联的菜单按钮或工具栏按钮,则为 TRUE;否则为 FALSE。

备注

调用此方法可更改当前颜色按钮的颜色。 如果 bNotify 参数为非零值,则任何关联的弹出菜单或工具栏上相应按钮的颜色将更改为 clr 参数指定的颜色。

CMFCColorMenuButton::SetColorByCmdID

设置指定颜色菜单按钮的颜色。

static void SetColorByCmdID(
    UINT uiCmdID,
    COLORREF color);

参数

uiCmdID
[in] 颜色菜单按钮的资源 ID。

color
[in] RGB 颜色值。

CMFCColorMenuButton::SetColorName

为指定的颜色设置新名称。

static void SetColorName(
    COLORREF color,
    const CString& strName);

参数

color
[in] 更改了名称的颜色的 RGB 值。

strName
[in] 颜色的新名称。

备注

CMFCColorMenuButton::SetColumnsNumber

设置要在颜色选择控件中显示的列数(CMFCColorBar 对象)。

void SetColumnsNumber(int nColumns);

参数

nColumns
[in] 要显示的列数。

注解

另请参阅

层次结构图

CMFCColorBar 类
CMFCToolBar 类
CMFCToolBarsCustomizeDialog 类
CMFCColorButton 类