65.9K
CodeProject 正在变化。 阅读更多。
Home

WTL - 按钮菜单 2

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.33/5 (2投票s)

2000年9月12日

viewsIcon

52406

downloadIcon

1475

使用带下拉菜单的按鈕

更新于2001年3月18日。现在增加了键盘和焦点提示(仅适用于W2k/Me)

  • 下载源代码文件 - 4 Kb
  • 下载演示项目 - 16.5 Kb
  • Sample Image - MenuBtn.gif

    引言

    这段代码基于 Norm Almond David Peterson 撰写的文章。

    为什么要写一个新的?我需要一个像推按钮一样**完全**工作的菜单按钮。我相信我做到了。

    尽管如此,我的按钮不如 Norm Almond 的按钮那么酷。我的意思是,没有用于显示位图的代码。你可以自由地自己添加它,或者从 Norm Almond 的文章中借用。

    实现

    我开发了两个类:CMenuButtonCAutoMenuButtonCAutoMenuButtonMCMenuButton 相同,但将它的标题作为第一个和默认的菜单项添加。这是一种很有用的行为,不是吗?

    如何使用

    首先,让你的类支持通知消息的反射

    BEGIN_MSG_MAP(CMainDlg)
       MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
       COMMAND_ID_HANDLER(IDOK, OnOK)
       COMMAND_RANGE_HANDLER(ID_FILE_NEW, ID_FILE_CLOSE, OnFileCmd)
       <U>REFLECT_NOTIFICATIONS()</U>
    END_MSG_MAP()

    然后,声明你的按钮

       WTLEX::CAutoMenuButton   m_ctlOK;
       WTLEX::CMenuButton       m_ctlButtons[4];

    并为其分配一个ID

       m_ctlOK = GetDlgItem(IDOK);
    
       for(int i = 0; i < 4; i++)
       {
          m_ctlButtons[i] = GetDlgItem(IDC_NORMAL + i); 
          m_ctlButtons[i].SetMenuID(IDR_BTNMENU);
       }

    当你通过构造函数提供ID时,不需要调用SetMenuID

       CMainDlg() : m_ctlOK(IDR_BTNMENU)
       {
       }

    就是这样:)

    © . All rights reserved.