MzPopupMenu菜单的示例(25_MzPopupMenu)

弹出菜单,居中显示

此示例展示以下控件的使用方法:

新弹出菜单控件MzPopupMenu使用流程

示例代码展示:

25_MzPopupMenu_1.png

设置及显示弹出菜单

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;

Generated at Tue Feb 9 15:09:55 2010 for Meizu M8 SDK Documentation by  doxygen 1.6.1