Documente Academic
Documente Profesional
Documente Cultură
29.
// .
31.
// .
34.
// .
Atunci cnd este mutat bara de derulare, programul trebuie s creeze o nou
pensul i s transmit variabila handle a pensulei structurii clasei de fereastr.
Accesarea acestei variabile handle se face prin apel la funcia GetClassWord., iar
setarea prin SetClassWord.
Atunci cnd oricare dintre bare i schimb poziia, se terge pensula folosit i se
creeaz una nou prin apel la funcia:
SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(RGB(color[0],color[1],
color[2]))))
36.
Presupunem c avem situaia: avem mai multe bare de derulare n zona client i
este necesitatea de a transmite input focus-ul de la una la alta prin intermediul
tastei Tab. Dificultatea o reprezint faptul c o bar de derulare deja deine input
focus-ul i ignor apsarea Tab-ului.
Pentru a rezolva aceast problem trebuie introdus o nou procedur de
fereastr pentru fereastra descendent, care va trata anumite mesaje, de care avem
nevoie i va transmite controlul procedurii de fereastr implicite. Setarea unei noi
proceduri de fereastr se face prin apel la funcia SetWindowLong().
Astfel, pentru fiecare dintre barele de derulare prezente se apeleaz aceast
funcie:
OldScroll[i]=(WNDPROC)SetWindowLong(hwndScroll[i],GWL_WNDPROC,(LONG)ScrollProc))
// .
WM_CTLCOLORBTN
Astfel nct este posibil de a seta culoarea zonei client i a textului afiat, astfel nct
culoarea acestora s coincid cu culoarea butoanelor i a ferestrelor descendent.
Apare ntrebarea: este posibil de a adapta culoarea butoanelor la culorile pe care le
preferm? Teoretic da, practic nu, pentru c unica posibilitate de a o face este
funcia SetSysColor(). ns aceast funcie determin schimbarea tuturor culorilor n
sistem ceea ce le-ar schimba n toate aplicaiile, care ruleaz curent n Windows.
O alt modalitate (teoretic) mai bun este tratarea mesajelor WM_CTLCOLORBTN.
Acest mesaj este trimis de ctre fereastra descendent atunci cnd aceasta i
deseneaz zona client. Aici este cazul de a schimba culorile, pe care fereastra
descendent le folosete pentru a colora fundalul: SetBkColor() sau pentru a scrie un
text: SetTextColor().
Problema care apare este faptul c doar butoanele de tip Push sau cele desenate de
utilizator trimit astfel de mesaj ferestrei printe i doar butoanele owner-draw
(desenate de utilizator) rspund la procesarea acestui mesaj de ctre fereastra
printe, ceea ce, de fapt, este inutil pentru c n final anume fereastra printe este
responsabil de desenarea butoanelor.
Ferestre child. Radio buttons. // .
Radio buton este o fereastr descendent, care, n grup, permit alegerea unor
opiuni, care se exclud reciproc. Arat ca o caset de validare, numai c n loc de
caset este un cercule alb, care, n caz c este validat, este marcat de un cercule
negru mai mic.
39.
// .
// .
Atunci cnd se utilizeaz mai multe ferestre de editare, este necesar de a utiliza
principiul windows subclassing pentru a semnala trecerea de la o fereastr de
editare la alta, adic de a crea o procedur de fereastr specific pentru fiecare
fereastr de editare. O alt modalitate este interceptarea butoanelor Tab sau ShiftTab.
Exist diverse mesaje pentru interacionarea cu textul introdus n caseta de
editare. Toate aceste mesaje sunt trimise prin intermediul funciei SendMessage(),
utiliznd indicatorul necesar WM_COPY, WM_CUT, etc.
Se poate obine nceputul irului i sfritul acestuia ( SendMessage(hwndEdit,
EM_GETSEL,(WPARAM)&iStart,(LPARAM)&iEnd)), poate fi nlocuit textul cu un alt ir
(SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)szString)) sau obinut numrul de
linii (iCount=SendMessage(hwndEdit,EM_GETLINECOUNT,0,0);).
87.STRUCTURA UNEI APLICAII ORIENTAT PE OBIECTE N C#. Clas de baz i clase
derivate.
n C#, funcionalitatea unei clase poate fi extins aplicnd motenirea. Clasa derivat poate
moteni atributele clasei de baz, metodele acesteia. De asemenea pot fi suprascrise
proprietile sau metodele, la necesitate. Motenirea se definete prin operatorul : . Nu este
permis motenirea de la mai mult de o clas de baz.
//clasa de baz
{
string parentString;
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
//clasa derivat
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
}
public new void print()
{
base.print();
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}