Автор: BabylonKinki
Дата сообщения: 16.12.2009 22:47
Всем привет.у меня было задание написать прогу,на класс CFontDialog из mfc.и привести по 4-5 примера использования методов данного класса.вообщем,все вроде бы нормально,но никак не получается вывод на экран названия набора символов ,выбираемого пользователем.посмотрел в msdn, там отдельно такого класса нет.есть только класс getcurrentfont,который включает как раз то,что мне нужно - lfCharSet,который по сути должен устанавливать набор символов.Вообщем,проблема с реализацией данного метода.Метод GetCurrentFont позволяет сразу определить все характеристики выбранного щрифта, записав их в структуру LOGFONT:
typedef struct tagLOGFONT {
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet; - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
}LOGFONT, *PLOGFONT;
////////////////////////////////////////////////////////////////////
Реализация GetCurrentFont:
CFontDialog dlg;
dlg.m_cf.Flags |= CF_USESTYLE;
if (dlg.DoModal() == IDOK)
{
CString stylename = dlg.GetStyleName();
TRACE(_T("Style name of the selected font = %s\n"), stylename);
Текст программы:
#include "stdafx.h"
#include <conio.h>
#include <cstring>
#include <afxdlgs.h>
#include <cstdlib>
#include "lab1.h"
using namespace std;
int main()
{
int nRetCode = 0;
// инициализировать MFC, а также печать и сообщения об ошибках про сбое
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO. Измените код ошибки соответственно своим потребностям
_tprintf(_T("Критическая ошибка: сбой при инициализации MFC\n"));
nRetCode = 1;
}
else
{
char cfontName [100];
char csizeName [100];
CFontDialog lolfont;
int iResult=lolfont.DoModal();
if (iResult == IDOK)
{
//get font name
CString fontName = lolfont.GetFaceName();
int fontNamesize = sizeof (fontName);
char *pfontName = fontName.GetBuffer();
strcpy_s(cfontName, pfontName);
cout << "Name of this font is: " << "\"" << cfontName << "\""<< endl;
//get size
int sizeName = lolfont.GetSize();
cout << "size of this font is: "<< "\"" << sizeName/10 << "\"" << endl;
//get color
COLORREF colorName = lolfont.GetColor ();
cout << "color of this font is: " << "\"" << colorName << "\"" << endl;
//get bold check
int bold = lolfont.IsBold();
if(bold==0)
cout << "\"" << "bold uncheck" << "\"" << endl;
else
cout << "\"" << "bold check" << "\"" << endl;
//get italic check
int italic = lolfont.IsItalic();
if(italic==0)
cout << "\"" << "italic uncheck" << "\"" << endl << endl;
else
cout << "\"" << "italic check" << "\"" << endl << endl;
}
else
cout << "Cancel is pushed" << endl;
}
_getch();
return nRetCode;
}