文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MFC 添加动态菜单

MFC 添加动态菜单

时间:2010-12-31  来源:宇智波Q

每个菜单项添加一个ID,因为弹出菜单有几项是不确定的,所以不能逐一添加菜单响应函数,而是将命令都映射到

如下类型的函数中,UINT nID为添加菜单项是设置的ID。依据该ID来判断用户点击的是哪个菜单项。

  void OnShowMember(UINT nID)

// popMenuDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "popMenu.h"
#include "popMenuDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// windows各个资源都有一个ID,这里1100-1200给弹出菜单预留
const int       MENU_START      =       1100;
const int       MENU_END                =       1200;
CpopMenuDlg::CpopMenuDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CpopMenuDlg::IDD, pParent)
{
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CpopMenuDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CpopMenuDlg, CDialog)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        //}}AFX_MSG_MAP
        ON_BN_CLICKED(IDC_BUTTON1, &CpopMenuDlg::OnBnClickedButton1)
       // 将MENU_START ~ MENU_END范围的命令映射到单个消息函数
        ON_COMMAND_RANGE(MENU_START, MENU_END, &CpopMenuDlg::OnShowMember)
END_MESSAGE_MAP()


// CpopMenuDlg 消息处理程序
void CpopMenuDlg::OnShowMember(UINT nID)
{
        int nIndex = nID - MENU_START;
        GetDlgItem(IDC_STATIC_MEMBER)->SetWindowText(m_MemberList[nIndex]);
}

BOOL CpopMenuDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // 成员初始化
        m_MemberList.Add(_T("宇智波Q"));
        m_MemberList.Add(_T("宇智波左助"));
        m_MemberList.Add(_T("宇智波斑"));
        m_MemberList.Add(_T("宇智波柚"));

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CpopMenuDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
        }
        else
        {
                CDialog::OnSysCommand(nID, lParam);
        }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CpopMenuDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // 用于绘制的设备上下文

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                // 使图标在工作矩形中居中
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;

                // 绘制图标
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
        }
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CpopMenuDlg::OnQueryDragIcon()
{
        return static_cast<HCURSOR>(m_hIcon);
}

void CpopMenuDlg::OnBnClickedButton1()
{
       POINT pt;
        ::GetCursorPos(&pt);

        // 创建弹出菜单
        CMenu  popMenu;
        popMenu.CreatePopupMenu();
        // 添加菜单项
        for(int i = 0;  i < m_MemberList.GetCount(); ++i)
        {
                popMenu.AppendMenu(MF_STRING, MENU_START + i, m_MemberList[i]);
        }
        // 弹出菜单
        popMenu.TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);
        popMenu.DestroyMenu();
}

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载