如体

解决方案 »

  1.   

    http://www.codeproject.com/staticctrl/clabel.asp
      

  2.   

    好像是用dialog的字体的,统一设置的。
    可以用edit,然后调成read only
      

  3.   

    以前是用BCB的,哪里设置非常方便灵活。谁知都VC2005了,还是那么不通用!
      

  4.   

    class CTempDlg : public CDialog
    {
    public:
    CFont m_font;....
    }BOOL CTempDlg::OnInitDialog()
    {
    ..... m_font.CreatePointFont (120,"Verdana");//在这里设置字体
    m_static1.SetFont (&m_font);.....
    }
      

  5.   

    如果照snowlight81(snow_light) 说的去做,各个Static Text的字体大小不一样,设定界面又都乱了套,还得手动编写代码,真是麻烦!有没有更好的方法?
      

  6.   

    自己扩展个STATIC类
    重载DRAWITEM
    把字体设置做成成员函数,一个类统统搞定
      

  7.   

    #if !defined(AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_)
    #define AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // RxStatic.h : header file
    ///////////////////////////////////////////////////////////////////////////////
    // CRxStatic windowclass CRxStatic : public CStatic
    {
    #define CHINESE GB2312_CHARSET
    #define ENGLISH DEFAULT_CHARSET 
    #define CLARITY -1 // Construction
    public:
    CRxStatic();// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CRxStatic)
    //}}AFX_VIRTUAL// Implementation
    public:
    void SetShadow(bool bShadow=true,COLORREF cShadowColor=RGB(244,0,0),int nInterval=2,int nAngle=30);
    void SetFontStyle(bool bItalic=false,bool bBold=false,bool bUnderline=false);
    void SetBkColor(COLORREF dwColor=CLARITY);
    void SetTextColor(COLORREF dwColor);
    void SetFontSize(int nSize);
    void SetFont(CString sFontName,DWORD lpLanguage=CHINESE);
    virtual ~CRxStatic(); // Generated message map functions
    protected:
    //{{AFX_MSG(CRxStatic)
    afx_msg void OnPaint();
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    private:
    CString m_lpFont;   //字体名称
    int m_nSize;    //字体大小
    COLORREF m_FontColor;  //前景色
      COLORREF m_BkColor;    //背景色
    bool m_bItalic;   //是否为斜体
    bool m_bBold;    //是否为粗体
    bool m_bUnderline;    //是否有下划线
    DWORD m_dwCharacter;
    bool m_bIsShadow;
    COLORREF m_ShadowColor;
    int m_nInterval;
    int m_nAngle;};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_)
      

  8.   

    // RxStatic.cpp : implementation file
    //#include "stdafx.h"
    #include "cgzx.h"
    #include "RxStatic.h"
    #include "math.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CRxStaticCRxStatic::CRxStatic()
    {
     m_lpFont="宋体";
     m_nSize=9;
     m_FontColor=RGB(0,0,0);
     m_BkColor=CLARITY;
     m_bItalic=false;
     m_bBold=false;
     m_bUnderline=false;
     m_dwCharacter=CHINESE;
     m_bIsShadow=false;
     m_ShadowColor=RGB(32,32,32);
     m_nInterval=3;
     m_nAngle=45;}CRxStatic::~CRxStatic()
    {
    }
    BEGIN_MESSAGE_MAP(CRxStatic, CStatic)
    //{{AFX_MSG_MAP(CRxStatic)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CRxStatic message handlersvoid CRxStatic::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    CFont font;
    int nBold;
    if(m_bBold==true)
    nBold=FW_BOLD;
    else
    nBold=FW_NORMAL;
    LOGFONT lgFont;
    lgFont.lfCharSet=m_dwCharacter;
    lgFont.lfClipPrecision=0;
    lgFont.lfEscapement=0;
    strcpy(lgFont.lfFaceName,m_lpFont);
    lgFont.lfHeight=m_nSize+3;
    lgFont.lfItalic=m_bItalic;
    lgFont.lfOrientation=0;
    lgFont.lfOutPrecision=0;
    lgFont.lfPitchAndFamily=2;
    lgFont.lfQuality=0;
    lgFont.lfStrikeOut=0;
    lgFont.lfUnderline=m_bUnderline;
    lgFont.lfWeight=nBold;
    lgFont.lfWidth=0;
    font.CreateFontIndirect(&lgFont);
    CFont* pFont;
    pFont=dc.SelectObject(&font);
    CString sCaption;
    CRect rcWnd;
    this->GetClientRect(&rcWnd);
    this->GetWindowText(sCaption);
    DWORD dwStyle,dwDCStyle;
    dwStyle=this->GetStyle();
    if(dwStyle&SS_CENTER==SS_CENTER )//居中显示
    dwDCStyle=DT_CENTER;
    if(dwStyle&SS_SIMPLE ==SS_SIMPLE)   //单行
    dwDCStyle=dwDCStyle|DT_SINGLELINE|DT_VCENTER;
    if(m_bIsShadow==true)  //阴影
    {
    //根据角度计算出阴影位置
    float fx=cos(m_nAngle)*m_nInterval;
    float fy=sin(m_nAngle)*m_nInterval;
    CRect rcShadow;
    rcShadow=rcWnd;
    rcShadow.left=(float)rcShadow.left+fx;
    rcShadow.right=(float)rcShadow.right+fx;
    rcShadow.top=(float)rcShadow.top+fy;
    rcShadow.bottom=(float)rcShadow.bottom +fy;
    dc.SetBkMode(TRANSPARENT);
    dc.SetTextColor(m_ShadowColor);
    dc.DrawText(sCaption,rcShadow,dwDCStyle);
    }
    dc.SetBkMode(OPAQUE);
    if(m_BkColor==CLARITY)
    dc.SetBkMode(TRANSPARENT);
    else
    dc.SetBkColor(m_BkColor);
    dc.SetTextColor(m_FontColor);
    dc.DrawText(sCaption,rcWnd,dwDCStyle);
    font.DeleteObject();
    dc.SelectObject(pFont);
    // Do not call CStatic::OnPaint() for painting messages
    }void CRxStatic::SetFont(CString sFontName,DWORD lpLanguage)
    {
    m_lpFont=sFontName;
    m_dwCharacter=lpLanguage;
    }void CRxStatic::SetFontSize(int nSize)
    {
    m_nSize=nSize;
    }void CRxStatic::SetTextColor(COLORREF dwColor)
    {
    m_FontColor=dwColor;
    }void CRxStatic::SetBkColor(COLORREF dwColor)
    {
    m_BkColor=dwColor;
    }void CRxStatic::SetFontStyle(bool bItalic,bool bBold,bool bUnderline)
    {
    m_bItalic=bItalic;
    m_bBold=bBold;
    m_bUnderline=bUnderline;
    }void CRxStatic::SetShadow(bool bShadow,COLORREF cShadowColor,int nInterval,int nAngle)
    {
    m_bIsShadow=bShadow;
    m_ShadowColor=cShadowColor;
    m_nInterval=nInterval;
    m_nAngle=nAngle;
    }