để đưa hình ảnh vào trong listbox, bạn phải đặt listbox thành kiểu owner draw (kiểu do người dùng tự vẽ). Để làm được điều này, có hai trường hợp xảy ra:
- Bạn tạo listbox bằng cách kéo thả vào dialog. Lúc này thiết lập thuộc tính owner draw thành fixed (kích thước các item trong listbox cố định) hoặc variable (kích thước giữa các item có thể khác nhau)
- Bạn tạo listbox bằng cách dùng hàm createwindow hay createwindowex. Chẳng hạn với createwindow
Mã:
HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
lpClassName lúc này là "LISTBOX"
Tham số dwStyle sẽ phải là WS_CHILD cộng thêm với LBS_OWNERDRAWFIXED hoặc LBS_OWNERDRAWVARIABLE, tức là dwStyle=WS_CHILD | LBS_OWNERDRAWFIXED hoặc dwStyle=WS_CHILD | LBS_OWNERDRAWVARIABLE.
hWndParent phải đặt bằng handle tới cửa số chính hoặc dialog.
Rồi trong hàm callback của dialog hoặc cửa sổ chính, bắt thông điệp WM_MEASUREITEM và WM_DRAWITEM
Đối với WM_MEASUREITEM
thông số lParam lúc này là con trỏ tới cấu trúc MEASUREITEMSTRUCT
Mã:
typedef struct MEASUREITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemWidth; UINT itemHeight; ULONG_PTR itemData;} MEASUREITEMSTRUCT;
lpMeasureItem = (LPMEASUREITEMSTRUCT) lParam;
Thiết lập itemWidth và itemHeight kích thước của item. Mục đích của hai thông số này chính là giới hạn vùng vẽ trong item. Hai thông số này bắt buộc phải được thiết lập. Sau khi thiết lập xong, hàm callback phải trả giá trị true;
Đối với WM_DRAWITEM
thông số lParam lúc này là con trỏ tới cấu trúc DRAWITEMSTRUCT
Mã:
typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; ULONG_PTR itemData;} DRAWITEMSTRUCT;
Khảo sát itemID để biết được chỉ mục của item cần vẽ, từ đó có thể vẽ được đúng item cần vẽ, còn hDC là device context của item, dùng giá trị này để vẽ hay nạp hình ảnh (sử dụng BitBlt chẳng hạn). Ngoài ra thông số itemAction và itemState cho bạn biết được trạng thái của item (item có được chọn hay không, cần vẽ thế nào). Cụ thể bạn hãy tra cứu tại đây: http://msdn.microsoft.com/en-us/libr...02(VS.85).aspx
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...