①苆苆卟咁吢 发表于 2011-8-16 22:59:32

Visual C++/MFC精讲多练#003:在编辑框中显示不同颜色的文本

CEdit虽只是一个编辑框,可实际应用中,它用的是最频繁的,所以不厌其烦地研究它是很有必要的
常用的编辑框中的文本一般是黑字白底,但本文中要一改常态,改变一下传统风格,这和前面的两个实例相似。。。没办法,谁让它们都是编辑框呢。。。囧

在设置文本颜色时需要使用CreateStockObject函数,该函数获取预定义的Windows GDI画笔、画刷和字体句柄,并将GDI对象与CGdiObject类对象相关联。语法如下:
BOOL CreateStockObject(int nIndex);


新建一个基于对话框的MFC应用程序,并创建一个以CEdit类为基类的派生类CColorEdit。
在CColorEdit类的头文件中声明一个COLORREF类型变量 m_Color。
向对话框中添加若干编辑框控件,通过类向导为控件关联CColorEdit类成员变量,手动添加一个SetColor函数,用来设置文本颜色的变量赋值
void CColorEdit::SetColor(COLORREF color)
{
      m_Color = color;
}

处理CColorEdit类的WM_CTLCOLOR消息,在该消息的处理函数中设置文本颜色,代码如下:
HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
      // TODO: Change any attributes of the DC here
      CBrush m_Brush;
      m_Brush.CreateStockObject(WHITE_BRUSH);
      pDC->SetTextColor(m_Color);
      // TODO: Return a non-NULL brush if the parent's handler should not be called
      return m_Brush;
}

在对话框OnInitDialog函数中为编辑框控件设置文本颜色,如下:
BOOL CTextColorDlg::OnInitDialog()
{
      CDialog::OnInitDialog();

      // ... 略

      // Set the icon for this dialog.The framework does this automatically
      //when the application's main window is not a dialog
      SetIcon(m_hIcon, TRUE);                        // Set big icon
      SetIcon(m_hIcon, FALSE);                // Set small icon
      
      // TODO: Add extra initialization here
      m_Edit1.SetColor(RGB(255,0,0));
      SetDlgItemText(IDC_EDIT1, _T("www.TopSage.com"));
      m_Edit2.SetColor(RGB(0,0,255));
      SetDlgItemText(IDC_EDIT2, _T("www.TopSage.com"));
      m_Edit3.SetColor(RGB(255,0,255));
      SetDlgItemText(IDC_EDIT3, _T("www.TopSage.com"));
      m_Edit4.SetColor(RGB(0,255,0));
      SetDlgItemText(IDC_EDIT4, _T("www.TopSage.com"));
      return TRUE;// return TRUEunless you set the focus to a control
}
页: [1]
查看完整版本: Visual C++/MFC精讲多练#003:在编辑框中显示不同颜色的文本