弹出菜单,居中显示
此示例展示以下控件的使用方法:
新弹出菜单控件MzPopupMenu使用流程
//创建新弹出菜单对象 MzPopupMenu TestPopupMenu; //加载图片 ImagingHelper *img = new ImagingHelper; img->LoadImageFromRes(GetMzResModuleHandle(), RT_RCDATA, MAKEINTRESOURCE(MZRES_IDR_PNG_SMILE), true, true); //设置弹出菜单的标题 TestPopupMenu.SetMenuTitle(L"MzPopupMenu_Title", img); //添加一个菜单项,名称为"text_STRING" TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 1, L"text_STRING"); //添加一个菜单项,名称为"text_CHECKED",同时设置其属性,属性列表参见MzPopupMenu.h TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 2, L"text_CHECKED", MZV2_MF_CHECKED); //获得弹出菜单的返回值 int result = TestPopupMenu.MzTrackPopupMenu(m_hWnd, TRUE); switch (result) { case MZV2_MID_MIN + 1: { //当第一个菜单项被点击要处理的事件 break; } case MZV2_MID_MIN + 2: { //当第二个菜单项被点击要处理的事件 break; } }
示例代码展示:
设置及显示弹出菜单
MzPopupMenu TestPopupMenu; ImagingHelper *img = new ImagingHelper; img->LoadImageFromRes(GetMzResModuleHandle(), RT_RCDATA, MAKEINTRESOURCE(MZRES_IDR_PNG_SMILE), true, true); // 初始化 MzPopupMenu 控件 TestPopupMenu.SetMenuTitle(L"MzPopupMenu_Title", img); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 1, L"text_STRING"); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 2, L"text_CHECKED", MZV2_MF_CHECKED); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 3, L"text_UNCHECKED", MZV2_MF_UNCHECKED); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 4, L"text_GRAYED", MZV2_MF_GRAYED); int result = TestPopupMenu.MzTrackPopupMenu(m_hWnd, TRUE);
设置相应菜单项的操作
switch (result) { case MZV2_MID_MIN + 1: { // 使用新UI消息框 MzMessageBoxV2(m_hWnd, L"MZV2_MF_STRING", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 2: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_CHECKED", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 3: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_UNCHECKED", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 4: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_GRAYED", MZV2_MB_OK, 0); break; } }
完整示例:
/************************************************************************/ /* * Copyright (C) Meizu Technology Corporation Zhuhai China * All rights reserved. * 中国珠海, 魅族科技有限公司, 版权所有. * * This file is a part of the Meizu Foundation Classes library. * Author: * Create on: 2009-12-07 */ /************************************************************************/ //请按照以步骤运行此实例代码: //首先, 打开VS2005/2008创建一个Win 32智能设备项目 //在项目向导中选择M8SDK, 并勾选空项目 //然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中 //最后,按照M8SDK的帮助文档,配置项目属性 //现在,可以运行此程序了 // 包含MZFC库的头文件 #include <mzfc_inc.h> //此代码演示了: // 创建和初始化应用程序 // 创建和初始化窗体 // 弹出菜单 MzPopupMenu 的使用及其命令消息的处理 // 弹出消息框 MzMessageAutoBoxWithImageV2 的使用 #define MZ_IDC_TOOLBARPRO 101 // 从 CMzWndEx 派生的主窗口类 class CSampleMainWnd : public CMzWndEx { MZ_DECLARE_DYNAMIC(CSampleMainWnd); public: UiToolBarPro m_TestToolBarPro; protected: // 窗口初始化 virtual BOOL OnInitDialog() { // 必须先调用基类的初始化 if (!CMzWndEx::OnInitDialog()) { return FALSE; } // 初始化 UiToolBarPro 控件 m_TestToolBarPro.SetID(MZ_IDC_TOOLBARPRO); m_TestToolBarPro.SetPos(0, GetHeight() - MZM_HEIGHT_TOOLBARPRO, GetWidth(), MZM_HEIGHT_TOOLBARPRO); m_TestToolBarPro.SetButton(TOOLBARPRO_LEFT_TEXTBUTTON, true, true, L"Exit"); m_TestToolBarPro.SetButton(TOOLBARPRO_RIGHT_TEXTBUTTON, true, true, L"PMenu"); AddUiWin(&m_TestToolBarPro); return TRUE; } // 重载 MZFC 的命令消息处理函数 virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { UINT_PTR id = LOWORD(wParam); switch(id) { case MZ_IDC_TOOLBARPRO: { int index = lParam; if (index == TOOLBARPRO_LEFT_TEXTBUTTON) { PostQuitMessage(0); } else if (index == TOOLBARPRO_RIGHT_TEXTBUTTON) { // 弹出菜单 MzPopupMenu TestPopupMenu; ImagingHelper *img = new ImagingHelper; img->LoadImageFromRes(GetMzResModuleHandle(), RT_RCDATA, MAKEINTRESOURCE(MZRES_IDR_PNG_SMILE), true, true); // 初始化 MzPopupMenu 控件 TestPopupMenu.SetMenuTitle(L"MzPopupMenu_Title", img); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 1, L"text_STRING"); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 2, L"text_CHECKED", MZV2_MF_CHECKED); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 3, L"text_UNCHECKED", MZV2_MF_UNCHECKED); TestPopupMenu.AppendMenuItem(MZV2_MID_MIN + 4, L"text_GRAYED", MZV2_MF_GRAYED); int result = TestPopupMenu.MzTrackPopupMenu(m_hWnd, TRUE); switch (result) { case MZV2_MID_MIN + 1: { // 使用新UI消息框 MzMessageBoxV2(m_hWnd, L"MZV2_MF_STRING", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 2: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_CHECKED", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 3: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_UNCHECKED", MZV2_MB_OK, 0); break; } case MZV2_MID_MIN + 4: { MzMessageBoxV2(m_hWnd, L"MZV2_MF_GRAYED", MZV2_MB_OK, 0); break; } } if (img) { delete img; img = NULL; } } break; } } } }; MZ_IMPLEMENT_DYNAMIC(CSampleMainWnd); // 从 CMzApp 派生的应用程序类 class CSampleMainApp : public CMzApp { public: // 应用程序的主窗口 CSampleMainWnd m_MainWnd; // 应用程序的初始化 virtual BOOL Init() { // 初始化 COM 组件 CoInitializeEx(0, COINIT_MULTITHREADED); // 创建主窗口 RECT rcWork = MzGetWorkArea(); m_MainWnd.Create(rcWork.left, rcWork.top, RECT_WIDTH(rcWork), RECT_HEIGHT(rcWork), 0, 0, 0); m_MainWnd.SetBgColor(MzGetThemeColor(TCI_WINDOW_BG)); m_MainWnd.Show(); // 成功则返回 TRUE return TRUE; } }; // 全局的应用程序对象 CSampleMainApp theApp;