Суть статьи сводилась к следующему:
Обычно в SetFont передают указатель на шрифт – объект CFont. Так вот, обязательно нужно проследить , чтобы этот объект не уничтожился раньше, чем тот контрол, для которого он создается!
Итак, как было у меня раньше (или "способ №2"):
BOOL CAboutDlg::OnInitDialog() {
CDialog::OnInitDialog();
CFont times;
times.CreatePointFont(100, " Times New Roman");
m_Static.SetFont(×);
times.DeleteObject();
return TRUE;
}
m_Static — переменная, представляющая соответствующий Static-контрол. Вместо нее можно воспользоваться указателем, возвращаемым ф-цией GetDlgItem(). Как вы видите, объект CFont уничтожается сразу же после вызова SetFont().
А вот как надо было сделать:
class CAboutDlg : public CDialog {
…
private:
CStatic m_Static;
CFont m_fntTahoma; // добавляем шрифт в диалог
}
BOOL CAboutDlg::OnInitDialog() {
CDialog::OnInitDialog();
m_fntTahoma.CreatePointFont(100, " Tahoma");
m_Static.SetFont(&m_fntTahoma);
return TRUE;
}
BOOL CAboutDlg::DestroyWindow() {
m_fntTahoma.DeleteObject();
return CDialog::DestroyWindow();
}
Здесь все работает как надо. Вскоре, когда надоела Tahoma, я уже наслаждался отлично выглядевшей готической надписью. (Кстати, тут возникает еще вопрос – получается, чтобы нужный шрифт был всегда доступен, нужно распространять его вместе с приложением? Конечно, это не относится к стандартным Windows-шрифтам, типа Arial, Times, Tahoma или Courier. Лучше все-таки обходиться ими, когда возможно).
Тех, кто хочет получить больший контроль над шрифтом – сделать его жирным, курсивом и т.д., отправляю прямиком к той же статье, да еще к функции CFont::CreateFontIndirect().
Я прошу прощения, что, возможно, слишком подробно расписал ответ на этот вопрос (хотя не исключаю, что кому-то это было интересно прочитать). Я преследовал еще одну цель – сказать всем: "Люди, учитесь пользоваться MSDN! На многие ваши вопросы там уже отвечено!"
Ответ на этот вопрос прислали: Николай Чепкий , Igor Sorokin, Alexander Dymerets, Pavel Vasev.
В ПОИСКАХ ИСТИНЫ
Q.Как получить доступ к ресурсам DLL в самой DLL? Задача сводилась к следующему – нужно было сделать диалоговое окно в функции, которая находилась в DLL.
declspec(dllexport)
int MyDllFunction() {
CDialog dlg ;
int ret = dlg.DoModal();
return ret ;
}
DLL имела ресурс Dialog для этого диалогового окна, но работать напрочь отказывалась – этот ресурс не обнаруживался и окно не создавалось. DLL собиралась как со статически линкуемой библиотекой MFC, так и с динамически линкуемой библиотекой MFC.
Igor Sorokin
За сим откланиваюсь.
Будьте здоровы!
©Алекс Jenter mailto:jenter@mail.ru Красноярск, 2000.
Программирование на Visual C++
Выпуск №10 от 18/07/2000
Здравствуйте!
Прошу прощения за небольшую задержку этого выпуска.
Между прочим, со дня создания рассылки уже прошел целый месяц. За это время на нее подписалось более 5000 человек, причем чуть меньше 4000 из них – на HTML версию.
WEBзор
Недавно мне пришло письмо от одного человека с предложением рассказать в рассылке об их сайте, часть которого посвящена как раз программированию на Visual C++. Тогда у меня появилась идея сделать эту рубрику, где я мог бы рассказывать об интересных ресурсах по теме рассылки, которые можно обнаружить на просторах интернета. Я уже, правда, рассказывал про CodeGuru – но это не было вынесено в отдельную рубрику… да и те, кто не очень дружит с английским, могли задаться вопросом, а нет ли в Сети чего-нибудь интересного по VC на русском языке?
Итак, сегодня, по специальному предложению одного из авторов, мы с вами рассмотрим сайт " ПЕРВЫЕ ШАГИ " ( http://www.mjk.msk.ru/~dron/)
Прежде всего, стоит отметить широкий диапазон тем, охватываемых этим сайтом – это MFC, WinAPI, OpenGL, ActiveX, а также VBA, SQL, HTML, CGI, Perl, форматы файлов, алгоритмы и многое другое.
Содержание оформлено в виде "шагов" – отсюда, в частности, и название – маленьких порций информации, которые легко читать и усваивать. Обычно каждый шаг ставит и выполняет определенную задачу, так что легко можно найти решение какой-то конкретной проблемы.
Все описанное мной далее относится к разделу "Visual C++".
Есть материал как для начинающих, так и для более продвинутых программистов. Раздел, посвященный MFC, содержит более 200 "шагов". Темы шагов в большинстве своем подобраны интересные и нужные, а для новичков, не имеющих возможности свободно читать MSDN, вообще незаменимые.
Из недостатков хочу отметить некоторую сухость и краткость изложения (хотя последняя, конечно, сестра таланта), иногда все выливается в "нажми туда-то, напиши то-то". Также мне не совсем по вкусу местами чересчур неофициальный и немного непоследовательный стиль автора, но это кому как, наверное.
Читать дальше