掌叔
2009-01-14 15:50:11
摘自:[url=http://www.meizu.com/]http://www.meizu.com/[/url]
作者:looyea
绿字为个人评注,与前文一样的地方一律掠过。
这个例子的效果跟第三个是一样,只不过用了滚动窗口实现的
// 引用mzfc库头文件
#include
/// 本项目演示了使用MZFC中的:
/// 应用程序的启动,窗口的创建,
/// 及Ui按钮控件、命令消息的处理,
/// 文字按钮工具条,及弹出菜单,提示信息对话框
/// 及UiList_2列表控件的使用,MZ_WM_MOUSE_NOTIFY消息的处理
/// 还有UiScrollWin滚动容器的使用
[color=DarkGreen]/* 这次多定义了一个卷动窗口的ID */[/color]
#define MZ_IDC_LIST 101
#define MZ_IDC_TOOLBAR1 102
#define MZ_IDC_SCROLLWIN 103
#define IDC_PPM_OK 203
#define IDC_PPM_CANCEL 204
// 从CMzWnd派生主窗口类
class CSample1MainWnd: public CMzWndEx
{
MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
UiToolbar_Text m_Toolbar;
[color=DarkGreen] /*[/color]
[color=DarkGreen] UiList_2,列表控件类[/color]
[color=DarkGreen] (PS.这英文名起的,不看Document鬼才知道那个2什么意思…… -_-|||)[/color]
[color=DarkGreen] 其本身不会,必须结合一个滚动窗口才能滚动[/color]
[color=DarkGreen] 这就是为什么下面定义了一个滚动窗口[/color]
[color=DarkGreen] UiScrollWin类的实例m_ScrollWin[/color]
[color=DarkGreen] */[/color]
UiList_2 m_List;
UiScrollWin m_ScrollWin;
protected:
// 重载窗口初始化函数
virtual BOOL OnInitDialog()
{
// 先调用基类的初始化函数
if (!CMzWndEx::OnInitDialog())
{
return FALSE;
}
// 初始化主窗口中的控件
[color=DarkGreen]/* 设定绘制位置兼绘制面积*/[/color]
m_ScrollWin.SetPos(0,0,GetWidth(),GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR);
m_ScrollWin.SetID(MZ_IDC_SCROLLWIN);
[color=DarkGreen]/* 允许滚动窗口垂直滚动 */[/color]
m_ScrollWin.EnableScrollBarV(true);
[color=DarkGreen]/* 把滚动窗口加入我们的程序 */[/color]
AddUiWin(&m_ScrollWin);
m_List.SetPos(0,0,GetWidth(),70);
m_List.SetID(MZ_IDC_LIST);
[color=DarkGreen]/* 允许列表控件类发出消息 */[/color]
m_List.EnableNotifyMessage(true);
[color=DarkGreen] /*[/color]
[color=DarkGreen] 注意,这里有所不同,是把那个列表加入到滚动窗口中[/color]
[color=DarkGreen] 所以这里相当于我们的窗口类嵌套了一个滚动窗口[/color]
[color=DarkGreen] 滚动窗口中嵌套了一个列表[/color]
[color=DarkGreen] 剩余的部分,跟Sample03基本一样了,就略过了[/color]
[color=DarkGreen] */[/color]
m_ScrollWin.AddChild(&m_List);
//add items to list
CMzString str(128);
wchar_t *buf = L"列表项目 %d";
ListItem li;
for (int i=0;i<50;i++)
{
wsprintf(str.C_Str(), buf, i);
li.Text = str;
m_List.AddItem(li);
}
m_List.UpdateList();
m_Toolbar.SetPos(0,GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR,GetWidth(),MZM_HEIGHT_TEXT_TOOLBAR);
m_Toolbar.SetButton(0, true, true, L"退出");
m_Toolbar.SetButton(1, true, true, L"删除");
m_Toolbar.SetButton(2, true, true, L"设置");
m_Toolbar.SetID(MZ_IDC_TOOLBAR1);
AddUiWin(&m_Toolbar);
return TRUE;
}
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)
{
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"您按了"%s"按钮!", m_Toolbar.GetButtonText(0).C_Str());
MzMessageBoxEx(m_hWnd, str.C_Str(), L"Test", MB_OK);
PostQuitMessage(0);
return;
}
if (nIndex==1)
{
// pop out a PopupMenu:
CPopupMenu ppm;
struct PopupMenuItemProp pmip;
pmip.itemCr = MZC_BUTTON_PELLUCID;
pmip.itemRetID = IDC_PPM_CANCEL;
pmip.str = L"取消";
ppm.AddItem(pmip);
pmip.itemCr = MZC_BUTTON_ORANGE;
pmip.itemRetID = IDC_PPM_OK;
pmip.str = L"确定";
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.UpdateList();
m_List.SetSelectedIndex(-1);
m_List.Invalidate();
m_List.Update();
}
if (nID==IDC_PPM_CANCEL)
{
// do what you want...
}
return;
}
if (nIndex==2)
{
CMzString str(128);
wsprintf(str.C_Str(), L"您按了"%s"按钮!", (LPWSTR)m_Toolbar.GetButtonText(2));
MzMessageBoxEx(m_hWnd, str.C_Str(), L"Test", MB_OK);
return;
}
}
break;
}
}
};
MZ_IMPLEMENT_DYNAMIC(CSample1MainWnd)
// 从CMzApp派生主应用程序类
class CSample1App: public CMzApp
{
public:
// 主窗口变量
CSample1MainWnd m_MainWnd;
// 重载Init函数
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;
}
};
// 应用程序全局变量
CSample1App theApp;