表格式弹出菜单
此示例展示以下控件的使用方法:
表格式菜单MzGridMenu 使用流程
MzGridMenu m_GridMenu;
//添加菜单项,第一个参数是ID,第二个是文字标签,第三个是正常图标,第四个是按下图标 m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM1, L"Select", m_selImg, m_selImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM2, L"DownLoad", m_dImg, m_dImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM3, L"Cancel", m_celImg, m_celImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM4, L"Search", m_secImg, m_secImgPrs);
switch(LOWORD(wParam)) { //处理菜单按钮被按下时的事件 case MZ_IDC_GRIDMENU_ITEM1: { } case MZ_IDC_GRIDMENU_ITEM2: { } case MZ_IDC_GRIDMENU_ITEM3: { } case MZ_IDC_GRIDMENU_ITEM4: { } }
示例代码展示:
设置及显示弹出菜单
// 初始化 MzGridMenu 控件 m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM1, L"Select", m_selImg, m_selImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM2, L"DownLoad", m_dImg, m_dImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM3, L"Cancel", m_celImg, m_celImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM4, L"Search", m_secImg, m_secImgPrs);
else if (index == TOOLBARPRO_RIGHT_TEXTBUTTON) { // 使用对话框方式弹出 GridMenu if (m_GridMenu.IsContinue()) { m_GridMenu.EndGridMenu(); } else { m_GridMenu.TrackGridMenuDialog(m_hWnd, MZM_HEIGHT_TOOLBARPRO); } }
在 OnMzCommand 函数处理 MzGridMenu 控件的命令消息
// 处理 GridMenu 的命令消息 case MZ_IDC_GRIDMENU_ITEM1: { // 使用新UI消息框 MzMessageBoxV2(m_hWnd, L"You pressed the Select button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM2: { MzMessageBoxV2(m_hWnd, L"You pressed the DownLoad button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM3: { MzMessageBoxV2(m_hWnd, L"You pressed the Cancel button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM4: { MzMessageBoxV2(m_hWnd, L"You pressed the Search button!", MZV2_MB_OK); 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> //此代码演示了: // 创建和初始化应用程序 // 创建和初始化窗体 // 弹出表格式菜单 MzGridMenu 的使用及其命令消息的处理 // 弹出消息框 MzMessageBoxV2 的使用 #define MZ_IDC_TESTTOOLBAR 101 #define MZ_IDC_GRIDMENU_ITEM1 1 #define MZ_IDC_GRIDMENU_ITEM2 2 #define MZ_IDC_GRIDMENU_ITEM3 3 #define MZ_IDC_GRIDMENU_ITEM4 4 // 从 CMzWndEX 派生的主窗口类 class CSampleMainWnd : public CMzWndEx { MZ_DECLARE_DYNAMIC(CSampleMainWnd); public: UiToolBarPro m_ToolBarPro; MzGridMenu m_GridMenu; ImageContainer m_imgContainer; protected: // 窗口初始化 virtual BOOL OnInitDialog() { // 必须先调用基类的初始化 if (!CMzWndEx::OnInitDialog()) { return FALSE; } // 初始化 UiToolBarPro 控件 m_ToolBarPro.SetID(MZ_IDC_TESTTOOLBAR); m_ToolBarPro.SetPos(0, GetHeight() - MZM_HEIGHT_TOOLBARPRO, GetWidth(), MZM_HEIGHT_TOOLBARPRO); m_ToolBarPro.SetButton(TOOLBARPRO_LEFT_TEXTBUTTON, true, true, L"Exit"); m_ToolBarPro.SetButton(TOOLBARPRO_RIGHT_TEXTBUTTON, true, true, L"GMenu"); AddUiWin(&m_ToolBarPro); ImagingHelper* m_selImg = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_TICK, true); ImagingHelper* m_selImgPrs = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_TICK_PRESSED, true); ImagingHelper* m_dImg = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_DOWNLOAD, true); ImagingHelper* m_dImgPrs = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_DOWNLOAD_PRESSED, true); ImagingHelper* m_celImg = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_CANCEL, true); ImagingHelper* m_celImgPrs = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_CANCEL_PRESSED, true); ImagingHelper* m_secImg = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_SEARCH, true); ImagingHelper* m_secImgPrs = m_imgContainer.LoadImage(GetMzResV2ModuleHandle(), MZRESV2_IDR_PNG_SEARCH_PRESSED, true); // 初始化 MzGridMenu 控件 m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM1, L"Select", m_selImg, m_selImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM2, L"DownLoad", m_dImg, m_dImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM3, L"Cancel", m_celImg, m_celImgPrs); m_GridMenu.AppendMenuItem(MZ_IDC_GRIDMENU_ITEM4, L"Search", m_secImg, m_secImgPrs); return TRUE; } // 重载 MZFC 的命令消息处理函数 virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { UINT_PTR id = LOWORD(wParam); switch (id) { case MZ_IDC_TESTTOOLBAR: { int index = lParam; if (index == TOOLBARPRO_LEFT_TEXTBUTTON) { if (m_GridMenu.IsContinue()) { m_GridMenu.EndGridMenu(); } PostQuitMessage(0); } else if (index == TOOLBARPRO_RIGHT_TEXTBUTTON) { // 使用对话框方式弹出 GridMenu if (m_GridMenu.IsContinue()) { m_GridMenu.EndGridMenu(); } else { m_GridMenu.TrackGridMenuDialog(m_hWnd, MZM_HEIGHT_TOOLBARPRO); } } break; } // 处理 GridMenu 的命令消息 case MZ_IDC_GRIDMENU_ITEM1: { // 使用新UI消息框 MzMessageBoxV2(m_hWnd, L"You pressed the Select button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM2: { MzMessageBoxV2(m_hWnd, L"You pressed the DownLoad button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM3: { MzMessageBoxV2(m_hWnd, L"You pressed the Cancel button!", MZV2_MB_OK); break; } case MZ_IDC_GRIDMENU_ITEM4: { MzMessageBoxV2(m_hWnd, L"You pressed the Search button!", MZV2_MB_OK); break; } } } // 重载 OnLButtonDown 在点击主窗口时隐藏弹出窗口 void OnLButtonDown(UINT fwKeys, int xPos, int yPos) { if (yPos < (GetHeight() - MZM_HEIGHT_TOOLBARPRO)) { if (m_GridMenu.IsContinue()) { m_GridMenu.EndGridMenu(); } } } }; 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;