如题

解决方案 »

  1.   

    http://www.geekclaw.com/opensrc/vccleaner.rar
    refers to the source code
      

  2.   

    在界面美化的专题中,
    MFC类对于界面美化也做了部分的努力,以下是一些可以使用的
      自己弄到代码里面试下: 应该有几个是可以的!~ 
    CWinApp::SetDialogBkColor void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) ); 指定对话框的背景色和文本颜色。CListCtrl::SetBkColor CReBarCtrl::SetBkColor CStatusBarCtrl::SetBkColor CTreeCtrl::SetBkColor COLORREF SetBkColor( COLORREF clr ); 设定背景色。CListCtrl::SetTextColor CReBarCtrl::SetTextColor CTreeCtrl::SetTextColor COLORREF SetTextColor( COLORREF clr ); 设定文本颜色。CListCtrl::SetBkImage BOOL SetBkImage( LVBKIMAGE* plvbkImage ); BOOL SetBkImage( HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0); BOOL SetBkImage( LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0 ); 设定列表控件的背景图片。CComboBoxEx::SetExtendedStyle CListCtrl::SetExtendedStyle CTabCtrl::SetExtendedStyle CToolBarCtrl::SetExtendedStyle DWORD SetExtendedStyle( DWORD dwExMask, DWORD dwExStyles ); 设置控件的扩展属性,例如:设置列表控件属性带有表格线。 
      

  3.   

    谢谢,ljh_0728(0728)
    我问的CListCtrl的表头如何变成扁平形式,其他简单控件都可以背景颜色和文字颜色,
    但是CHeaderCtrl的DrawItem如何自绘不是太清楚,主要是缺少这方面的知识.
      

  4.   

    可能我没完全明白你的意思: 不过,要实现自绘,就必须保证:
    1.你自绘的控件属性设置成了: OWNERDRAWVARIABLE 或  OWNERDRAWFIXED  反正不是NO那个选项就对了, 你在ResourceView中设置该控件的属性时/Styles, 时会看到 
    Owner draw 那个选项: 不要设成 NO 就对了。 2. 然后在你的控件类(当然是派生于 CCheckListBox) 的类里面实现以下几个函数:      virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
    virtual int VKeyToItem(UINT nKey, UINT nIndex);
    virtual int CharToItem(UINT nKey, UINT nIndex);
    当然, 具体的代码你可以 参照 CListBox: DrawITEM  的例子完全拷贝过来! 然后就能看到效果了! 3. 重点的看: DrawItem 里面的设置,就能看到 自绘效果了 (当然其他几个 virtual 函数也要实现的)  多试试! 应该可以解决的! 
      

  5.   

    再给楼主补充下: 
      如果你所在的 CCheckListBox 是在一个dlg类中的成员:那么很好 处理!
    响应这个类dlg类的  WM_CTLCOLOR 消息 就会生成:
      HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数
     你再看看MSDN的该函数的例子(看我下面的也成 ):
     很好理解也很好实现:! 
     
    HBRUSH CDlgTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here

    //if (nCtlColor == CTLCOLOR_STATIC)
    if (pWnd->GetDlgCtrlID() == IDC_LIST1) // 这里 IDC_LIST1 是你的控件的ID
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,255,0));

    //此处设置字体的颜色
    return (HBRUSH)m_brush.GetSafeHandle();
    } // TODO: Return a different brush if the default is not desired
    return hbr;
    }