www.gusucode.com > VC++编程实现获取字体的外框信息-源码程序 > VC++编程实现获取字体的外框信息-源码程序\code\UTextInputDlg.cpp

    // UTextInputDlg.cpp : implementation file
// Donwload by http://www.NewXing.com

#include "stdafx.h"
#include "UVectorFont.h"
#include "UTextInputDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CUVectorFontApp theApp;
#define U_FONT "U_FONT_SECTION"

/////////////////////////////////////////////////////////////////////////////
// CUTextInputDlg dialog


CUTextInputDlg::CUTextInputDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CUTextInputDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUTextInputDlg)
	m_sTextEdit = _T("矢量文字");
	m_iFontHeight = 144;
	m_iFontSpace = 3;
	//}}AFX_DATA_INIT
    m_sFontFaceName = _T("宋体");
}


void CUTextInputDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUTextInputDlg)
	DDX_Control(pDX, IDC_FONT_FACE_NAME, m_cFontFaceName);
	DDX_Text(pDX, IDC_TEXT_EDIT, m_sTextEdit);
	DDX_Text(pDX, IDC_FONT_HEIGHT, m_iFontHeight);
	DDX_Text(pDX, IDC_FONT_SPACE, m_iFontSpace);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUTextInputDlg, CDialog)
	//{{AFX_MSG_MAP(CUTextInputDlg)
	ON_CBN_SELCHANGE(IDC_FONT_FACE_NAME, OnSelchangeFontFaceName)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUTextInputDlg message handlers

void CUTextInputDlg::OnOK() 
{
	// TODO: Add extra validation here
    UpdateData(true);
    save();	
	CDialog::OnOK();
}

void CUTextInputDlg::save()
{
    theApp.WriteProfileString(U_FONT, "sTextEdit", m_sTextEdit);
    theApp.WriteProfileString(U_FONT, "sFontFaceName", m_sFontFaceName);
    theApp.WriteProfileInt(U_FONT, "iFontHeight", m_iFontHeight);
    theApp.WriteProfileInt(U_FONT, "iFontSpace", m_iFontSpace);

}

void CUTextInputDlg::load()
{
    m_sTextEdit = theApp.GetProfileString(U_FONT, "sTextEdit", m_sTextEdit);
    m_sFontFaceName = theApp.GetProfileString(U_FONT, "sFontFaceName", m_sFontFaceName);
    m_iFontHeight = theApp.GetProfileInt(U_FONT, "iFontHeight", m_iFontHeight);
    m_iFontSpace = theApp.GetProfileInt(U_FONT, "iFontSpace", m_iFontSpace);

    CString str;
    bool bFontFaceNameFind = false;
    for (int i = 0; i < m_cFontFaceName.GetCount(); i++)
    {
        m_cFontFaceName.GetLBText(i, str);
        if (str == m_sFontFaceName)
        {    
            m_cFontFaceName.SetCurSel(i);
            bFontFaceNameFind = true;
            break;
        }
    }
    if (!bFontFaceNameFind && (m_cFontFaceName.GetCount() > 0))
    {
        m_cFontFaceName.GetLBText(0 , m_sFontFaceName);
        m_cFontFaceName.SetCurSel(0);
    }
}

BOOL CUTextInputDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
    fillFontFaceName();
    load();
	UpdateData(false);
    CString fdsfd= m_sTextEdit;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUTextInputDlg::fillFontFaceName()
{
    m_cFontFaceName.ResetContent();
    LOGFONT logfont;
    logfont.lfCharSet = ANSI_CHARSET;
    strcpy(logfont.lfFaceName,"");
    CClientDC dc (this);
    ::EnumFontFamiliesEx((HDC) dc,&logfont,
        (FONTENUMPROC)EnumFontFamProc,(LPARAM) this,0);
    //m_cFontFaceName.SetCurSel(0);
}

int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
{
	CUTextInputDlg* pWnd = (CUTextInputDlg*) lparam;
    if (nFontType==TRUETYPE_FONTTYPE )
	    pWnd->m_cFontFaceName.AddString(lpelf->elfLogFont.lfFaceName);
	return 1;
}

void CUTextInputDlg::OnSelchangeFontFaceName() 
{
    m_cFontFaceName.GetLBText(m_cFontFaceName.GetCurSel(), m_sFontFaceName);	
}