其他控件示例
此示例展示以下控件的使用方法:
自定义列表控件UiList样式的流程
class MyList:public UiList { //重载DrawItem() }
//设置当前区域在prcItem(RECT*型)的背景为选中状态,hdcDst为设备的上下文句柄 MzDrawSelectedBg(hdcDst, prcItem); //设置区域内设备的值,最后一个参数表示为格式 MzDrawText(hdcDst, pItem->Text.C_Str(), &rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); //pimg为ImagingHelper对象,本句表示将ImagingHelper对象表示的图像加入设备中去 pimg->Draw(hdcDst, &rcImg, false, false);
按钮扩展控件UiButtonEx使用流程
UiButtonEx m_BtnSetting1;
//设置按钮的左边文字 m_BtnSetting1.SetText(L"Property 1"); //设置按钮的右边文字 m_BtnSetting1.SetText2(L"Property value 1"); //添加图像对象,后面例子有详述 ImagingHelper *imgArrow = m_ImageContainer.LoadImage(GetMzResModuleHandle(), MZRES_IDR_PNG_ARROW_RIGHT, true); //添加按钮右边图像 m_BtnSetting1.SetImage2(imgArrow); //设置按钮右边图像的宽度 m_BtnSetting1.SetImageWidth2(imgArrow->GetImageWidth()); //设置按钮右边图像是否显示 m_BtnSetting1.SetShowImage2(true); //添加图像对象 ImagingHelper *imgVCARD = m_ImageContainer.LoadImage(MzGetInstanceHandle(),IDR_PNG_VCARD, true); //添加按钮左边图像 m_BtnSetting1.SetImage1(imgVCARD); //设置按钮左边图像的宽度 m_BtnSetting1.SetImageWidth1(imgVCARD->GetImageWidth()); //设置按钮左边图像是否显示 m_BtnSetting1.SetShowImage1(true);
弹出菜单CPopupMenu使用流程
#define IDC_PPM_OK 103 #define IDC_PPM_CANCEL 104
//定义弹出菜单变量 CPopupMenu ppm; //定义子项结构变量 struct PopupMenuItemProp pmip; //定义子项按钮样式,详见MzControlDefs.h pmip.itemCr = MZC_BUTTON_PELLUCID; //定义子项按钮ID pmip.itemRetID = IDC_PPM_CANCEL; //定义子项按钮标题 pmip.str = L"Cancel"; //添加 ppm.AddItem(pmip);
//建立窗口,Create()函数我们以前就见过 ppm.Create(rc.left,rc.top,RECT_WIDTH(rc),RECT_HEIGHT(rc),m_hWnd,0,WS_POPUP); //得到窗口的返回值 int nID = ppm.DoModal(); if (nID==IDC_PPM_CANCEL) { //处理窗口返回后的事件 }
示例代码展示:
从 UiList 派生的自定义列表类:
class MyList: public UiList { public: protected: private: };
重载DrawItem,自定义每一项的绘制:
void DrawItem(HDC hdcDst, int nIndex, RECT* prcItem, RECT *prcWin, RECT *prcUpdate) { // 绘制选中项的高亮背景 if (nIndex == GetSelectedIndex()) { MzDrawSelectedBg(hdcDst, prcItem); } // 加载小图标 ImagingHelper *pimg = m_container.LoadImage(MzGetInstanceHandle(), IDR_PNG_SMS, true); RECT rcImg = *prcItem; rcImg.right = rcImg.left + MZM_MARGIN_MAX*2; if (pimg) { // 在左边画一个小图标 pimg->Draw(hdcDst, &rcImg, false, false); } // 绘制文本 RECT rcText = *prcItem; rcText.left = rcImg.right; ListItem* pItem = GetItem(nIndex); if (pItem) { MzDrawText(hdcDst, pItem->Text.C_Str(), &rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); } }
/************************************************************************/ /* * Copyright (C) Meizu Technology Corporation Zhuhai China * All rights reserved. * 中国珠海, 魅族科技有限公司, 版权所有. * * This file is a part of the Meizu Foundation Classes library. * Author: Michael * Create on: 2008-12-22 */ /************************************************************************/ //请按照以步骤运行此实例代码: //首先, 打开VS2005/2008创建一个Win 32智能设备项目 //在项目向导中选择M8SDK, 并勾选空项目 //然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中 //最后,按照M8SDK的帮助文档,配置项目属性 //现在,可以运行此程序了 //包含MZFC库的头文件 #include <mzfc_inc.h> //此代码演示了: // 创建和初始化应用程序 // 创建和初始化窗体 // 控件的显示、隐藏, // 文字按钮工具条、弹出菜单、消息框的使用 // 列表控件的使用(从 UiList 派生),并处理它的鼠标通知消息MZ_WM_MOUSE_NOTIFY // 扩展按钮 UiButtonEx 的使用 // 图像的加载与绘制(使用ImagingHelper) // 窗口切换动画的使用 // UiList派生类的使用 // UiScrollWin滚动容器控件的使用 #define MZ_IDC_LIST 101 #define MZ_IDC_TOOLBAR1 102 #define IDC_PPM_OK 103 #define IDC_PPM_CANCEL 104 #define MZ_IDC_SCROLLWIN 105 #include "resource.h" // 从 UiList 派生的自定义列表类 class MyList: public UiList { public: // 重载DrawItem,自定义每一项的绘制 void DrawItem(HDC hdcDst, int nIndex, RECT* prcItem, RECT *prcWin, RECT *prcUpdate) { // 绘制选中项的高亮背景 if (nIndex == GetSelectedIndex()) { MzDrawSelectedBg(hdcDst, prcItem); } // 加载小图标 ImagingHelper *pimg = m_container.LoadImage(MzGetInstanceHandle(), IDR_PNG_SMS, true); RECT rcImg = *prcItem; rcImg.right = rcImg.left + MZM_MARGIN_MAX*2; if (pimg) { // 在左边画一个小图标 pimg->Draw(hdcDst, &rcImg, false, false); } // 绘制文本 RECT rcText = *prcItem; rcText.left = rcImg.right; ListItem* pItem = GetItem(nIndex); if (pItem) { MzDrawText(hdcDst, pItem->Text.C_Str(), &rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); } } protected: private: ImageContainer m_container; }; // 从 CMzWndEx 派生的弹出窗口 class MyWnd: public CMzWndEx { MZ_DECLARE_DYNAMIC(MyWnd); public: protected: UiScrollWin m_ScrollWin; UiToolbar_Text m_Toolbar; UiCaption m_Caption1; UiCaption m_Caption2; UiButtonEx m_BtnSetting1; UiButtonEx m_BtnSetting2; UiButtonEx m_BtnSetting3; UiButtonEx m_BtnSetting4; UiButtonEx m_BtnSetting5; UiButtonEx m_BtnSetting6; UiButtonEx m_BtnSetting7; UiButtonEx m_BtnSetting8; UiButtonEx m_BtnSetting9; UiButtonEx m_BtnSetting10; ImageContainer m_ImageContainer; // 窗口的初始化 virtual BOOL OnInitDialog() { // 必须先调用基类的初始化 if (!CMzWndEx::OnInitDialog()) { return FALSE; } // 初始化窗口中的控件 m_ScrollWin.SetPos(0,0,GetWidth(),GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR); m_ScrollWin.SetID(MZ_IDC_SCROLLWIN); m_ScrollWin.EnableScrollBarV(true); AddUiWin(&m_ScrollWin); int y = 0; m_Caption1.SetPos(0,y,GetWidth(),MZM_HEIGHT_CAPTION); m_Caption1.SetText(L"Basic settings"); m_ScrollWin.AddChild(&m_Caption1); y+=MZM_HEIGHT_CAPTION; m_BtnSetting1.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting1.SetText(L"Property 1"); m_BtnSetting1.SetText2(L"Property value 1"); m_BtnSetting1.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting1); // 扩展按钮 m_BtnSetting1 右边的小图标 ImagingHelper *imgArrow = m_ImageContainer.LoadImage(GetMzResModuleHandle(), MZRES_IDR_PNG_ARROW_RIGHT, true); m_BtnSetting1.SetImage2(imgArrow); m_BtnSetting1.SetImageWidth2(imgArrow->GetImageWidth()); m_BtnSetting1.SetShowImage2(true); // 扩展按钮 m_BtnSetting1 左边的小图标 ImagingHelper *imgVCARD = m_ImageContainer.LoadImage(MzGetInstanceHandle(),IDR_PNG_VCARD, true); m_BtnSetting1.SetImage1(imgVCARD); m_BtnSetting1.SetImageWidth1(imgVCARD->GetImageWidth()); m_BtnSetting1.SetShowImage1(true); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting2.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting2.SetText(L"Property 2"); m_BtnSetting2.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting2); // 扩展按钮 m_BtnSetting2 左边的小图标 ImagingHelper *imgSMS2 = m_ImageContainer.LoadImage(MzGetInstanceHandle(),IDR_PNG_SMS2, true); m_BtnSetting2.SetImage1(imgSMS2); m_BtnSetting2.SetImageWidth1(imgSMS2->GetImageWidth()); m_BtnSetting2.SetShowImage1(true); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting3.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting3.SetText(L"Property 3"); m_BtnSetting3.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting3); y+=MZM_HEIGHT_BUTTONEX; m_Caption2.SetPos(0,y,GetWidth(),MZM_HEIGHT_CAPTION); m_Caption2.SetText(L"Advanced settings"); m_ScrollWin.AddChild(&m_Caption2); y+=MZM_HEIGHT_CAPTION; m_BtnSetting4.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting4.SetText(L"Property 4"); m_BtnSetting4.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting4); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting5.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting5.SetText(L"Property 5"); m_BtnSetting5.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting5); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting6.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting6.SetText(L"Property 6"); m_BtnSetting6.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting6); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting7.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting7.SetText(L"Property 7"); m_BtnSetting7.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting7); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting8.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting8.SetText(L"Property 8"); m_BtnSetting8.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting8); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting9.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting9.SetText(L"Property 9"); m_BtnSetting9.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting9); y+=MZM_HEIGHT_BUTTONEX; m_BtnSetting10.SetPos(0,y,GetWidth(),MZM_HEIGHT_BUTTONEX); m_BtnSetting10.SetText(L"Property 10"); m_BtnSetting10.SetButtonType(MZC_BUTTON_LINE_BOTTOM); m_ScrollWin.AddChild(&m_BtnSetting10); m_Toolbar.SetPos(0,GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR,GetWidth(),MZM_HEIGHT_TEXT_TOOLBAR); m_Toolbar.SetButton(0, true, true, L"Cancel"); m_Toolbar.EnableLeftArrow(true); m_Toolbar.SetButton(2, true, true, L"Save"); m_Toolbar.SetID(MZ_IDC_TOOLBAR1); AddUiWin(&m_Toolbar); return TRUE; } // 重载 MZFC 的命令消息处理函数 virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { UINT_PTR id = LOWORD(wParam); switch(id) { case MZ_IDC_TOOLBAR1: { int nIndex = lParam; if (nIndex==0) { // 退出模态对话框 EndModal(ID_CANCEL); return ; } if (nIndex==2) { //保存设置... // 退出模态对话框 EndModal(ID_OK); return; } } } } private: }; MZ_IMPLEMENT_DYNAMIC(MyWnd) // 从 CMzWndEx 派生的主窗口类 class CSample1MainWnd: public CMzWndEx { MZ_DECLARE_DYNAMIC(CSample1MainWnd); public: UiToolbar_Text m_Toolbar; // 列表控件 MyList m_List; protected: // 窗口的初始化 virtual BOOL OnInitDialog() { // 必须先调用基类的初始化 if (!CMzWndEx::OnInitDialog()) { return FALSE; } // 初始化窗口中的控件 m_List.SetPos(0,0,GetWidth(),GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR); m_List.SetID(MZ_IDC_LIST); m_List.EnableScrollBarV(true); m_List.EnableNotifyMessage(true); m_List.SetItemHeight(90); m_List.SetTextColor(RGB(255,0,0)); AddUiWin(&m_List); // 往列表控件添加项 CMzString str(128); wchar_t *buf = L"List item %d"; ListItem li; for (int i=0;i<50;i++) { wsprintf(str.C_Str(), buf, i); li.Text = str; m_List.AddItem(li); } m_Toolbar.SetPos(0,GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR,GetWidth(),MZM_HEIGHT_TEXT_TOOLBAR); m_Toolbar.SetButton(0, true, true, L"Exit"); m_Toolbar.SetButton(1, true, true, L"Delete"); m_Toolbar.SetButton(2, true, true, L"Setting"); m_Toolbar.SetID(MZ_IDC_TOOLBAR1); AddUiWin(&m_Toolbar); return TRUE; } // 重载 MZFC 的消息处理函数 LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case MZ_WM_MOUSE_NOTIFY: { int nID = LOWORD(wParam); int nNotify = HIWORD(wParam); int x = LOWORD(lParam); int y = HIWORD(lParam); // 处理列表控件的鼠标按下通知 if (nID==MZ_IDC_LIST && nNotify==MZ_MN_LBUTTONDOWN) { if (!m_List.IsMouseDownAtScrolling() && !m_List.IsMouseMoved()) { int nIndex = m_List.CalcIndexOfPos(x, y); m_List.SetSelectedIndex(nIndex); m_List.Invalidate(); m_List.Update(); } return 0; } // 处理列表控件的鼠标移动通知 if (nID==MZ_IDC_LIST && nNotify==MZ_MN_MOUSEMOVE) { if(m_List.GetSelectedIndex()!=-1) { m_List.SetSelectedIndex(-1); m_List.Invalidate(); m_List.Update(); } return 0; } //if (nID==MZ_IDC_LIST && nNotify==MZ_MN_LBUTTONDOWN) //{ // if (!m_List.IsMouseDownAtScrolling() && !m_List.IsMouseMoved()) // { // m_List.SetSelectedIndex(-1); // m_List.Invalidate(); // m_List.Update(); // } // return 0; //} } return 0; } return CMzWndEx::MzDefWndProc(message,wParam,lParam); } // 重载 MZFC 的命令消息处理函数 virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { UINT_PTR id = LOWORD(wParam); switch(id) { case MZ_IDC_TOOLBAR1: { int nIndex = lParam; if (nIndex==0) { //CMzString str(128); //wsprintf(str.C_Str(), L"You pressed the %s button!", m_Toolbar.GetButtonText(0).C_Str()); //MzMessageBoxEx(m_hWnd, str.C_Str(), L"Test", MB_OK); PostQuitMessage(0); return; } if (nIndex==1) { // 弹出菜单 CPopupMenu ppm; struct PopupMenuItemProp pmip; pmip.itemCr = MZC_BUTTON_PELLUCID; pmip.itemRetID = IDC_PPM_CANCEL; pmip.str = L"Cancel"; ppm.AddItem(pmip); pmip.itemCr = MZC_BUTTON_ORANGE; pmip.itemRetID = IDC_PPM_OK; pmip.str = L"OK"; ppm.AddItem(pmip); RECT rc = MzGetWorkArea(); rc.top = rc.bottom - ppm.GetHeight(); ppm.Create(rc.left,rc.top,RECT_WIDTH(rc),RECT_HEIGHT(rc),m_hWnd,0,WS_POPUP); int nID = ppm.DoModal(); if (nID==IDC_PPM_OK) { // do what you want... int nSel = m_List.GetSelectedIndex(); m_List.RemoveItem(nSel); m_List.SetSelectedIndex(-1); m_List.Invalidate(); m_List.Update(); } if (nID==IDC_PPM_CANCEL) { // do what you want... } return; } if (nIndex==2) { MyWnd dlg; RECT rcWork = MzGetWorkArea(); dlg.Create(rcWork.left,rcWork.top,RECT_WIDTH(rcWork),RECT_HEIGHT(rcWork), m_hWnd, 0, WS_POPUP); // 设置窗口切换动画(弹出时的动画) dlg.SetAnimateType_Show(MZ_ANIMTYPE_SCROLL_BOTTOM_TO_TOP_2); // 设置窗口切换动画(结束时的动画) dlg.SetAnimateType_Hide(MZ_ANIMTYPE_SCROLL_TOP_TO_BOTTOM_1); int nRet = dlg.DoModal(); if (nRet==ID_OK) { //... } return; } } break; } } }; MZ_IMPLEMENT_DYNAMIC(CSample1MainWnd) // 从 CMzApp 派生的应用程序类 class CSample1App: public CMzApp { public: // 应用程序的主窗口 CSample1MainWnd 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; } }; // 全局的应用程序对象 CSample1App theApp;