我有一个简单的基于 MFC 对话框的应用程序,其中包含静态文本控件以及其他基本控件,例如复选框控件和按钮以及编辑框控件(参见照片)。我希望能够在用户单击 GO 按钮时动态更改静态文本控件的颜色。我从其他 SO 帖子中借用了下面的大部分代码。
我已经实现了以下 WM_CTLCOLOR 消息处理程序,如下所示:
HBRUSH CFileRenamerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
CWnd* pWndT = pWnd->GetDlgItem(IDC_STATIC);
// TODO: Change any attributes of the DC here
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
if (pWnd->GetDlgCtrlID() == IDC_STATIC)
{
pDC->SetTextColor(RGB(255, 0, 0));
//MessageBoxW(L"TEST", L"TESTING", 0);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
}
return hbr;
}
void CFileRenamerDlg::OnBnClickedGo()
{
CWnd* pWnd = this->GetDlgItem(IDC_STATIC);
CDC* dc = pWnd->GetDC();
dc->SetTextColor(RGB(128, 128, 128));
//COLORREF ref = dc->GetTextColor();
pWnd->Invalidate(0);
pWnd->UpdateWindow();
}
上面的代码确实有效,因为静态文本控件的颜色确实更改为上面指定的颜色,但是当我尝试在
OnBnClickedGo()
处理程序中编写的代码时,它不起作用。没有任何错误或调试断言失败。如何将静态文本的颜色更改为其他颜色?
谢谢
[已解决]只是为了阐明问题所在。我在这里读到一篇关于 SO 的文章,建议资源编辑器中的默认控件 ID 应从 ID_STATIC 的默认控件 ID 更改为其他内容,例如 ID_STATIC_TEXT 现在一切正常。我希望这可以帮助其他有类似问题的人。我已经发布了切换静态文本控件颜色的工作代码。
HBRUSH CFileRenamerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
CWnd* pWndT = pWnd->GetDlgItem(IDC_STATIC);
static int nColor = 0x0;
int rgbRedC = 0x000000FF;
int rgbGreenC = 0x0000FF00;
int rgbBlueC = 0x00FF0000;
int regbBlackC = 0x00000000;
// TODO: Change any attributes of the DC here
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
if (nColor == regbBlackC)
{
pDC->SetTextColor(RGB(0, 0, 255));
nColor = rgbBlueC;
}
else if (nColor == rgbBlueC)
{
pDC->SetTextColor(RGB(255, 0, 0));
nColor = rgbRedC;
}
}
return hbr;
}
void CFileRenamerDlg::OnBnClickedGo()
{
CWnd* pWnd = this->GetDlgItem(IDC_STATIC_TEXT);
pWnd->Invalidate(0);
}