locked
Static字体透明问题 RRS feed

  • 问题

  • CColorStatic::CColorStatic()
    {
    m_TextColor=RGB(0,0,0);
    m_nFontsize = 16 ;

    }

    CColorStatic::~CColorStatic()
    {
    }


    BEGIN_MESSAGE_MAP(CColorStatic, CStatic)
    //{{AFX_MSG_MAP(CColorStatic)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CColorStatic message handlers


    void CColorStatic::OnPaint()
    {
    CPaintDC dc(this); // device context for painting

    CRect rect;
    GetClientRect(&rect);

    CFont *pFont= new CFont; //获取主窗口的字体
    // dc.SetBkColor(RGB(0,170,250)); //设置背景为透明的
    dc.SetBkMode(TRANSPARENT);

    pFont->CreateFont(m_nFontsize, // nHeight
    0, // nWidth
    0, // nEscapement
    0, // nOrientation
    500,//FW_MEDIUM,//FW_DONTCARE, // nWeight
    FALSE, // bItalic
    FALSE, // bUnderline
    0, // cStrikeOut

    ANSI_CHARSET, // nCharSet

    OUT_DEFAULT_PRECIS, // nOutPrecision

    CLIP_DEFAULT_PRECIS, // nClipPrecision

    DEFAULT_QUALITY, // nQuality

    DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily

    _T("Arial")); // lpszFac

    CFont *pOldFont;
    pOldFont=dc.SelectObject(pFont);

    dc.SetTextColor(m_TextColor);
    CString strCaption;
    this->GetWindowText(strCaption); //获取窗口文本

    dc.DrawText(strCaption,&rect,DT_CENTER);

    dc.SelectObject(pOldFont);
    pFont->DeleteObject() ;
    delete pFont ;

    }
    这是重载的一个CStatic类,可是在调用的时候,它的透明是直接透明到桌面上的,不知道是怎么回事?
    2009年6月19日 6:16

答案

  • 如果你是想去掉static后面的那个白框的话,可以在OnCtlColorStatic中实现:
    HBRUSH hBrushCtr;//需要初始化这个画刷和背景一致
    ::SetBkMode( hDCStatic, TRANSPARENT );
    switch( nID )
    {
    return hBrushCtr ;
    }
    • 已标记为答案 re5 2009年6月19日 9:13
    2009年6月19日 9:00