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


Автор: sidiakin 7.10.2010, 20:37
Читаю книгу Petzold. Вот фрагмент текста, который мне непонятен:

Цитата

SYSMETS1 также сохраняет среднюю ширину символов верхнего регистра в статической переменной cxCaps. Для
фиксированного шрифта cxCaps была бы равна cxChar. Для пропорционального шрифта cxCaps равна 150% от
cxChar. Младший бит поля tmPitchAndFamily структуры TEXTMETRIC равен 1 для пропорционального шрифта и
0 для фиксированного. SYSMETS1 использует значение этого бита для расчета cxCaps из cxChar следующим
образом:
cxCaps =(tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;


Объясните пож., как здесь находится 150% от ширины символа???

Еще мне непонятно про действительные/недействительные регионы. Автор пишет, что можно перерисовывать, как все окно, так и часть. И что часть окна перерисовывать лучше, чем все окно. А как мне выбирать метод перерисовывания окна, я так и не понял.

И вот еще так автор находит положение Scroll Bar: 

Цитата

iVscrollPos = max(0, min(iVscrollPos, NUMLINES));


Как это читать??? Заранее спасибо!

Автор: ASMatic 8.10.2010, 05:20
Цитата(sidiakin @  7.10.2010,  18:37 Найти цитируемый пост)
И что часть окна перерисовывать лучше, чем все окно

InvalidateRect

по шрифтам ничего не понял)

Автор: Earnest 8.10.2010, 06:27
Цитата(ASMatic @  8.10.2010,  06:20 Найти цитируемый пост)
по шрифтам ничего не понял) 

А чего там понимать? 3/2 это и есть 150%. А также см:
Цитата

Младший бит поля tmPitchAndFamily структуры TEXTMETRIC равен 1 для пропорционального шрифта и
0 для фиксированного

Автор: sidiakin 8.10.2010, 21:46
Ну объясните пожалуйста "на яблоках"

Автор: borisbn 9.10.2010, 11:04
Знаю, что  smile 

Цитата(sidiakin @  8.10.2010,  21:46 Найти цитируемый пост)
Ну объясните пожалуйста "на яблоках"

в Apple нет WinAPI smile

Автор: GremlinProg 10.10.2010, 14:48
Цитата(sidiakin @  8.10.2010,  23:46 Найти цитируемый пост)
Ну объясните пожалуйста "на яблоках"

ну раздели 3 яблока пополам ( 3/2 )
что получится?
полтора яблока

а что такое 150%?
те же полтора яблока, только помноженные на 100%

любой другой фрукт будет делиться так же smile 

Автор: Logree 10.10.2010, 21:15
я так понимаю у автора проблемы с матчастью... т.е с C++

Код

cxCaps =(tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;


Код

Младший бит поля tmPitchAndFamily структуры TEXTMETRIC равен 1 для пропорционального шрифта и
0 для фиксированного.

Код

tm.tmPitchAndFamily & 1 

этот фрагмент кода вернёт 1 если младший бит установлен и 0 если он не установлен, далее смотрим оператор:  (условие) ? если истино:если ложно,  т.е если бит установлен то выражение  (tm.tmPitchAndFamily & 1 ? 3 : 2) будет равно 3 и мы получим: 3/2 * cxChar, если не установлен то выражение (tm.tmPitchAndFamily & 1 ? 3 : 2) буде равно 2 и мы получим: 2/2 * cxChar ;

Автор: sidiakin 10.10.2010, 22:05
Спасибо Logree за подробное разъяснение. Именно это я и хотел спросить. Хотя, если честно, я так и не понял откуда 3 ?  и почему так все сложно. Я думал, что 150% от cxChar, то это просто cxChar * 1.5. И пож. поясните по поводу действ./ недейств. прямоугольников при рисовании. Если у меня в окне будет прямоугольник, котор. мне нужно будет перерисовывать, как мне объяснить Windows, что мне нужно перерисовывать только его, а не все окно? Спасибо

Автор: Logree 11.10.2010, 00:19
http://ru.wikipedia.org/wiki/Тернарная_условная_операция

Автор: sidiakin 11.10.2010, 17:03
А-а-а... Еще раз спасибо!

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