窗口

窗口:
在MZFC中,窗口是所有可视化元素的载体,所有的控件和图形都在窗口中绘制。
MZFC中包含 CMzWndCMzWndEx 两个窗口类,其中 CMzWndEx 是用于派生用户界面窗口的基类,
它包含了控件管理器(WinManager),可以容纳各种MZFC控件。
MZFC中包含的窗口种类:


创建主窗口

派生的用户界面主窗口类还需要重载 CMzWndEx 的虚函数OnInitDialog()来初始化窗口中的内容:

// @brief 当MZFC窗口被创建时,会调用此成员函数以初始化窗口.    
// @return FALSE: 初始化失败, TRUE: 初始化成功.
// @see CMzWnd::Create()
virtual BOOL OnInitDialog()
{
    // 必须先调用基类的初始化
    if (!CMzWndEx::OnInitDialog())
    {
        return FALSE;
    }

    // 添加您的初始化代码...
    // ...
    
    return TRUE;
}

注意:在重载此函数中,请先调用所继承类的此成员函数,再添加您的初始化代码。

用户界面主窗口类还可重载以下的虚函数处理窗口的消息:

// @brief 当窗口收到 ::MZ_WM_COMMAND 消息,此成员函数会被调用
// 重载此函数以处理命令消息
// @see MZ_WM_COMMAND
virtual void OnMzCommand(WPARAM wParam, LPARAM lParam);

// MZFC 的消息处理函数
virtual LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam);

应用程序调用 CMzWnd::Show 函数显示用户界面主窗口:

// 显示、隐藏窗口.
void Show(bool bShow=true, bool bBringTop=true);

调用窗口类的Show函数,此时应用程序就会调用主窗口以及主窗口中各控件的PaintWin函数进行绘制


模态窗口、子窗口:
Win32 API中的模态窗口概念,在MZFC中仍然适用。
通过以下方法可以把窗口创建为模态窗口:

当然,Win32 API中的子窗口概念,在MZFC中也同样适用。

通过以下方法可以把窗口创建为子窗口:


窗口切换动画:
MZFC内置了多种动画类型,可以在窗口切换的时候使用,以提高用户体验。
目前包含的动画类型有:
// 动画类型: (1:当前画面; 2: 新画面)

#define MZ_ANIMTYPE_NONE                            0   //< 无动画

#define MZ_ANIMTYPE_SCROLL_BOTTOM_TO_TOP_2          1   //< 2从下往上滚动出现, 1静止并消失

#define MZ_ANIMTYPE_SCROLL_TOP_TO_BOTTOM_2          3   //< 2从上往下滚动出现, 1静止并消失

#define MZ_ANIMTYPE_SCROLL_LEFT_TO_RIGHT_2          5   //< 2从左往右滚动出现, 1静止并消失

#define MZ_ANIMTYPE_SCROLL_RIGHT_TO_LEFT_2          7   //< 2从右往左滚动出现, 1静止并消失

#define MZ_ANIMTYPE_SCROLL_BOTTOM_TO_TOP_1          4   //< 1往上滚动并消失, 2静止并出现

#define MZ_ANIMTYPE_SCROLL_TOP_TO_BOTTOM_1          2   //< 1往下滚动并消失, 2静止并出现

#define MZ_ANIMTYPE_SCROLL_LEFT_TO_RIGHT_1          8   //< 1往右滚动并消失, 2静止并出现

#define MZ_ANIMTYPE_SCROLL_RIGHT_TO_LEFT_1          6   //< 1往左滚动并消失, 2静止并出现

#define MZ_ANIMTYPE_SCROLL_BOTTOM_TO_TOP_PUSH       9   //< 2从下至上推着1一起滚动并出现

#define MZ_ANIMTYPE_SCROLL_TOP_TO_BOTTOM_PUSH       10  //< 2从上至下推着1一起滚动并出现

#define MZ_ANIMTYPE_SCROLL_LEFT_TO_RIGHT_PUSH       11  //< 2从左至右推着1一起滚动并出现

#define MZ_ANIMTYPE_SCROLL_RIGHT_TO_LEFT_PUSH       12  //< 2从右至左推着1一起滚动并出现

#define MZ_ANIMTYPE_ZOOM_IN                         13  //< 2不断放大出现

#define MZ_ANIMTYPE_ZOOM_OUT                        14  //< 1不断缩小至不见

#define MZ_ANIMTYPE_FADE                            15  //< 淡出
通过 CMzWnd::AnimateWindow(UINT nAnimType, bool bShow) 即可调用窗口动画,示例伪代码:

MyWnd *pWnd = new MyWnd;
pWnd->Create(....);
pWnd->AnimateWindow(MZ_ANIMTYPE_ZOOM_IN, true);
pWnd->Show();
假如窗口是模态窗口,则使用以下方法调用动画:

MyDialog *pDlg = new MyDialog;
pDlg->CreateModalDialog(...);
pDlg->SetAnimateType_Show(MZ_ANIMTYPE_SCROLL_RIGHT_TO_LEFT_PUSH);
pDlg->SetAnimateType_Hide(MZ_ANIMTYPE_SCROLL_LEFT_TO_RIGHT_PUSH);
pDlg->DoModal();
delete pDlg;

窗口矩形
使用MzGetWorkArea()函数可获取当前屏幕的工作区,矩形(left, top, right, bottom)是相对于整个屏幕而言的。

// 获取当前屏幕工作区
RECT MzGetWorkArea();

如图所示:

window_rect_1.png
使用MzGetClientRect()函数可获取当前窗口的客户区,矩形(left, top, right, bottom)是相对于当前窗口而言的。

// 获得窗口客户区矩形
RECT CMzWnd::MzGetClientRect(void);

如图所示,通话记录窗口的客户区:

window_rect_2.png
使用MzGetWindowRect()函数可获取当前窗口相对于整个屏幕的矩形。

// 获得窗口矩形
RECT CMzWnd::MzGetWindowRect(void);

如图所示,通话记录窗口的矩形:

window_rect_3.png
 

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