是否可以更改CMFCeditBrowsSectrl控件的背景色?
VS2015对话框MFC 我在对话框上实现了几个CMFCEditBrowseCtrl,并为浏览按钮自定义了行为: 是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?需要时,将编辑背景设置回默认值 多谢各位 更新 我看到控件是从CEdit派生的,因此我将尝试一下: 上面的答案是正确的,但是没有正确实施<代码>CtlColor应返回画笔手柄。它还需要使用是否可以更改CMFCeditBrowsSectrl控件的背景色?,mfc,Mfc,VS2015对话框MFC 我在对话框上实现了几个CMFCEditBrowseCtrl,并为浏览按钮自定义了行为: 是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?需要时,将编辑背景设置回默认值 多谢各位 更新 我看到控件是从CEdit派生的,因此我将尝试一下: 上面的答案是正确的,但是没有正确实施CtlColor应返回画笔手柄。它还需要使用CDC::SetBkColor class cmfc_edit : public CMFCEditBrowseCtrl { public:
CDC::SetBkColor
class cmfc_edit : public CMFCEditBrowseCtrl
{
public:
COLORREF bkcolor;
CBrush brush;
void setBrushColor(COLORREF clr)
{
bkcolor = clr;
brush.DeleteObject();
brush.CreateSolidBrush(clr);
}
HBRUSH CtlColor(CDC* pDC, UINT)
{
if (!brush.GetSafeHandle())
return GetSysColorBrush(COLOR_WINDOW);
pDC->SetBkColor(bkcolor);
return brush;
}
//optional, change color on focus change
void OnSetFocus(CWnd* w)
{
setBrushColor(RGB(255, 0, 0));
CMFCEditBrowseCtrl::OnSetFocus(w);
}
void OnKillFocus(CWnd* w)
{
setBrushColor(RGB(255, 255, 255));
CMFCEditBrowseCtrl::OnKillFocus(w);
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(cmfc_edit, CMFCEditBrowseCtrl)
ON_WM_CTLCOLOR_REFLECT()
//optional
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
END_MESSAGE_MAP()
用法:
mfc_edit.setBrushColor(RGB(255, 0, 0));
谢谢你的帮助!只有当控件具有焦点时,才可以设置背景色吗?还是我需要问一个新问题?谢谢。我明白了。如何确保在
OnKillFocus
中恢复为“默认”背景色?IE:如果他们使用百叶窗。。。背景可能不是白色。我想我应该在OnKillFocus