Transport (nu cursorul)

Utilizați fontul proporțional implicit. Pentru a obține o imagine aliniată, codul pentru ieșirea fiecărei linii ar trebui împărțit în nouă secțiuni. Pentru a evita toate aceste dificultăți, este mult mai ușor să folosiți doar un font fix. Așa cum am menționat deja în ultimul capitol, sunt necesare două funcții pentru aceasta, care sunt combinate într-o singură instrucțiune:







Programul KEYLOOK numește aceste două funcții oriunde devine contextul dispozitivului. Acest lucru se întâmplă în trei locuri: în funcția ShowKey. la procesarea mesajului WM_CREATE în WndProc și la procesarea mesajului WM_PAINT. Funcția GetStockObject primește un mâner la obiect grafic standard care este font fix utilizat în versiunile anterioare ale Windows, înainte de Windows 3.0. Apelarea funcției SelectObject selectează acest obiect în contextul dispozitivului. Datorită acestui apel, tot textul va fi afișat pe ecran într-un font fix. Reveniți la fontul proporțional cu ajutorul funcției:

Funcția ShowKey apelează ScrollWindow pentru a defila rândurile anterioare înainte de a afișa o nouă linie. De obicei, rezultă că partea din fereastră devine invalidă și, prin urmare, mesajul WM_PAINT este generat. Pentru a evita acest lucru, o funcție de apel este inclusă în funcția ShowKey

Programul KEYLOOK nu stochează mesajele hardware ale tastaturii primite, astfel încât atunci când este recepționat un mesaj WM_PAINT, acesta nu poate reprograma fereastra. Din acest motiv, KEYLOOK imprimă pur și simplu antetul tabelului în partea superioară a spațiului de lucru atunci când procesează mesajul WM_PAINT. Înainte de a apela funcția BeginPaint. Când procesați mesajul WM_PAINT, KEYLOOK anulează întreaga fereastră. Aceasta vă permite să ștergeți întreaga fereastră, în loc să ștergeți dreptunghiul nevalid.

(Programul KEYLOOK nu stochează mesajele primite de hardware-ul tastaturii, și, prin urmare, nu poate redesena ecranul până când mesajul WM_PAINT procesat cu siguranță este un dezavantaj. Programul Typer prezentat mai târziu în acest capitol, acest dezavantaj este eliminat.)

În partea de sus a spațiului de lucru, programul KEYLOOK desenează antetul tabelului și identifică astfel nouă coloane. Deși puteți crea un font în care caracterele sunt subliniate, este utilizată o abordare ușor diferită aici. Două variabile sunt definite ca un șir de caractere, numite szTop (conține text) și szUnd (conține underscore), iar atunci când se procesează mesajul WM_PAINT, acestea sunt afișate în aceeași poziție în partea de sus a ferestrei. În mod obișnuit, Windows afișează text în modul "opac", ceea ce înseamnă că Windows actualizează zona de fundal a simbolului atunci când este afișată. Utilizarea acestui mod de fundal poate duce la ștergerea primului (szTop) al doilea șir de caractere (szUnd). Pentru a preveni aceasta, comutați contextul dispozitivului în modul "transparent" (mod fără a umple fundalul caracterelor):







Când introduceți text într-un program, de obicei un mic subliniere sau un mic patrulater vă arată unde va apărea următorul caracter pe ecran. Puteți presupune că acesta este un cursor, dar dacă programați pentru Windows, trebuie să renunțați la această vizualizare. În Windows, acest lucru se numește o cartelă. Cuvântul "cursor" se referă la o imagine bit care reflectă poziția mouse-ului pe ecran.

Funcțiile de lucru cu căruciorul

Iată cinci funcții principale de lucru cu căruciorul:

• CreateCare - creează un transport asociat cu fereastra.

• SetCarePos - setează poziția căruciorului în fereastră.

• ShowCare - arată căruciorul.

