Lớp combo box lập trình c windows Lớp combo box lập trình c windows Bởi: Khuyet Danh LỚP COMBO BOX TRONG LẬP TRÌNH C TRÊN WINDOWS Cũng giống List box, Combo box tập hợp chuỗi kí tự gói gọn hình chữ nhật Một chương trình thêm xóa chuỗi Combo box cách gởi thông điệp đến thủ tục window Combo box Combo box control gởi thông điệp WM_COMMAND đến cửa sổ cha có mục Combo box đánh dấu Cửa sổ cha xác nhận mục đánh dấu Combox box Trong Combox box cho phép chọn mục danh sách mục có Combo box Sự khác giống Combo Box List Box Các thao tác list box combo box hoàn toàn giống nhau, khác hình thức thể List box hiển thị mục chúng cập nhật, combo box hiển thị mục ta nhấp chuột vào 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" với kiểu cửa sổ WS_CHILD List box cho phép chọn nhiều mục lúc, combo box cho phép chọn mục mà Không giống list box, combo box có hai phần Phần danh sách mục thêm vào combo box, phần edit control dùng để hiển thị mục chọn hành Thêm, xóa chuỗi trênCombo Box Để thêm chuỗi vào combo box dùng hàm SendMessage với thông điệp CB_ADDSTRING: 1/5 Lớp combo box lập trình c windows SendMessage (hWnd, CB_ADDSTRING, 0, (LPARAM) szString); hWnd handle Combo box control, szString chuỗi cần thêm vào Hạn chế chiều dài chuỗi cần thêm vào thông điệp CB_LIMITTEXT SendMessage (hWnd, CB_LIMITTEXT, (WPARAM)length, 0) length chiều dài chuỗi cần thêm vào không kể kí tự kết thúc chuỗi Để chèn chuỗi vào Combo box ví trí xác định, ta dùng thông điệp CB_INSERTSTRING SendMessage (hWnd, CB_INSERTSTRING, iIndex, (LPARAM) szString) iIndex vị trí cần chèn chuỗi vào Combo box Để xóa tất mục Combo box, ta dùng thông điệp CB_RESETCONTENT SendMessage (hWnd, CB_RESETCONTENT, 0, 0) Tương tự, ta xóa mục Combo box thông điệp CB_DELETESTRING SendMessage (hWnd, CB_DELETESTRING, iIndex, 0); Chọn lấy mục Combo box Đếm số mục có Combo box thông điệp CB_GETCOUNT iCount = SendMessage (hWnd, CB_GETCOUNT, 0, 0) Hàm trả số mục có Combo box Thông thường ta chọn mục từ Combo box Tuy nhiên, ta chọn mục thông điệp CB_SETCURSEL SendMessage (hWnd, CB_SETCURSEL, (WPARAM) iIndex, 0) Với iIndex vị trí cần chọn, giá trị –1 Windows loại bỏ việc chọn tất mục Combo box Khi nhận thông điệp WM_COMMAND từ Combo box, xác định mục chọn có ví trí thứ Combo box (vị trí bắt đầu 0) cách dùng thông điệp CB_GETCURSEL iIndex = SendMessage (hWnd, CB_GETCURSEL, 0, 0); 2/5 Lớp combo box lập trình c windows iIndex vị trí mục chọn Nếu mục chọn hàm trả mã lỗi CB_ERR (giá trị –1) Để xác định chiều dài iLength chuỗi có Combo box, ta dùng thông điệp CB_GETLBTEXTLEN iLength=SendMessage (hwnd, CB_GETLBTEXTLEN, iIndex, 0); Hàm trả chiều dài chuỗi với iIndex ví trí chuỗi cần lấy chiều dài Nếu muốn lấy nội dung mục đó, ta sử dụng thông điệp CB_GETLBTEXT SendMessage ( hWnd, CB_GETLBTEXT, iIndex, (LPARAM)szString); iIndex vị trí chuỗi cần lấy, szString dùng để chứa chuỗi lấy Một ứng dụng Combo box Để minh họa cách cách sử dụng Combo box với thủ tục xử lý thông điệp Combo box khảo sát ví dụ sau (ví dụ 3.3) Kết thực chương trình Ứng dụng minh họa lớp Combo Box * COMBOBOX.CPP ( trích dẫn) void FillCombo (HWND hwndCombo) { int i; 3/5 Lớp combo box lập trình c windows 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