文本框设置字体颜色

文本框设置字体颜色的例子。

参考资料

MFC静态文本框设置字体和颜色

要点

  • 编辑框增加ENCHANGE消息处理;
  • 对话框增加CTLCOLOR消息处理;
  • 编辑框事实判断输入的合法性,然后知会CtlColor消息去更新字体颜色;
  • CtlColor消息针对目标框架做处理。

示例功能

本文的例子是以文本框为例。对于第一个编辑框,当输入的数字在60和100之间的时候,称为合法的;否则,称为非法。对于非法的输入,用红色字体提醒用户;对于合法的输入,以缺省的黑色显示。效果如下:

这里写图片描述
这里写图片描述

资源定义

IDD_EDITFONTCOLOR_DIALOG DIALOGEX 0, 0, 239, 100
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "EditFontColor"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    EDITTEXT        IDC_EDIT_FIRST,55,19,171,22,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_SECOND,56,52,171,22,ES_AUTOHSCROLL
    LTEXT           "First:",IDC_STATIC,22,22,32,15,SS_CENTERIMAGE
    LTEXT           "Second:",IDC_STATIC,22,52,32,15,SS_CENTERIMAGE
END

头文件

仅给出相关代码,其他自动生成的代码没有列出来。

class CEditFontColorDlg : public CDialogEx
{
    ...
public:
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    afx_msg void OnEnChangeEditFirst();

private:
    BOOL m_bFirstValid;
    int m_iFirst;
};

实现文件

CEditFontColorDlg::CEditFontColorDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CEditFontColorDlg::IDD, pParent)
    , m_bFirstValid(FALSE)
    , m_iFirst(0)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CEditFontColorDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_FIRST, m_iFirst);
}

BEGIN_MESSAGE_MAP(CEditFontColorDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_CTLCOLOR()
    ON_EN_CHANGE(IDC_EDIT_FIRST, &CEditFontColorDlg::OnEnChangeEditFirst)
END_MESSAGE_MAP()

HBRUSH CEditFontColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    const COLORREF ERROR_RED = RGB(255, 0, 0);
    const COLORREF DEFAULT_BLACK = RGB(0, 0, 0);
    if (pWnd->GetDlgCtrlID() == IDC_EDIT_FIRST) {
        if (m_bFirstValid) {
            pDC->SetTextColor(DEFAULT_BLACK);
        } else {
            pDC->SetTextColor(ERROR_RED);
        }
    }

    return hbr;
}


void CEditFontColorDlg::OnEnChangeEditFirst()
{
    UpdateData(TRUE);

    m_bFirstValid = m_iFirst >= 60 && m_iFirst <= 100;
    Invalidate();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值