我做了一个Activex复合控件,在控件的对话框上我已经调整好了字体(和调用者使用一样的字体),可是当显示时,调用者的字体和控件的字体不一样,请问为什么?如果需要实现设置字体,那么该如何做?(我用向导映射的stock字体属性没有get和put方法,奇怪)
请给一个例子!

解决方案 »

  1.   

    在Dialog 的 WM_INITDIALOG处理函数里,对每个需要设置字体的控件,发送WM_SETFONT 来设置你所需要的字体属性。
      

  2.   

    WaterUsage(尼伯龙根的指环) :
       必须每一个控件单独的设置字体吗?如果有很多static,也要一个一个的设置字体?对整个对话框设置字体不行吗?
      

  3.   

    你得控件包含dialog template resource?
    可以参考msdn上内存dialog template resource class得代码设置字体
    BOOL CDlgTempl::SetFontInfoW(WORD wPointSize, const WCHAR* szFaceName)
    {
        if (m_pFaceName)
        {
            delete []m_pFaceName;
            m_dlgTemplate.style &= ~DS_SETFONT;
            m_nPointSize = 0;
        }    if (!szFaceName)
        {
            TRACE (_T("Warning : No Font Specified\n"));
            return TRUE;
        }    m_nFaceNameLength = (wcslen(szFaceName) + 1) * sizeof(WCHAR);
        m_pFaceName = new BYTE[m_nFaceNameLength];
        if (!m_pFaceName)
        {
            m_nFaceNameLength = 0;
            AfxThrowMemoryException();
            return FALSE;
        }    wcscpy((WCHAR*)m_pFaceName, szFaceName);    m_dlgTemplate.style |= DS_SETFONT;
        m_nPointSize = wPointSize;
        return TRUE;
    }
    //http://support.microsoft.com/support/kb/articles/q155/2/57.asp
      

  4.   

    masterz(MS MVP):
        我发现并不是字体不好用,而是我所要设置的MS Sans Serif字体不行,而且就是MS Sans Serif的9号字体在中文环境下不行,其他的都可以,不知道是不是windows的BUG,解决方法是调用者使用 MS Sans Serif9号,控件在中文环境下使用宋体9号即可
        另外谢谢你的指教!