最近我开始在我的应用程序中使用 CMFCColorButtons 替换旧的自定义控件。现在我想限制可选择的颜色。
因此,我找到了“SetPalette”方法。我在 OnInitDialog 方法中创建了一个如下所示的 CPalette:
// CArray<COLORREF, COLORREF> arrColors is an array of COLORREFS coming
// from my helper class
if (arrColors.GetCount() > 0)
{
LOGPALETTE* pLogPalette = (LOGPALETTE*) new BYTE[sizeof(LOGPALETTE) +
(arrColors.GetCount() * sizeof(PALETTEENTRY))];
pLogPalette->palNumEntries = arrColors.GetCount();
for (int i = 0; i < arrColors.GetCount(); i++)
{
COLORREF currentColor = arrColors.GetAt(i);
pLogPalette->palPalEntry[i].peRed = GetRValue(currentColor);
pLogPalette->palPalEntry[i].peGreen = GetGValue(currentColor);
pLogPalette->palPalEntry[i].peBlue = GetBValue(currentColor);
}
m_pPalette = new CPalette();
m_pPalette->CreatePalette(pLogPalette);
delete []pLogPalette;
}
之后在代码中,创建 CMFCColorButtons 并设置调色板(此对话框中总共有六个颜色按钮),并在 OnInitDialog 中调用:
void CMyColorPopUp::InitColorButton(CMFCColorButton* pColorButton, int iColor)
{
pColorButton->SetPalette(m_pPalette);
pColorButton->SetColor(iColor);
pColorButton->SetColumnsNumber(8);
}
行为不符合预期。当我单击该按钮时,调色板是巨大的跨越整个显示器,每个条目只包含一种颜色(如 100 行和 8 列)......
也许您可以帮助解决我的 ColorButton 问题,我在网络上没有找到任何其他帮助。先感谢您!
- 克里斯