ПредишенСледващото

използване на стандартен набор пропорционален шрифт. За да получите код изравни с изображението на изхода на всеки ред трябва да бъде разделена на девет секции. За да се избегнат всички тези трудности, той е много по-лесно да се използва само с фиксиран шрифт. Както бе споменато в последната глава, тя се нуждае от две функции, които са обединени в един израз:

KEYLOOK програма нарича тези две функции, където и да получава контекста на устройството. Това се случва на три места: в ShowKey функция. при обработката на съобщението WM_CREATE в WndProc и обработката на WM_PAINT съобщения. функция GetStockObject получава дръжка за стандартната графична обект, който е фиксиран шрифта, използван в по-ранните версии на Windows, преди Windows 3.0. Call функция SelectObject избира обекта в контекста на устройството. С този призив, пълния текст ще бъде показан на екрана фиксиран шрифт. Върнете се към пропорционална шрифт с помощта на функцията:

функция ShowKey ScrollWindow призовава да се придвижите нагоре предишен ред преди извеждането на нов ред. Обикновено това води до факта, че част от прозореца е анулирана, и следователно генерира WM_PAINT съобщение. За да се избегне това, в ShowKey функции, включително функция повикване

KEYLOOK програма не съхранява съобщения, получени хардуерна клавиатура, така че след като получи WM_PAINT съобщение, че не може да се прекрои прозореца. Поради тази причина KEYLOOK просто извежда заглавието на маса в горната част на зоната на работа при обработката на съобщението за WM_PAINT. Преди да се обадите на функцията BeginPaint. при обработката на съобщението за WM_PAINT, KEYLOOK обезсилва целия прозорец. Това ви дава възможност да изтриете всички прозореца, вместо изтриване невалиден правоъгълник.

(Тази програма KEYLOOK не съхранява съобщения, получени от хардуера на клавиатура, и по тази причина не може да се прекрои екрана, докато обработват WM_PAINT съобщение със сигурност е по-неблагоприятно положение. Програмата Typer е показано по-късно в тази глава, този недостатък е отстранен.)

В горната част на работната област KEYLOOK програма обръща глава маса и по този начин идентифицира девет колони. Въпреки, че можете да създадете шрифт, в която са подчертани героите, ето го използва малко по-различен подход. Определя се от две променливи от тип символен низ, наречен szTop (той съдържа текст) и szUnd (той съдържа долна черта), както и обработката на WM_PAINT съобщения се показват в една и съща позиция в горната част на прозореца. Обикновено Windows извежда режима на текст "непрозрачен", което означава, че Windows актуализира фон зона характер с мощност до екрана. Използването на този режим, на заден план може да предизвика втора поредица от букви (szUnd) първо изтриване (szTop). За да предотвратите това, задайте контекста на устройството в "прозрачен" режим (без пълнеж герои фонов режим):

Когато въвеждате текст в една програма, обикновено малка долна черта или малък правоъгълник показва мястото, където следващия знак сте набрали се появява на екрана. Може да си мислите, че това е курсора (курсор), но ако сте програмиране за Windows, трябва да се откаже такава представителство. В Windows, това се нарича "превоз" (карета);. Думата "курсор" се отнася за растерна графика, която отразява позицията на мишката върху екрана.

Функция работи с превоз

Има пет основни функции работят с превоза:

• CreateCaret - създава прозорец, свързани с превоза.

• SetCaretPos - определя позицията на прозореца на каретата.

• ShowCaret - показва превоз.

• HideCaret - скрива превоз.

• DestroyCaret - премахва превоз.

В допълнение към тези, все още има функция за получаване на позицията на шейната (GetCaretPos) и определяне на функция и получаване на честотата на мигане на превоза (GetCaretBlinkTime) и (SetCaretBlinkTime).

Превоз - това обикновено е хоризонтална линия или правоъгълник, с размер на буквите, или вертикална линия. Вертикална черта се препоръчва, когато се използва пропорционална на шрифта, като шрифта система по подразбиране, определен от Windows. Тъй като размерът на пропорционален шрифт на символите не е фиксирана, хоризонтални линии и правоъгълници не могат да определят размера на символа.

Не може просто да се създаде карета в обработката на съобщение WM_CREATE и да го изтрие, когато обработката WM_DESTROY съобщение. Превоз - това е, което се нарича "рамките на цялата система на ресурсите" (ресурс рамките на цялата система). Това означава, че системата има само един превоз. И като резултат, програмата, ако е необходимо, за оттеглянето на превоза на екрана на прозореца "назаем" го от системата.

Обработка и WM_SETFOCUS WM_KILLFOCUS съобщения, програмата може да се определи дали той има вход фокуса. Процедурата за прозорец получава WM_SETFOCUS на съобщение, когато получи входен фокус и съобщение WM_KILLFOCUS, когато губи фокус. Тези съобщения са по двойки, като процедурата за прозорец получава съобщението WM_SETFOCUS винаги преди WM_KILLFOCUS получи съобщението, а тя винаги се получава същото количество WM_SETFOCUS и WM_KILLFOCUS съобщения по време на жизнения цикъл на прозореца.

Основното правило за използване на превоз изглежда проста: процедурата за прозорец призовава функция CreateCaret при обработката на съобщения и функция WM_SETFOCUS DestroyCaret при обработката WM_KILLFOCUS мнения.

Има няколко други правила: създаване на скрито пързалка. След като нарече функция CreateCaret. процедура прозорец трябва да се обадите функция ShowCaret. да курсорът се вижда. В допълнение към това, процедурата за прозорец, когато се прибира в прозореца при обработката на съобщението, което не е WM_PAINT, трябва да обхваща превоза, причинявайки HideCaret функция. След процедурата на прозорец, за да завърши изготвянето на прозореца, той причинява функция ShowCaret. отново, за да донесе превоз на екрана. функция HideCaret има допълнителен ефект: ако многократно се обадя HideCaret. без да причиняват ShowCaret. превоз отново, за да стане видим, ще имате един и същ период от време, за да предизвика функция ShowCaret.

програма Typer

GetStockObject и SelectObject.

При обработката на съобщенията WM_SIZE Typer програма изчислява ширината и височината на прозореца в знаци и съхранява тези стойности на променливи и cxBuffer cyBuffer. След това използва функцията за изчистване. за разпределяне на буфер, за да държи всички герои, които могат да бъдат отпечатани в прозореца. Променливите и Xcaret yCaret запазват позицията на превоза в знака.

По време на обработка на съобщение, програмата изисква WM_SETFOCUS Typer CreateCaret функционира, за да създадете вагон, който има ширина и височина на герой, SetCaretPos функция за настройване на позицията на превоза и функцията ShowCaret. да курсорът се вижда. По време на обработка на съобщение, програмата изисква WM_KILLFOCUS HideCaret функция и DestroyCaret.

# TYPER.MAK направи файл

$ (Агент) $ (GUIFLAGS) напускане: typer.exe typer.obj $ (GUILIBS)

$ (CC) $ (CFLAGS) typer.c

Подкрепете проекта - споделете линка, благодаря!