List box vs combo box

Would you like to make this site your homepage? It's fast and easy...

Yes, Please make this my home page!

Don't show this to me again.

3.7. LỚP COMBO BOX

Cũng giống như List box, Combo box cũng là tập hợp các chuỗi kí tự

được gói gọn trong một hình chữ nhật. Một chương trình có thể thêm hoặc xóa các chuỗi trong Combo box bằng cách gởi các thông điệp đến thủ tục window của Combo box. Combo box control gởi th�ng điệp WM_COMMAND đến cửa sổ cha khi c� một mục trong Combo box được đ�nh dấu. Cửa sổ cha x�c nhận mục được đ�nh dấu trong Combox box.

Trong Combox box chỉ cho phép chọn một mục trong danh sách các mục có trong Combo box.

3.7.1. Sự khác và giống nhau giữa Combo Box và List Box

Các thao tác trên list box và combo box là hoàn toàn giống nhau, chỉ khác nhau ở hình thức thể hiện. List box hiển thị các mục khi chúng

được cập nhật, còn combo box chỉ hiển thị các mục khi ta nhấp chuột vào nó. Khi tạo kiểu điều khiển combo box với hàm CreateWindow phải sử dụng lớp cửa sổ "combobox" cùng với kiểu cửa sổ là WS_CHILD.

List box có thể cho phép chọn nhiều mục cùng lúc, còn combo box thì chỉ cho phép chọn một mục mà thôi.

Không giống như list box, combo box có hai phần. Phần dưới là danh sách các mục

được thêm vào combo box, phần trên là một edit control dùng để hiển thị mục chọn hiện hành.

3.7.2. Thêm, xóa một chuỗi trênCombo Box

Để th

êm một chuỗi vào combo box dùng hàm SendMessage với thông điệp CB_ADDSTRING:

SendMessage

[hWnd, CB_ADDSTRING, 0, [LPARAM] szString];

hWnd

là handle của Combo box control, szString là chuỗi cần thêm vào.

Hạn chế chiều dài của chuỗi cần thêm vào bằng thông

điệp CB_LIMITTEXT.

SendMessage

[hWnd, CB_LIMITTEXT, [WPARAM]length, 0].

length

là chiều dài của chuỗi cần thêm vào không kể kí tự kết thúc chuỗi. Để chèn một chuỗi vào Combo box tại ví trí xác định, ta dùng thông điệp CB_INSERTSTRING.

SendMessage

[hWnd, CB_INSERTSTRING, iIndex, [LPARAM] szString].

iIndex

là vị trí cần chèn chuỗi vào Combo box. Để x�a tất cả c�c mục trong Combo box, ta dùng thông điệp CB_RESETCONTENT.

SendMessage

[hWnd, CB_RESETCONTENT, 0, 0].

Tương tự, ta có thể xóa một mục trong Combo box bằng thông

điệp CB_DELETESTRING.

SendMessage

[hWnd, CB_DELETESTRING, iIndex, 0];

3.7.3. Chọn và lấy mục trên Combo box

Đếm số mục c� trong Combo box bằng th�ng điệp

CB_GETCOUNT.

iCount = SendMessage [hWnd, CB_GETCOUNT, 0, 0].

Hàm trên trả về số mục có trong Combo box. Thông thường ta chọn mục từ Combo box. Tuy nhiên, ta cũng có thể chọn mục bằng thông

điệp CB_SETCURSEL.

SendMessage

[hWnd, CB_SETCURSEL, [WPARAM] iIndex, 0].

V

ới iIndex là vị trí cần chọn, nếu giá trị này bằng �1 thì Windows loại bỏ việc chọn đối với tất cả c�c mục trong Combo box.

Khi nhận thông

điệp WM_COMMAND từ Combo box, chúng ta có thể xác định mục được chọn c� v� tr� thứ mấy trong Combo box [vị tr� bắt đầu là 0] bằng cách dùng thông điệp CB_GETCURSEL.

iIndex = SendMessage [hWnd, CB_GETCURSEL, 0, 0];

iIndex

là vị trí của mục được chọn. Nếu kh�ng c� mục nào được chọn thì hàm trên sẽ trả về mã lỗi CB_ERR [giá trị bằng �1].

Để x�c định chiều d

ài iLength của một chuỗi có trong Combo box, ta dùng thông điệp CB_GETLBTEXTLEN.

iLength=SendMessage [hwnd, CB_GETLBTEXTLEN, iIndex, 0];

Hàm trả về chiều dài chuỗi với

iIndex là ví trí của chuỗi cần lấy chiều dài. Nếu muốn lấy nội dung của mục nào đ�, ta sử dụng th�ng điệp CB_GETLBTEXT.

SendMessage

[ hWnd, CB_GETLBTEXT, iIndex, [LPARAM]szString];

iIndex

là vị trí chuỗi cần lấy, szString dùng để chứa chuỗi lấy được.

3.7.4. Một ứng dụng Combo box

Để minh họa c�ch c�ch sử dụng Combo box c

ùng với các thủ tục xử lý thông điệp trong Combo box ch�ng ta cùng nhau khảo sát ví dụ sau [ví dụ 3.3]. Kết quả thực hiện chương trình.

Hình 3.3

Ứng dụng minh họa lớp Combo Box

v

COMBOBOX.CPP [ trích dẫn]

void FillCombo

[HWND hwndCombo]

{

int

i;

static

TCHAR *tc[ ] = {TEXT["MAI XUAN HUNG"], TEXT["LE HOAN VU"], TEXT["LE LU NHA"], TEXT["PHAM THANH PHONG"], TEXT["LE LUC"], TEXT["NGUYEN TIEN"], TEXT["DINH QUYEN"]};

for

[i=0; i

Chủ Đề