Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: [VC++] Enable/Disable menu hoặc button trên toolbar

  1. #1
    Ngày gia nhập
    06 2007
    Bài viết
    18

    Question [VC++] Enable/Disable menu hoặc button trên toolbar

    Các bạn cho mình hỏi cái là VC++ sử dụng cơ chế gì để enable/disable một menu hoặc button trên toolbar? Ví dụ button Print chẳng hạn, ở toolbar chính, khi chưa mở file nào ra thì nó mờ đi và hiện sáng lên khi một file được mở. Mình đã tạo một menu mới, được gọi ra khi một file ảnh được mở. Nhưng khi mở file ảnh ra thì menu và toolbar vẫn bị disable. Mình đang dùng cách này nhưng không được:

    Code:
    CMenu menu; /* Main menu */
    CMenu* pContextMenu;
    menu.LoadMenu(IDR_TVMCONTEXTMENU); /* IDR_TVMCONTEXTMENU is main menu resource ID */
    //Get sub menu
    pContextMenu = menu.GetSubMenu(0);
    // Enabling menu item
    pContextMenu->EnableMenuItem(IDR_MANU1, MF_BYCOMMAND|MF_ENABLED);
    // Disabling menu item
    pContextMenu->EnableMenuItem(IDR_MANU1, MF_BYCOMMAND|MF_DISABLED);
    Vouloir C'est pouvoir

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Bạn thử cái này xem :
    Code:
    CMenu* pMenu = GetMenu();	// Get dlg menu
    pMenu->EnableMenuItem(ID_FILE_OPEN,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);	// Disable menu item with ID = ID_FILE_OPEN and set status = GRAYED
    
    // +++++ The most importance is here!+++++
    SetMenu(pMenu);
    // +++++

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    179

    nó không báo lỗi, nhưng chạy đến dòng đó thì lỗi
    trong file afxwin1.inl
    Code:
    _AFXWIN_INLINE UINT CMenu::EnableMenuItem(UINT nIDEnableItem, UINT nEnable)
    	{ ASSERT(::IsMenu(m_hMenu)); return ::EnableMenuItem(m_hMenu, nIDEnableItem, nEnable); }
    m_hMenu không xác định được. Mong được chỉ giáo. Cảm ơn

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

    Có vẻ bạn bị bug này khi Enable MenuItem trên một Popup Menu ?

  5. #5
    Ngày gia nhập
    03 2007
    Bài viết
    179

    không phải popup Menu, mà là menu chính. Mong ai biết chỉ giúp

  6. #6
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Mặc định [VC++] Enable/Disable menu hoặc button trên toolbar

    Chào em Hạ,
    1. BOOL EnableMenuItem
    2. (
    3.     HMENU hMenu,
    4.     UINT uIDEnableItem,
    5.     UINT uEnable
    6. );
    Khi em ko xài MFC class CMenu
    Thì để làm dc việc này, em xài hàm trên (nhớ ::trước hàm để nó khỏi báo lỗi lung tung, do ta đang xài api trong MFC)
    Hàm này đỏi hỏi em cung cấp 1 hMenu, Và MenuItemID và uEnable là MF_ENABLED
    hMenu Có thể có dc thông wa việc GetMenu để có dc hMenu
    Code:
    HMENU GetMenu
    (          
        HWND hWnd
    );
    trong đó hWnd là Window mà bạn muốn lấy menu. Giá trị trả về là hMenu.

    Thế là dc.
    Tuy nhiên theo anh đoán thì chắc em đang xài MFC, thì khi đó CMenu class có đóng gói hết những hàm này, có lun method EnableMenuItem, nhưng khi xài nó thì ko cần cung cấp hMenu vì bản thi class đã hold nó rồi. Chỉ cần cung cấp item id, và Cờ thôi.
    Ko biết có chính xác ko vì ko có VC ở đây để kiểm tra.
    Thèm khát con gái !!
    ......................

  7. #7
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Cảm ơn Cuxu, mình là Hà.
    Và hàm GetMenu() báo lỗi :
    Code:
    Error	1	error C2440: 'initializing' : cannot convert from 'CMenu *' to 'HMENU'

    Cám ơn các bạn

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Hic, em đang gặp phải 1 vấn đề nghiêm trọng. Em đang lẫn lộn giửa các lớp mà MFC cung cấp và các API.
    Nếu em chỉ xài lớp CMenu để làm việc với menu thì em nên theo đó mà làm.
    Lỗi của em là em xài Hàm GetMenu() nó trả về HMENU, ko phải là 1 Class, nếu muốn dc thể em phải Khai bao pointer đến class, rồi mới là dc điều đó. ()
    CMenu menu;
    menu.LoadMenu(IDMenu).
    menu.EnableMenuItem(IDItemMenu,MF_ENABLED);
    thế là xong
    Còn nếu em muốn làm việc mà ko xài lớp CMenu
    thì như sau
    HMENU hMenu = ::GetMenu(m_hwnd/*Handle của window*/); //Hoặc là GetMenu(); vì đang trong lớp CDialog, nên nó có method này để làm việc lun;
    EnableMenuItem(hMenu,IDITem,MF_ENABLED);
    Đã được chỉnh sửa lần cuối bởi cuxu : 05-03-2008 lúc 09:50 AM.
    Thèm khát con gái !!
    ......................

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

  1. Send sự kiện click hoặc press đến 1 nút trên toolbar của cửa sổ khác
    Gửi bởi sieudaochichqqq trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 14
    Bài viết cuối: 23-12-2012, 10:33 PM
  2. Algorithm Làm sao để disable/enable bàn phìm và chuột ?
    Gửi bởi lthict trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-08-2012, 12:03 AM
  3. Enable button lại sau khi đã Disable
    Gửi bởi 0nly trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 13-05-2011, 05:08 PM
  4. Sử dụng enable/disable button với lập trình C#
    Gửi bởi anhtai063 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 11-01-2011, 11:53 AM
  5. MFC Làm Mờ Menu hoặc Button của Giao diện
    Gửi bởi honey trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 04-09-2009, 08:56 AM

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