如何在属性透明时更改静态控件的字体大小和字体

时间:2014-02-03 18:59:29

标签: c++ mfc font-size transparent

我创建了两个CStatic控件。一个属性设置为透明模式;另一个是正常的。 更改字体大小后,一个是好的,它会被更改,但设置的透明模式1的大小不会改变。

有人知道为什么吗?

//////////////////////////////////////////////////
/* Resource File */
LTEXT           "This Is Normal Text.",IDC_FONT2,7,119,303,21,WS_BORDER
LTEXT           "This Include Transparent.",IDC_FONT,7,7,306,21,WS_BORDER | NOT WS_GROUP | WS_TABSTOP,WS_EX_TRANSPARENT


/* FontTest.CPP */
class CFontSizeDlg : public CDialogEx
{
public:
    CStatic m_myFont;
    CStatic m_myFont2;
}

/* FontTest.CPP */
void CFontSizeDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_FONT, m_myFont);
    DDX_Control(pDX, IDC_FONT2, m_myFont2);
}

void CFontSizeDlg::OnBnClickedButton2()
{
    CFont hNewFont;
    LOGFONT lf;                        // Used to create the CFont.

    CFont *currentFont = GetFont();
    currentFont->GetLogFont(&lf);
    lf.lfHeight = 25;
    lf.lfWidth = 10;

    hNewFont.DeleteObject();
    hNewFont.CreateFontIndirect(&lf);    // Create the font.

     // Use the font to paint a control.
    m_myFont2.SetFont(&hNewFont);
    m_myFont.SetFont(&hNewFont);

    // hNewFont.Detach(); // will create GDI leak
    hNewFont.DeleteObject();
}

1 个答案:

答案 0 :(得分:2)

您需要确保'new'字体的范围与静态控件的范围相同。在您的示例中,完成按钮事件处理程序时会破坏字体。尝试将hNewFont设为成员变量并设置一次。