duci.ro FORUM at forumco.com
duci.ro FORUM at forumco.com
Home | Profile | Register | Active Topics | Active Polls | Members | Private Messages | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?




 All Forums
 ProgrammingPool environment
 Functiile WinAPI32
 Controale in WinAPI32
 Forum Locked
 Send Topic to a Friend
 Printer Friendly
Author Previous Topic Topic Next Topic  

duci
Forum Admin


210 Posts

Posted - 07/18/2005 :  17:11:57  Show Profile  Email Poster Send duci a Private Message

Controale
Butoanele, casetele de editare, barele de urmărire (scroll bars) sunt definite ca controale (controls). Controalele sunt ferestre create obisnuit (folosind CreateWindow) dar cu aspect si utilitate comună cărora li se asociază în plus funcții specifice si cuvintele cheie asociate, operate în special cu functia SendMessage().

Casetele listă (list box)

Casetele listă pot fi de două feluri, cu selecție unică sau cu selectie multiplă si sunt declarate ca ferestre folosind functia CreateWindow sau în fisierul de resurse:


LISTBOX 100, 7,68, 142, 124, LBS_HASSTRINGS | WS_VSCROLL | WS_CAPTION

100 este numărul de ordine al ferestrei (de tip HMENU), care poate fi echivalat cu un cuvânt (de exemplu IDC_LIST) în fisierul resurse.h:

#define IDC_LIST 100, 7,68, 142, 124
sunt pozitia x,y si dimensiunea xy. Urmează stilul, care permite prezenta sirurilor de caractere si ascensor de vizualizare precum si o eticheta a ferestrei.
Adaugarea de elemente

Adaugarea de elemente se poate face, folosind sirurile de caractere si eventual instructiunea sprintf():

int index=SendDlgItemMessage(hwnd,IDC_LIST,LB_ADDSTRING,0,(LPARAM)"Scriem ceva!");

Dacă lista are are stilul LBS_SORT, noul item va fi inserat la pozitia alfabetică corespunzatoare, daca nu, la sfârsitul listei.

Oricum, variabila index va contine numarul de ordine al itemului, si putem sa efectuam diferite operatii pe baza lui, de exemplu:

SendDlgItemMessage(hwnd, IDC_LIST, LB_SETITEMDATA, (WPARAM)index, (LPARAM)nTimes);

Notificari

Scopul declarat al listelor este selectarea unui item din lista, care se poate face folosind mesajul LBN_SELCHANGE, care ne pune că lista este modificată de utilizator. este receptionat prin intermediul mesajului WM_COMMAND si poate proveni din meniuri sau actionarea mouse-lui.

Codul de notificare este trimis ca HIWORD(wParam), cealalta jumatate a mesajului care ne-a dat anterior numarul de identificare al controlului (LOWORD(wParam)).


case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_LIST:
// E vorba de lista noastră, verificăm codul de notificare
switch(HIWORD(wParam))
{
case LBN_SELCHANGE: // S-a schimbat selecția.
break;
}
break;
// ... alte controale
}
break;



Extragerea datelor din lista

Dacă avem o lista de selectie unica, trimitem mesajul LB_GETCURSEL pentru a regasi indicele itemului selectat.

Pentru o listă cu selectii multiple, avem nevoie de un fisier tampon pentru a salva indicii:

HWND hList = GetDlgItem(hwnd, IDC_LIST);
int count = SendMessage(hList, LB_GETSELCOUNT, 0, 0);


Apoi vom aloca o zona de memorie bazata pe numărul de item si vom umple acest spatiu folosind mesajul LB_GETSELITEMS.


int *buf = GlobalAlloc(GPTR, sizeof(int) * count);
SendMessage(hList, LB_GETSELITEMS, (WPARAM)count, (LPARAM)buf);
GlobalFree(buf);

Actiuni care folosesc numărul de ordine al indicilor


In tacest exemplu, buf[0] este primul indice, iar ultimul indice este buf[count - 1].

Dacă dorim să regasim sirul de caractere asociat unui indice:

int data = SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, 0);

Casetele de editare

Pentru câmpuri de editare formate dintr-o singura linie, avem exemplul mai sus, cu doua câmpuri. Crearea câmpurilor se poate face în fisierul de resurse, iar mesajele sunt procesate folosind SendDlgItemMessage().

GetDlgItemText si GetWindowText au ca parametri sirul de caractere unde se depune informatia si lungimea acestui sir de caractere.


Prof.Dr. D. Ciurchea

Google AdSense

USA
Mountain View


Lichens
Starting Member



6 Posts

Posted - 07/18/2005 :  20:24:48  Show Profile  Email Poster Send Lichens a Private Message
dsfsdfgds
Go to Top of Page
  Previous Topic Topic Next Topic  
 Forum Locked
 Send Topic to a Friend
 Printer Friendly
Jump To:
duci.ro FORUM at forumco.com © 2000-05 ForumCo.com Go To Top Of Page
Generated in 0.14 seconds. Hello from Duci !!! Snitz Forums 2000
RSS Feed 1 RSS Feed 2
Powered by ForumCo 2000-2008
TOS - AUP - URA - Privacy Policy
ForumCo Free Blogs and Galleries
Signup for a free forum or Go Banner Free