Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Đưa hình ảnh vào listbox

    Các pác cho em hỏi tý nha.
    Tạo một project bằng Win32 Applycation, trong đó có 2 listbox. Bây giờ em muốn đưa hình ảnh vào 2 listbox đó thì phải làm thế nào. Nếu đưa vào được rồi thì khi click vào hình ảnh trong listbox này hình ảnh đó hiển thị ở listbox kia, muốn vậy phải làm sao.
    Mong các pác chỉ dùm. Cảm ơn nhiều.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    để đư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

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •