Там просто создается динамическое (из указателя CEdit*) текстовое поле с именем MyEdit.
Сразу после создания, когда на форму положим MyEdit, заполним его текстом "qwerty".
И вернем результат. Естественно, все получилось.
А если попытаться получить текущий шрифт MyEdit, то вернется NULL.
Как быть?
Надеюсь на помощь.
Ниже привожу соответствующий код.
CMainWnd::CMainWnd()
{
Create(NULL, "Step2", WS_OVERLAPPEDWINDOW, rectDefault, NULL, NULL);
MyEdit = new CEdit();
if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
CRect(240,10,340,50),this,IDC_MYEDIT);
MyEdit->SetWindowText("qwerty");
CString strText;
MyEdit->GetWindowText(strText);
// Как и положено, вернулась строка "qwerty"
AfxMessageBox(strText);
CFont *objFont;
objFont = new CFont;
// Получаем указатель на текущий шрифт MyEdit
objFont = MyEdit->GetFont();
if (objFont == NULL)
{
// Возвращаем предупреждение
AfxMessageBox("font empty");
}
else
{
// Возвращаем имя шрифта
LOGFONT objLog;
objFont->GetLogFont(&objLog);
AfxMessageBox(objLog.lfFaceName);
}
}
Здравствуйте, kimsite, Вы писали:
K>Наверное, все знают сайт "Первые шаги": "MFC шаг за шагом". K>Заглянем во второй шаг: K>http://www.firststeps.ru/mfc/steps/2.html
K>Там просто создается динамическое (из указателя CEdit*) текстовое поле с именем MyEdit. K>Сразу после создания, когда на форму положим MyEdit, заполним его текстом "qwerty". K>И вернем результат. Естественно, все получилось. K>А если попытаться получить текущий шрифт MyEdit, то вернется NULL. K>Как быть?
Как быть с чем? Что вас смущает?
K>Надеюсь на помощь.
Поможем обязательно.
У меня есть указатель на CFont. Мне нужно, чтобы он указывал на текущий шрифт текстового поля, а точнее указывал на такой экземпляр CFont, который является точной копией, который возвращает GetFont().
Спасибо.
Здравствуйте, kimsite, Вы писали:
K>У меня есть указатель на CFont. Мне нужно, чтобы он указывал на текущий шрифт текстового поля, а точнее указывал на такой экземпляр CFont, который является точной копией, который возвращает GetFont().
Понятно.
Я бы делал так:
Вы создаете фонт сами и потом устанавливаете его в EditControl. В таком случае GetFont будет возвращать не NULL, но вам его вызывать и не потребуется.
CMainWnd::CMainWnd()
{
...
CFont *objFont = new CFont;
objFont->CreateFont(...) // Создаете фонт тут, вызвав CreateFont или CreateFontIndirect()
// Ставите указатель на текущий фонт в MyEdit
MyEdit->SetFont(objFont);
// Возвращаем имя шрифта
LOGFONT objLog;
objFont->GetLogFont(&objLog);
AfxMessageBox(objLog.lfFaceName);
}
Данный отрезок кода породит memory leak (исключение блока памяти из оборота).
K> CFont *objFont; K> objFont = new CFont; // тут вы выделяете блок памяти K> objFont = MyEdit->GetFont(); // ты вы теряете указатель на выделенный блок памяти.
Не нужно выделять блок памяти в вашем случае. Правильно так:
Здравствуйте, kimsite, Вы писали:
K>А если попытаться получить текущий шрифт MyEdit, то вернется NULL.
Насколько я помню, сие означает что данное поле ввода использует стандартный системный шрифт. Если Вам нужны его метрики, можно получить соответствующий хэндл через GetStockObject(), ну и...