Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Thêm sự kiện khi Click Phải Chuột???

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    188

    Mặc định Thêm sự kiện khi Click Phải Chuột???

    Không viết câu hỏi có đúng không nữa, mong các bạn thông cảm!
    Mình có một List_Ctrl, hiển thị các danh sách.
    Mình muốn khi Click phải chuột lên một dòng thì Hiện lên các lệnh như: Delete, Add,... thì phải làm thế nào??

    Xin cảm ơn các bạn!

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mình không rành lắm về phần controls.

    Nếu bạn dùng MFC ( thường là thế để dj UI ) thì mình nghĩ có 2 cách :

    1 là bạn xử lí trong PreTranslateMsg của ListBox.
    2 là bạn tạo class inherit từ ListBox này và bắt sự kiện RightButtonDown.

    Tạo 1 popup menu rồi attach vào.

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Xử lý sự kiện NM_RCLICK :http://msdn.microsoft.com/en-us/libr...73(VS.85).aspx , khi sự kiện này xuất hiện, cậu cho hiện 1 popup menu với các lựa chọn ... Add, Delete tương ứng .
    Đã được chỉnh sửa lần cuối bởi Tab : 16-02-2009 lúc 11:01 PM. Lý do: Sửa lại liên kết
    What you see is never what you get...

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    188

    Mình đã làm được khi bắt sự kiện Right Click.
    Nhưng có điều này muốn hỏi các bạn.
    Khi mình chọn "Delete" hoặc "Add" thì làm sao bắt được sự kiện Delete hay Add ?
    Thứ hai là khi Right Click, 2 dòng "Delete" và "Add" mình muốn hiển thị kế bên chuột thì làm thế nào?? Trong đoạn Code dưới đây thì nó hiển thị góc màn hình.

    Code trong sự kiện RightClick
    Code:
    CMenu menu;
    	CPoint pt;
    	::GetCursorPos( &pt);
    
    	menu.CreatePopupMenu();
    	menu.AppendMenu( MF_STRING, 0, _T("Delete"));
    	menu.AppendMenu( MF_STRING, 1, _T("Add"));
    
    	menu.TrackPopupMenu( TPM_LEFTALIGN, pt.x, pt.y, this);

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    ::GetCursorPos( &pt);

    Bạn coi làm hàm này nó lấy tọa độ chuột so với ..

    Mình quên mấy cái hàm này rồi, bực thật, tối về mình code mai send lên cho bạn ok ?

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Mặc định Thêm sự kiện khi Click Phải Chuột???

    Mình đã làm được khi bắt sự kiện Right Click.
    Nhưng có điều này muốn hỏi các bạn.
    Khi mình chọn "Delete" hoặc "Add" thì làm sao bắt được sự kiện Delete hay Add ?
    Thứ hai là khi Right Click, 2 dòng "Delete" và "Add" mình muốn hiển thị kế bên chuột thì làm thế nào?? Trong đoạn Code dưới đây thì nó hiển thị góc màn hình.
    Theo mình thì bạn nên giải quyết vấn đề này theo cách đơn giản sau.

    Giả sử bạn tạo Dialog based app.

    Đầu tiên bạn tạo handler cho WM_CONTEXTMENU.
    Sau đó khai báo một biến member m_contextMenu chẳng hạn.
    Tiếp theo dùng resource editor tạo một menu resource.
    Tiếp theo tạo các event handler cho các menu item đó trong lớp main dialog.
    Cuối cùng trong handler của WM_CONTEXTMENU bạn kiểm tra xem có phải event WM_CONTEXTMENU là của list view không, nếu phải thì gọi m_menuContext.GetSubMenu(0)->TrackPopupMenu(...).

    Nếu bạn vẫn chưa làm đc mình sẽ up sample cho (VS2008)

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Đã có hẳn event cho sự kiện Right Click vào List View là NM_RCLICK, sao phải đi lòng vòng như vậy làm gì ?
    Của cậu đơn giản chỉ là việc tạo ra 1 menu trên Resource với định danh IDR_MENU1 với 2 tùy chọn Add và Delete , sau đó đưa code này vào sự kiện NM_RCLICK :
    Visual C++ Code:
    1. CMenu menu;
    2. menu.LoadMenuW(IDR_MENU1);
    3. CMenu *PopMenu = menu.GetSubMenu(0);
    4. CPoint pt;
    5. GetCursorPos(&pt);
    6. PopMenu->TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON |
    7.                   TPM_LEFTALIGN, pt.x, pt.y, AfxGetMainWnd(), NULL);
    Đã được chỉnh sửa lần cuối bởi Tab : 16-02-2009 lúc 11:05 PM.
    What you see is never what you get...

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    @NgocBick : nếu bắt như NgocBich thì liệu có delete được ko ?
    @ All:

    Chủ topic làm được cái BM_RCLICK rồi mà ? Chỉ còn dính dáng đếp popup menu thôi.

    Cái chủ topic sai là chưa chuyển sang tọa độ chuột so với chương trình.

    hình như ScreenToClient(&pt) nữa thì ok.

  9. #9
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Cậu ta bắt Right Click trên Dialog tức là sự kiện này sẽ phát sinh Popup menu ngoài vùng List View Control .
    What you see is never what you get...

  10. #10
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Đã có hẳn event cho sự kiện Right Click vào List View là NM_RCLICK, sao phải đi lòng vòng như vậy làm gì ?
    Mình k nghĩ đó là lòng vòng.

    Chỉ cần bắt sự kiện WM_CONTEXTMENU

    C++ Code:
    1. void CMFCAppDlg::OnContextMenu(CWnd* pWnd, CPoint point)
    2. {
    3.     if(*pWnd==m_lstView)
    4.     {  
    5.         m_menuContext.GetSubMenu(0)->TrackPopupMenu
    6.             (TPM_LEFTALIGN,
    7.             point.x,
    8.             point.y,
    9.             this
    10.             );
    11.     }
    12. }

    Nếu làm thế này sẽ tạo menu context cho tất cả các control chỉ trong một handler này mà thôi. Việc của bạn chỉ là kiểm tra pWnd để xác định control cần tạo menu context.
    @NgocBick : nếu bắt như NgocBich thì liệu có delete được ko ?
    Như mình đã nói bên trên.

    ========================
    Tiện đây mình làm qua cái sample bạn nào muốn tham khảo thì xem nhé.
    Các bạn xem thì sẽ thấy nó rất dễ làm thôi. Cái sample code = VC6, làm context menu cho listbox (cho nhanh mà)
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi ngocbig™ : 17-02-2009 lúc 02:08 PM.

Các đề tài tương tự

  1. Lập trình C++ Lấy tên ỗ đĩa khi click chuột phải ?
    Gửi bởi tanbmuit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 25-07-2013, 08:45 AM
  2. Cách click chuột mà không phải rê chuột
    Gửi bởi giant.haboob trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 23-06-2013, 08:33 PM
  3. Làm sao để click chuột phải vẫn chọn được button như click chuộtt tráii
    Gửi bởi michinin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 14-04-2013, 02:41 PM
  4. Làm sao để ép chuột phải click vào một button trong C#
    Gửi bởi chickcoder trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 11-03-2013, 04:00 PM
  5. C# làm sao bắt được sự kiện chuột phải khi click?[Click, not kích)
    Gửi bởi qhhqnavy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 28-04-2011, 10:10 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn