想做一个像记事本的东西。(开发环境为VC6)
在做的时候,因为要进行字体的设置,但是不知道这个字体在系统中是不是存在,这个时候如何去判断某个字体在系统是不是已经安装了没有啊?另外,还想问下,大家谁对text记事本中字体设置比较熟悉,我在设置字体之后,好像老是不能达到自己想要的结果。
就比如说是设置一个特殊字符,想让他的字宽为两个空格的位置,但是怎么设置也作不到,可是在记事本上就可以做到,这里需要什么特殊的参数设置吗?
以上两个问题请大家帮忙啊!分数不够可以追加!

解决方案 »

  1.   

    EnumFonts具体的查msdn
    能列举出系统内所有已经安装的字体
    ====================================
    你的第二个问题不是问题,还是你自己参数没有用对,仔细看一下msdn关于字体的说明
      

  2.   

    已经试验成功。开始的时候我的第一个参数设置为了NULL,就是出不来结果。我把我的程序贴在下面,以便谁需要的时候可以用。
    int CALLBACK EnumFontsProc(
    LOGFONT*    lplf,
    TEXTMETRIC* lptm,
    DWORD dwType,
    LPARAM lpData
    ){
    return 1;
    } LPARAM  lp;
    CHARFORMAT cf;
    CRichEditView::OnInitialUpdate();
    GetRichEditCtrl().LimitText(0);
    GetRichEditCtrl().SetReadOnly(FALSE);
    CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd(); 
    CFontJustView* pView =(CFontJustView*) pMain->GetActiveView(); 
    HDC hdc=::GetDC(pView->m_hWnd); lp = EnumFonts(NULL,"XXXXXXXXX",(FONTENUMPROC)EnumFontsProc,lp); if(lp == 0){
    //this font does not exist
    } else {
    //this font does exist
    }
    非常谢谢dch4890164 的帮助。
      

  3.   

    查找
    C:WINDOWNS /FONTS
    文件夹下面的文件实际上
    安装字体意思这样的复制字体文件到哪里
      

  4.   

    void CMainWindow::FillListBox ()
    {
        m_wndListBox.ResetContent ();    CClientDC dc (this);
        ::EnumFontFamilies ((HDC) dc, NULL, (FONTENUMPROC) EnumFontFamProc,
            (LPARAM) this);
    }int CALLBACK CMainWindow::EnumFontFamProc (ENUMLOGFONT* lpelf,
        NEWTEXTMETRIC* lpntm, int nFontType, LPARAM lParam)
    {
        CMainWindow* pWnd = (CMainWindow*) lParam;    if ((pWnd->m_wndCheckBox.GetCheck () == BST_UNCHECKED) ||
            (nFontType & TRUETYPE_FONTTYPE))
            pWnd->m_wndListBox.AddString (lpelf->elfLogFont.lfFaceName);
        return 1;
    }