让一个ComboBox的显示字符串以给定的颜色显示,怎么做? changpei (钱钟书的《一个偏见》) 2005-02-04 10:33:00 在 VC/MFC / 界面 提问 rt 问题点数: 20、 回复次数: 5 1楼 changpei (钱钟书的《一个偏见》) 回复于 2005-02-05 09:30:37 得分 0 #include "CEditTrans.h" #include "ListBoxTrans.h" class CSuperComboBox : public CComboBox { // Construction public: CSuperComboBox(); // Attributes public: CEditTrans m_Edit; CListBoxTrans m_List; private: COLORREF m_TextColor; COLORREF m_BackColor; COLORREF m_EditColor; // Operations public: void SetTextColor(COLORREF col) { m_TextColor = col;} void SetBackColor(COLORREF col) { m_BackColor = col;} void SetEditColor(COLORREF col) { m_EditColor = col;} // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSuperComboBox) //}}AFX_VIRTUAL // Implementation public: virtual ~CSuperComboBox(); // Generated message map functions protected: //{{AFX_MSG(CSuperComboBox) afx_msg void OnDestroy(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; Top 2楼 changpei (钱钟书的《一个偏见》) 回复于 2005-02-05 09:30:54 得分 0 // SuperComboBox.cpp : implementation file // #include "stdafx.h" #include "cfileinfo.h" #include "SuperComboBox.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif / // CSuperComboBox CSuperComboBox::CSuperComboBox() { m_TextColor = RGB(0, 0, 0); m_BackColor = TRANS_BACK; m_EditColor = RGB(255, 255, 255); } CSuperComboBox::~CSuperComboBox() { } BEGIN_MESSAGE_MAP(CSuperComboBox, CComboBox) //{{AFX_MSG_MAP(CSuperComboBox) ON_WM_DESTROY() ON_WM_CTLCOLOR() //}}AFX_MSG_MAP END_MESSAGE_MAP() / // CSuperComboBox message handlers void CSuperComboBox::OnDestroy() { CComboBox::OnDestroy(); if ( m_Edit.GetSafeHwnd() != NULL ) { m_Edit.UnsubclassWindow(); } // TODO: Add your message handler code here } HBRUSH CSuperComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if ( nCtlColor == CTLCOLOR_EDIT ) { if ( m_Edit.GetSafeHwnd() == NULL ) { m_Edit.SubclassWindow( pWnd->GetSafeHwnd()); m_Edit.SetTextColor(m_TextColor); m_Edit.SetEditColor(m_EditColor); m_Edit.SetBackColor(m_BackColor); } } else if (nCtlColor == CTLCOLOR_LISTBOX) { //istBox control if (m_List.GetSafeHwnd() == NULL) { m_List.SubclassWindow(pWnd->GetSafeHwnd()); m_List.SetTextColor(m_TextColor); m_List.SetEditColor(m_EditColor); m_List.SetBackColor(m_BackColor); } } return CComboBox::OnCtlColor( pDC, pWnd, nCtlColor ); } Top 3楼 changpei (钱钟书的《一个偏见》) 回复于 2005-02-05 09:31:11 得分 0 /*=========================================================================== ==== ==== ==== File name : EditTrans.h ==== ==== Creation date : 7/10/2001 ==== ==== Author(s) : Dany Cantin ==== ==== ==== ===========================================================================*/ #ifndef EDITTRANS_H #define EDITTRANS_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 / // CEditTrans window #define TRANS_BACK -1 class CEditTrans : public CEdit { // Construction public: CEditTrans(); // Attributes private: COLORREF m_TextColor; COLORREF m_BackColor; COLORREF m_EditColor; CBrush m_Brush; // Operations public: void SetTextColor(COLORREF col) { m_TextColor = col; UpdateCtrl(); } void SetBackColor(COLORREF col) { m_BackColor = col; UpdateCtrl(); } void SetEditColor(COLORREF col) { m_EditColor = col; UpdateCtrl(); } private: void UpdateCtrl(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CEditTrans) //}}AFX_VIRTUAL // Implementation public: virtual ~CEditTrans(); // Generated message map functions protected: //{{AFX_MSG(CEditTrans) afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); afx_msg void OnUpdate(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnKillfocus(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // EDITTRANS_H Top 4楼 wizard13 (我也要学习....) 回复于 2005-03-24 16:28:34 得分 0 jf Top 5楼 wizard13 (我也要学习....) 回复于 2005-03-24 16:28:59 得分 20 A ZA A ZA, FIGHTING!