开发说明

M8 桌面插件开发说明
    Meizu M8桌面插件(以下简称Widget)是摆放在桌面上的小控件,它可以有自己的子控件,以方便用户操作。
    Widget的摆放其移动位置都由桌面进行控制,但其中的子控件的相对位置,则需要由Widget自己去设置。
    

由于 UiWidget 的最上层父类是 UiWin ,因此也就继承了 UiWin 的特性。(具体请参考 UiWin.h

    如果你想在你的Widget上绘制一些图形文字之类的,可以使用 UiWin::AddChild() 往你的Widget添加 UiPicture / UiStatic 等子控件。
    当然,你也可以通过重载 UiWin::PaintWin() 来实现自绘Widget。
    或者你想添加一个按钮,则可以使用 UiWin::AddChild() 往Widget里添加 UiButton / UiButton_Image 等子控件。
    在重载的 StartWidget() 函数中,当你设置Widget及其子控件的ID时,必须使用以下API来获得空闲的控件ID:
    

    // 获得空闲的控件ID
    // Widget的控件ID请使用此函数来获得设置,以避免ID冲突
    // 获得的ID必须在不使用时调用SW_ReleaseID(id)进行释放
    SHELLWIDGET_API UINT SW_GetFreeID();
    在重载的 EndWidget() 函数中,你需要把所有获得的控件ID通过以下API进行释放:
    

    // 释放ID,使它空闲
    SHELLWIDGET_API void SW_ReleaseID(int nID);
Widget 如何响应命令通知消息及鼠标触摸通知消息
    通过重载widget的以下虚函数,可以响应widget中的控件/子控件发出的命令通知消息 MZ_WM_COMMAND 及鼠标触摸通知消息 MZ_WM_MOUSE_NOTIFY:
    

    // 重载以自定义对所在窗口消息通知的处理
    virtual void OnWmNotify(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
    {
        if(nMessage == MZ_WM_COMMAND)
        {
            if( m_btn.GetID() == LOWORD(wParam) )
            {
                // processs
            }
        }
    }
注册Widget
    最后,需要添加Widget的注册表,这样Widget才会摆放在桌面上。
    位置:[HKEY_LOCAL_MACHINE\SOFTWARE\Meizu\MiniOneShell\Main\XXXX], 其中XXXX是您自定义的应用程序名称。
链接引用库文件
    

    shellwidget.lib
引用头文件
    

    <shellwidget/shellwidget.h>
Widget 开发示例



Widget开发注意事项
由于桌面上的Widget插件数量比较多,它们占用的显存和内存都比较大,因此必须注意以下一些事项,以减少不必要的内存占用:


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