Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CButton установка шрифта, Как установить шрифт назв. кнопки ? 
:(
    Опции темы
SmarTi
Дата 5.9.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Всем доброго времени суток, подскажите как поменять шрифт текста на кнопке, например сразу после её нажатия. Код:
Код

m_Button1.SetFont(&font);

не работает почемуто  smile  Подскажите что делать
PM MAIL   Вверх
zkv
Дата 6.9.2006, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата

не работает почемуто

а в чем выражается нерабочесть? а font откуда берешь?
PM MAIL   Вверх
Dart
Дата 6.9.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Цитата(SmarTi @  5.9.2006,  23:26 Найти цитируемый пост)
&font

Фонт судя по всему сам создаёшь?
Тогда проверь, правильно ли он создаётся.
(Получи LOGFONT)
Или переопределена функция CWnd::SetFont в контроле. (Хотя если CButton, то всё нормально)
SetFont работает железно, не греши на нее.
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
SmarTi
Дата 6.9.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Код

void CTestDlg::OnBnClickedButton3()
{
    
    CFont font;
    font.CreateFont(
   22,                        // nHeight
   10,                         // nWidth
   10,                         // nEscapement
   10,                         // nOrientation
   FW_BOLD,                    // nWeight
   FALSE,                     // bItalic
   FALSE,                     // bUnderline
   0,                         // cStrikeOut
   ANSI_CHARSET,              // nCharSet
   OUT_DEFAULT_PRECIS,        // nOutPrecision
   CLIP_DEFAULT_PRECIS,       // nClipPrecision
   DEFAULT_QUALITY,           // nQuality
   DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
   "Arial");                  // lpszFacename
    
    test.SetFont(&font);
    test.SetWindowText("!!!");
    m_Button1.SetFont(&font);
    m_Button1.SetWindowText("!!!");
}

где test - контрол CStatic. В данном случае при нажатии на кнопку, шрифт статического текста меняется, а на кнопке - нет...
PM MAIL   Вверх
zkv
Дата 6.9.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



SmarTi, могу тебя обрадывать лишь тем, что твой код у меня работает без каких-либо изменений... единственное что могу предположить: m_Button1 - точно переменная нужной кнопки?
PM MAIL   Вверх
SmarTi
Дата 6.9.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Цитата

m_Button1 - точно переменная нужной кнопки? 

Точно... сам текст кнопки менается, а шрифт ни в какую  smile  Может какие-то свойства кнопки нужно особые задавать ? или может это вызвано тем что я пишу на Visual.NET ? И ещё я заметил что при нажатии кнопки   появляется мерцание, а если в этот момент остановить выполнение программы (сообщением AfxMessageBox()), то видно что текст смещяется вверх и вправо от своего прежнего положения. Тоесть какието изменения происходят но потом всё возвращается назад...

Это сообщение отредактировал(а) SmarTi - 6.9.2006, 16:32
PM MAIL   Вверх
Earnest
Дата 6.9.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Объект CFont нужно где-то хранить (в классе, например). А у тебя он уничтожается при выходе из обработчика.
Windows не копирует фонт, а использует тот, что дали.


--------------------
...
PM   Вверх
zkv
Дата 6.9.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Earnest @  6.9.2006,  16:32 Найти цитируемый пост)
Объект CFont нужно где-то хранить (в классе, например). А у тебя он уничтожается при выходе из обработчика.
Windows не копирует фонт, а использует тот, что дали.

а у меня этот пример работает получается, просто по счастливой случайности?
PM MAIL   Вверх
Earnest
Дата 6.9.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да


--------------------
...
PM   Вверх
SmarTi
Дата 6.9.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Цитата

Объект CFont нужно где-то хранить (в классе, например). А у тебя он уничтожается при выходе из обработчика.
Windows не копирует фонт, а использует тот, что дали. 