• HideCaret - ascunde căruciorul.

• DestroyCaret - elimină căruciorul.

În plus față de acestea, există încă o funcție de obținere a poziției căruciorului (GetCaretPos) și funcția de stabilire și obținerea frecvenței intermitentă a căruciorului (GetCaretBlinkTime) și (SetCaretBlinkTime).

Un cărucior este de obicei o linie orizontală orizontală sau un dreptunghi cu o dimensiune a simbolului sau o linie verticală. O bordură verticală este recomandată atunci când se utilizează un font proporțional, cum ar fi fontul standard al sistemului Windows. Întrucât dimensiunea caracterelor fontului proporțional nu este fixă, o linie orizontală și un dreptunghi nu pot specifica dimensiunea caracterului.

Nu puteți crea doar un carucior atunci când procesați mesajul WM_CREATE și îl ștergeți atunci când procesați mesajul WM_DESTROY. Transportul este ceea ce se numește "resursă la nivel de sistem". Aceasta înseamnă că în sistem există doar un singur cărucior. Și, ca rezultat, programul, dacă este necesar, ieșirea căruciorului pe ecranul ferestrei "îl împrumută" din sistem.

Mesajele de prelucrare și WM_SETFOCUS WM_KILLFOCUS, programul poate determina dacă acesta are focalizarea intrare. Procedura fereastra primește mesajul WM_SETFOCUS, atunci când primește focus intrare și mesajul WM_KILLFOCUS, atunci când pierde focalizarea. Aceste mesaje vin în perechi: procedura fereastra primește mesajul WM_SETFOCUS întotdeauna înainte de a WM_KILLFOCUS primi mesajul, iar ea devine mereu aceeași cantitate de mesaje WM_SETFOCUS și WM_KILLFOCUS în timpul duratei de viață a ferestrei.

Regula de bază a utilizării unui cărucior arata simplu: procedura fereastra solicită funcția CreateCaret la procesarea mesajelor și funcția WM_SETFOCUS DestroyCaret la procesarea posturi WM_KILLFOCUS.

Există și alte reguli: transportul este creat ascuns. După apelarea funcției CreateCare. procedura de fereastră trebuie să apeleze funcția ShowCare. pentru a face vizibilă cărarea. În plus, procedeul ferestrei, atunci când se întinde în fereastră atunci când procesează un alt mesaj decât WM_PAINT, ar trebui să ascundă carul prin apelarea funcției HideCare. După ce procedura de fereastră termină desenarea în fereastra sa, ea apelează funcția ShowCare. pentru a readuce din nou carul la ecran. Funcția HideCaret are un efect suplimentar: dacă apelați în mod repetat HideCaret. fără a apela ShowCaret. pentru ca carul să devină din nou vizibil, va trebui să apelați funcția ShowCare același număr de ori.

Programul TYPER

GetStockObject și SelectObject.

La prelucrarea mesajelor programului WM_SIZE Typer calculează lățimea și înălțimea ferestrei cu caractere și stochează aceste valori în variabilele și cxBuffer cyBuffer. Apoi utilizează funcția malloc. Pentru a aloca un buffer pentru a stoca toate caracterele care pot fi imprimate în fereastră. Variabilele xCare și yCare stochează poziția căruciorului în caractere.

În timpul procesării mesajului, programul solicită WM_SETFOCUS Typer CreateCaret functia de a crea un cărucior având o lățime și o înălțime de caracter, SetCaretPos funcționează pentru a seta poziția de transport și funcția ShowCaret. pentru a face vizibilă cărarea. Când mesajul WM_KILLFOCUS este procesat, programul solicită funcții HideCaret și DestroyCaret.

# TYPER.MAK face fișier

$ (LINKER) $ (GUIFLAGS) -OUT: typer.exe typer.obj $ (GUILIBS)

$ (CC) $ (CFLAGS) typer.c







Trimiteți-le prietenilor: