Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о RichEdit, Кто мне доступно объяснит 
V
    Опции темы
Edik
Дата 24.11.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кто мне может объяснить, что значат следующие строчки кода, так как они у меня работают, но я толком не представляю как. Только если можна подробно рассказывайте.
Код

case WM_COMMAND:

if (LOWORD (wParam) == IDC_BUTTON2) 
{
hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1);

CharFormat.cbSize=sizeof(CHARFORMAT);
CharFormat.dwMask=CFM_BOLD;
SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE, (LPARAM)&CharFormat);

CharFormat.dwMask=CFM_BOLD;
CharFormat.dwEffects^=CFE_BOLD;
SendMessage(hRichEdit, EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);

break;
}

PM MAIL   Вверх
Aleksandor
Дата 24.11.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


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

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



А че такого? В диалоге, если нажата кнопка 2, получаем хэндл ричедита.
В структуре CHARFORMAT заполняем поле размера (как в принципе положено делать для всех структур виндовс перед их использованием) и ставим в маске CFM_BOLD, значит нам нужно получить только  состояние бита BOLD.
Даем команду на получение этого бита (CFE_BOLD)
Инвертируем этот бит и даем команду ричедиту использовать его значение. Значит дальше идет форматирование уже с обновленным флагом BOLD.   


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Earnest
Дата 24.11.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Edik, книжку почитай, в коде все никаких хитростей нет, все на элементарном уровне, который ты обязан знать, если хочешь называться программистом.


--------------------
...
PM   Вверх
Edik
Дата 24.11.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



о! эрнест, дорогая русская- я думал между нами все навсегда кончено!!! но судьба вновь улыбнулась мне!!! :inlove 
в книжке нету русская- если бы было  я бы на ваш форум, который кстати пол- дня грузиться у меня в браузере, не лез.

СЛЕДУЮЩИЙ ВОПРОС ГОСПОДА!!!!!!!!!!!!!!!!!!!! Русскую это касаеться ОЧЕНЬ непосредственно...

Как работает уже вот этот участо кода, где вызываеться диалог Font:

Код

if (LOWORD (wParam) == IDC_BUTTON5) 
{ 
    hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1);
    CharFormat.cbSize=sizeof(CHARFORMAT);
    SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE,(LPARAM)&CharFormat);
    memset(&ChooseFontStructure,0,sizeof(CHOOSEFONT));
    memset(&LogFont,0,sizeof(LOGFONT));
    hDC=GetDC(hwnd);
    LogFont.lfHeight=CharFormat.yHeight/-20;
    if(CharFormat.dwEffects&CFE_BOLD)
        LogFont.lfWeight=FW_BOLD;
    else
        LogFont.lfWeight=FW_NORMAL;
    LogFont.lfItalic=(BOOL)(CharFormat.dwEffects&CFE_ITALIC);
    LogFont.lfUnderline=(BOOL)(CharFormat.dwEffects&CFE_UNDERLINE);
                LogFont.lfCharSet=DEFAULT_CHARSET;
    LogFont.lfQuality=DEFAULT_QUALITY;
    LogFont.lfPitchAndFamily=CharFormat.bPitchAndFamily;
    lstrcpy(LogFont.lfFaceName,CharFormat.szFaceName);
    ChooseFontStructure.lStructSize=sizeof(ChooseFontStructure);
    ChooseFontStructure.hwndOwner=hwnd;
    ChooseFontStructure.hDC=hDC;
    ChooseFontStructure.lpLogFont=&LogFont;
    ChooseFontStructure.Flags=CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT;
    ChooseFontStructure.rgbColors=RGB(0,0,0);
    ChooseFontStructure.nFontType=SCREEN_FONTTYPE;
    if(ChooseFont(&ChooseFontStructure))
    {
    CharFormat.dwMask=CFM_BOLD|CFM_FACE|CFM_ITALIC|CFM_OFFSET|CFM_SIZE|CFM_UNDERLINE;
    CharFormat.yHeight=LogFont.lfHeight*-20;
    CharFormat.dwEffects=0;
    if(FW_BOLD==LogFont.lfWeight)
        CharFormat.dwEffects|=CFE_BOLD;
    if(LogFont.lfItalic)
        CharFormat.dwEffects|=CFE_ITALIC;
    if(LogFont.lfUnderline)
        CharFormat.dwEffects|=CFE_UNDERLINE;
    CharFormat.bPitchAndFamily=LogFont.lfPitchAndFamily;
    lstrcpy(CharFormat.szFaceName,LogFont.lfFaceName);
    SendMessage(hRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat);
    }
    ReleaseDC(hwnd,hDC);
    break;
}

PM MAIL   Вверх
Earnest
Дата 24.11.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Edik, тебе что, вообще ничего в этом коде не понятно? Тогда смотри предыдущий пост.
Иначе задавай конкретный вопрос: такой-то оператор мне не понятен.


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


Бывалый
*


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

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



ну красная например мне не понятно:
1) нафига и что это такое CHOOSEFONT и LOGFONT что это за структуры?
2) зачем мы получаем hDC=GetDC(hwnd);?
3) почему делим на -20: LogFont.lfHeight=CharFormat.yHeight/-20;
4) что делает условие
    if(CharFormat.dwEffects&CFE_BOLD)
        LogFont.lfWeight=FW_BOLD;
    else
        LogFont.lfWeight=FW_NORMAL;
5) что такое lfPitchAndFamily строке CharFormat.bPitchAndFamily=LogFont.lfPitchAndFamily; и что нам эта строка вобще дает?

короче я ваще ниче не ясно!!! где там что устанавливаеться?! что куда устанавливаеться?! может красная если бы ты написала книгу по С++ я бы еще че то понял, но те книги которые написаны- я половину кода из книги сам потом в визуальном С++ когда программирую уже, то сам дописываю половину кода- о! такие книги люди пишут! а ты умничаешь, красная.

PM MAIL   Вверх
Edik
Дата 26.11.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



короче я уже все разобрал
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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