Сделал так как ты сказал, всё так же... шрифт статического текста изменяется, а кнопка никак ! smile 
PM MAIL   Вверх
Earnest
Дата 7.9.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ну, стало быть что-то у тебя не так. Ведь у zkv твой пример работает, как он сказал. Могу только предложить попросить у него весь тестовый проект и искать отличия у себя.
И еще, кажется что-то вроде этого уже обсуждалось на форуме несколько месяцев назад. По-моему, как раз про шрифт на кнопках, поищи.
А то что текст при нажатии смещается, это да: так реализуется визуальное "нажатие". 


--------------------
...
PM   Вверх
Damarus
Дата 7.9.2006, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



ИМХО, так надо:

SmarTiDlg.cpp
Код
........................

void CSmarTiDlg::OnSmarTiBnClicked()
{
    if (font.GetSafeHandle() != NULL)
        font.DeleteObject();

    font.CreateFont(
        22,                        // nHeight
        10,                         // nWidth
        10,                         // nEscapement
        10,                         // nOrientation
        FW_BOLD,                    // nWeight
        FALSE,                     // bItalic
        FALSE,                     // bUnderline
        0,                         // cStrikeOut
        ANSI_CHARSET,              // nCharSet
        OUT_DEFAULT_PRECIS,        // nOutPrecision
        CLIP_DEFAULT_PRECIS,       // nClipPrecision
        DEFAULT_QUALITY,           // nQuality
        DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
        TEXT("Arial"));                  // lpszFacename
    
    m_SmarTiStatic.SetFont(&font);
    m_SmarTiStatic.SetWindowText(TEXT("!!!"));
    m_SmarTiButton.SetFont(&font);
    m_SmarTiButton.SetWindowText(TEXT("!!!"));
}

........................


SmarTiDlg.h
Код
........................

class CSmarTiDlg : public CDialog
{
........................

private:
    CButton m_SmarTiButton; // Кнопка
    CStatic m_SmarTiStatic; // Статик
    CFont font;             // Шрифт  

private:
    afx_msg void OnSmarTiBnClicked();
};

........................


У меня работает.
PM MAIL ICQ Jabber   Вверх
zkv
Дата 7.9.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Earnest @  7.9.2006,  08:00 Найти цитируемый пост)
Ну, стало быть что-то у тебя не так. Ведь у zkv твой пример работает, как он сказал. Могу только предложить попросить у него весь тестовый проект и искать отличия у себя.
 в любой момент, в любом виде! Этот тестовый проект еще содержит много вопросов, которые обсуждались на этом форуме, с момента моей регистрации (храню, вдруг понадобится)
Нет вру не содержит... я забыл что систему переустанавливал, а проект лежал не там... Но про шрифт смогу новый создать если надо, там недолго

Это сообщение отредактировал(а) zkv - 7.9.2006, 20:15
PM MAIL   Вверх
SmarTi
Дата 7.9.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Цитата

Но про шрифт смогу новый создать если надо, там недолго

Спасибо, но не надо. Судя по вашим ответам, проблемы в установке шрифта нет, просто чтото в моём проекте не то... значит проблема локальная и я сам постараюсь её решить, если найду в чем причина - напишу. 
PM MAIL   Вверх
Dart
Дата 10.9.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



ГЫ, ГЫ народ  smile 
Сейчас сам попробовал такую штуку сделать. И сам же изумился smile 
Создаю фонт в OnInitDialog, так, как говорил zkv, и ни фига smile Шрифт по умолчанию.
Создаю в обработчике OnClicked, все ОК.
Вставляю CFont как объект в класс - тоже все ОК.
Не совсем понял, почему так, но судя по всему, в InitDialog после того, как CFont убивается, диалог еще раз перерисовывается.
И тут-то и происходит подмена нужного шрифта, которого уже нет, на то, что есть в виндах (Я прав?)
Т.е. прав был Earnest
Цитата(Earnest @  6.9.2006,  16:32 Найти цитируемый пост)
Объект CFont нужно где-то хранить (в классе, например). А у тебя он уничтожается при выходе из обработчика.
Windows не копирует фонт, а использует тот, что дали.


Вот так! Век живи, век учись, как говорится.
Earnest, было б у меня 100 постов, послал бы плюс smile 
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1052 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.