今天用window的计算器无意间想起一个问题,ms自己的计算器应该是用manifest做成现在的XP风格吧?(我自己试着画了个,自己画出来的编辑框大小、高度怎么调都比正版差点,用manifest马上就好了),那么,计算器上面那些字体颜色按钮是不是自绘制按钮?是的话,自绘制的按钮manifest好像不会起作用,翻了下,win里面也好像就计算器一个有彩色字体的winxp风格按钮,也就是说ms为了一个计算器专门写了个“xp风格的彩色字体按钮”类?抑或是有方法使manifest对自绘制按钮起作用?不是的话,是不是有方法不用为了颜色自己重画整个按钮了?谢谢

解决方案 »

  1.   

    CTRLCOLOR可以,如果想更多的改变按钮的外观,只好自绘了。
      

  2.   

    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    CFont f;    if(pWnd == &m_edit)
        {
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(RGB(0,0,255));

            HBRUSH  newHbr = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
    LOGFONT logFont;
    logFont.lfHeight=36;
    logFont.lfWidth=0;
    logFont.lfEscapement=0;
    logFont.lfOrientation=0;
    logFont.lfWeight=FW_NORMAL;
    logFont.lfItalic=0;
    logFont.lfStrikeOut=0;
    logFont.lfCharSet=ANSI_CHARSET;
    logFont.lfOutPrecision=OUT_DEFAULT_PRECIS;
    logFont.lfClipPrecision=OUT_DEFAULT_PRECIS;
    logFont.lfQuality=PROOF_QUALITY;
    logFont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;

    strcpy(logFont.lfFaceName,"Times New Roman");
    f.CreateFontIndirect(&logFont);
    pWnd->SetFont(&f,FALSE);
            return newHbr;
    }
        
    return hbr;
    }
      

  3.   

    Errrr,有没有方法通过重载CButton的=wm_ctlcolor或者其他的消息处理函数实现?ms的计算器不会是在dlg里面一个一个的处理吧?……