|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 18, 2003 05:23:27 Помогите, спецы по Rich Edit контролу! Есть множественное форматирование, полученное в структуру CHARFORMAT2 сообщением EM_GETCHARFORMAT. Например я получил CHARFORMAT2.dwEffects=7h Методом подбора вычислил что это CFE_BOLD Or CFE_ITALIC Or CFE_UNDERLINE, где CFE_BOLD = &H1,CFE_ITALIC = &H2,CFE_UNDERLINE = &H4 Всё это форматирование соответственно равно 7h Но это я знаю конкретно для этого примера, что 7h равно именно слиянию трёх эффектов. Могу ли я определить каким нибудь способом из полученного числа одну из его составляющих? К примеру, есть ли в данном форматировании CFM_UNDERLINE? Или я должен перебирать все возможные варианты? И ещё, иногда к форматированию добавляется &H40000000. Описания этой константы я не нашёл в АПИ-вьювере. Спасибо. |
|
|
Дата: Авг 18, 2003 10:36:30 · Поправил: Bog_ CyberRat if (CHARFORMAT2.dwEffects & CFM_UNDERLINE) ... Прочтите введение в булеву алгебру :) 0x40000000 - CFE_AUTOCOLOR The text color is the return value of GetSysColor (COLOR_WINDOWTEXT). If this flag is set, the crTextColor member is ignored. |
|
|
Дата: Авг 19, 2003 04:55:54 Спасибо, обязательно прочту, раз вы в ней ничего не поняли. :) 0x40000000 - это не только CFE_AUTOCOLOR, но и CFM_COLOR. Но это так, к слову. Маска получается множественная: CFM_ALL=&HF800003F=CFM_EFFECTS Or CFM_SIZE Or CFM_FACE Or CFM_OFFSET Or CFM_CHARSET Если я вас правильно понял, то если маска CFM_ALL, то к эффектам прибавляется это самое CFE_AUTOCOLOR. Получается что в люой маске, где одним из составляющих является CFM_EFFECTS и будет прибавляться этот автоколор? Потому что CFM_EFFECTS тоже множественная маска. И она эквивалента CFM_BOLD Or CFM_ITALIC Or CFM_UNDERLINE Or CFM_COLOR Or CFM_STRIKEOUT Or CFE_PROTECTED Or CFM_LINK. А эффект CFE_AUTOCOLOR может быть использован только при маске CFM_COLOR Тогда возвращаюсь к предыдущему вопросу. Как извлечь подмаску из множественной маски? Потому как, бывает что выдаётся маска, которой вообще нет в API-декларациях. |
|
|
Дата: Авг 19, 2003 05:05:40 CyberRat Тогда возвращаюсь к предыдущему вопросу. Bog_ уже ответил. Берёте маску и применяете битовую AND: mov eax,mask and eax,sub_mask jnz _YES _NO: ; . . . _YES: ; . . . |
|
|
Дата: Авг 19, 2003 05:11:51 · Поправил: CyberRat Спасибо попробую |
|
|
Дата: Авг 19, 2003 11:15:06 CyberRat раз вы в ней ничего не поняли. Довольно голословное заявление... 0x40000000 - это не только CFE_AUTOCOLOR, но и CFM_COLOR. Вы не мешайте в одну кучу CFE_ и CFM_... CFM_ - это флаги маски(dwMask), отвечающие за валидность определенного флага в dwEffects (кстати они также отвечают и за валидность других полей в CHARFORMAT2). CFE_ - собственно сами флаги эффектов Если я вас правильно понял, то если маска CFM_ALL, то к эффектам прибавляется это самое CFE_AUTOCOLOR. Не правильно, в силу пиведенных выше причин! CFM_ALL лишь задает валидность всех полей, в том числе и бита, соответствующего CFE_AUTOCOLOR, а применение эффекта будет уже зависеть уже от самого флага CFE_AUTOCOLOR. Как его проверять я уже писал. |
|
|
Дата: Авг 20, 2003 04:25:02 Quantum Ещё раз спсибо. На бобуинском это будет выглядеть так: MultiFormat AND SingleFormat = SingleFormat Bog_ Вы были правы. Только Ваш ответ нес так мало информации для меня, что я в попыхах не сообразил, что конкретно вы имеете ввиду. Да и даёте вы мне только ту информацию которую я уже знаю. Про маски, эффекты и т.д. Если вы уж такой любитель придираться к словам, то я вам объясню: маска определяет над каким именно элементом типа CHARFORMAT2 будет производится действие. А эффект в данном случае является операндом. CFM_ - маска, CFE_ - её операнд. Если вы зададите например маску CFM_BOLD, а эффект, например CFE_ITALIC, то соответственно никакого BOLD не будет. Вы, кстати, взгляните значения масок для эффектов и самих эффектов - они идентичны. А насчёт "введение в булеву алгебру" - Я уже подковался у програмера на Алголе'68 :) и теперь точно знаю что делают AND, OR и NOT. Ну а XOR я и так знал. Как его проверять я уже писал. К сожалению из нашего с вами разговора я не вынес для себя ничего полезного. Это очень печалит. Таким покровительственным тоном могут заявлять только те, кто хоть немного помог. В вашем случае это не так. === Мне кажется способ объединения значений оператором OR экономен и удобен, если не сказать гармоничен. Вот тебе и дЗен :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065 |