字母表导航条
此示例展示以下控件的使用方法:
字母表导航条 UiAlphabetBar使用流程
UiAlphabetBar m_AlpBar;
m_AlpBar.SetPos(430,0,50,GetHeight()); m_AlpBar.SetID(MZ_IDC_ALPBAR); //是否启用放大气泡 m_AlpBar.EnableZoomAlphabet(true); m_AlpBar.EnableNotifyMessage(true); AddUiWin(&m_AlpBar);
//LOWORD(wParam)判断鼠标事件是否作用在导航条控件,m_AlpBar.GetCurLetter()判断是否点击到一个字母 if (LOWORD(wParam) == MZ_IDC_ALPBAR && m_AlpBar.GetCurLetter()) { //如果点击到导航条中的一个字母,要处理的事件 }
使用字母导航条快速定位列表内容:
virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam) == MZ_IDC_ALPBAR && m_AlpBar.GetCurLetter()) { for (int i=0;i<m_List.GetItemCount();i++) { MyListItemData* itemData = (MyListItemData*)m_List.GetItem(i)->Data; wchar_t* fLetter = itemData->m_cfirstLetter; //将找到的列表项显示在屏幕顶端。 if (wcscmp(m_AlpBar.GetCurLetter(),itemData->m_cfirstLetter) == 0) { int topPos = m_List.CalcItemTopPos(i); m_List.SetTopPos(m_List.GetTopPos()-topPos); m_List.Invalidate(); m_List.Update(); break; } } } }
/************************************************************************/ /* * Copyright (C) Meizu Technology Corporation Zhuhai China * All rights reserved. * 中国珠海, 魅族科技有限公司, 版权所有. * * This file is a part of the Meizu Foundation Classes library. * Author: Lynn * Create on: 2009-4-22 */ /************************************************************************/ //请按照以步骤运行此实例代码: //首先, 打开VS2005/2008创建一个Win 32智能设备项目 //在项目向导中选择M8SDK, 并勾选空项目 //然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中 //最后,按照M8SDK的帮助文档,配置项目属性 //现在,可以运行此程序了 //包含头文件 #include "mzfc_inc.h" //此代码演示了: //创建和初始化应用程序 //创建和初始化窗体 //如何使用字母表导航条 //通过使用字母导航条快速定位列表内容。 #define MZ_IDC_ALPBAR 201 #define MZ_IDC_LIST 202 //自定义的列表项数据 typedef struct CMyListItemData { wchar_t m_szContent[50]; //列表项显示的内容 wchar_t m_cfirstLetter[2]; //列表项内容的首字母,用于快速定位列表内容。 }MyListItemData; //从UiList中派生出的自定义列表 class CMyList:public UiList { public: //重写DrawItem方法。当列表更新时重画,调用此方法。 virtual void DrawItem(HDC hdcDst, int nIndex, RECT* prcItem, RECT *prcWin, RECT *prcUpdate) { ListItem* pItem = GetItem(nIndex); if (pItem) { MzDrawText(hdcDst,((MyListItemData*)pItem->Data)->m_szContent,prcItem,DT_VCENTER|DT_LEFT); } } //重写OnRemoveItem,当删除某一项时基类调用此方法。-1表示删除所有列表项数据。 virtual void OnRemoveItem(int nIndex) { ListItem* pItem; if (nIndex == -1) { for (int i = 0; i< GetItemCount(); i++) { pItem = GetItem(i); if (pItem->Data) { delete (MyListItemData*)pItem->Data; } } } else { pItem = GetItem(nIndex); if (pItem->Data) { delete (MyListItemData*)pItem->Data; } } } }; class CSampleWnd_AlpBar:public CMzWndEx { public: UiAlphabetBar m_AlpBar; CMyList m_List; protected: virtual BOOL OnInitDialog() { if (!CMzWndEx::OnInitDialog()) { return FALSE; } m_List.SetID(MZ_IDC_LIST); m_List.SetPos(0,0,480,GetHeight()); m_List.SetFocus(false); AddUiWin(&m_List); m_AlpBar.SetPos(430,0,50,GetHeight()); m_AlpBar.SetID(MZ_IDC_ALPBAR); m_AlpBar.EnableZoomAlphabet(true); m_AlpBar.EnableNotifyMessage(true); AddUiWin(&m_AlpBar); //向list中添加15条数据数据 ListItem item[15]; for (int i=0;i<15;i++) { MyListItemData* itemData = new MyListItemData(); int asciiFLetter = (i/3)*5+'A'; wsprintf(itemData->m_cfirstLetter,L"%c",asciiFLetter); wsprintf(itemData->m_szContent,L"%c%.4d",asciiFLetter,i); item[i].Data = itemData; m_List.AddItem(item[i]); } return TRUE; } virtual void OnMzCommand(WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam) == MZ_IDC_ALPBAR && m_AlpBar.GetCurLetter()) { for (int i=0;i<m_List.GetItemCount();i++) { MyListItemData* itemData = (MyListItemData*)m_List.GetItem(i)->Data; wchar_t* fLetter = itemData->m_cfirstLetter; //将找到的列表项显示在屏幕顶端。 if (wcscmp(m_AlpBar.GetCurLetter(),itemData->m_cfirstLetter) == 0) { int topPos = m_List.CalcItemTopPos(i); m_List.SetTopPos(m_List.GetTopPos()-topPos); m_List.Invalidate(); m_List.Update(); break; } } } } }; class CSampleApp: public CMzApp { public: //主窗体 CSampleWnd_AlpBar m_MainWnd; //初始化应用程序 virtual BOOL Init() { 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(); return TRUE; } }; // 全局应用程序变量 CSampleApp theApp;