Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Вопрос о RichEdit


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

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;
}

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

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

Автор: Edik 24.11.2006, 18:56
о! эрнест, дорогая русская- я думал между нами все навсегда кончено!!! но судьба вновь улыбнулась мне!!! :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;
}

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

Автор: Edik 25.11.2006, 00:21
ну красная например мне не понятно:
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; и что нам эта строка вобще дает?

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

Автор: Edik 26.11.2006, 20:01
короче я уже все разобрал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)