r2 - 11 May 2010 - 16:10:26 - YiZhengYou are here: TWiki >  Products Web > MStudioMGNCSV1dot0PG > MStudioMGNCSV1dot0PGP2C16

第二部分第十六章 其他相关类

本章介绍一些被mGNCS非控件类。它们是被设计出来提供给控件类使用。

mReferencedObj

该类封装一个自动计数,允许对象被传递时通过自动引用来控制该对象的生命周期。

该类主要用于一些非控件类上,例如mToolItem, mPropMenuMgr等类

  • 继承关系
    • mObject
      • mRefrencedObj

mReferencedObj方法

  • 引用相关的接口,有两个:
int addRef(mReferencedObj* self);
int release(mReferencedObj* self);
addRef自动给计数加1,并返回新的计数。 release将自动给计数减1,并返回新计数;如果计数为0,自动调用destroy方法,删除该对象,包括该对象的内存。 mReferenceObj及其派生类需要调用 NEW 或者 NEWEX 宏来创建 ,因为release方法会调用 DELETE 宏来释放创建的对象。 派生类可以通过覆盖release方法,来改变对象的释放方式。

mReferencedObj示例

该类为抽象类,不能直接使用

mPopMenuMgr

mPopMenuMgr保存了PropMenu的信息,它能够:

  • 随时创建一个PopMenu供使用
  • 可以取得部分MenuItem的信息,填充到MENUITEMINFO结构中,提供给MiniGUI的相关函数使用

mPopMenuMgr方法

  • 向mPopMenuMgr添加一个MenuItem的方法
BOOL addItem(mPropMenuMgr *self , \
int type, \
const char * str, \
PBITMAP bmp, \
int id, \
int state,  \
mPopMenuMgr *subMenu, \
DWORD add_data);
    • 参数
      • type - 菜单项类型,同MiniGUI MENUITEMINFO的定义
        • MTF_STRING
        • MTF_BITMAP
        • MTF_BMPSTRING
        • MTF_RADIOCHECK
        • MTF_MARKCHECK
        • MTF_SEPARATOR
      • str - Item 的caption,在type == MTF_STRING或MTF_BMPSTRING有效
      • bmp - item的位图,在type == MTF_BITMAP或MTF_BMPSTRING有效
      • id - item的id, 必须 标记一个id
      • state - item状态,同 MiniGUI MENUITEMINFO的定义
        • MFS_GRAYED
        • MFS_DISABLED
        • MFS_CHECKED
        • MFS_ENABLED
        • MFS_UNCHECKED
      • subMenu - 子菜单管理器
      • add_data - 用户附件数据
    • return : TRUE/FALSE

  • 创建一个PopMenu,返回该Menu的句柄
HMENU createMenu(mPopMenuMgr *self);

  • 自动创建并弹出一个PopMenu
void popMenu(mPopMenuMgr *self, mObject *owner);
    • params:
      • owner 指出PopMenu 相关关联的对象, 它必须是一个mWidget或者其子类。*PopMenu将发送MSG_COMMAND给owner*
    • return : 无

  • 添加一个分割条到MenuItem中去
BOOL addSeparator(mPopMenuMgr * self);

  • 获取指定MenuItem的信息
BOOL getMenuItem(mPopMenuMgr * self, int idx, MENUITEMINFO *pmii, BOOL byCommand);
    • 将指定MenuItem的信息填充到MENUITEMINFO中去
    • params:
      • idx - menuitem的索引或者id
      • pmii - 输出参数
      • byCommand : TRUE - idx为menu item的id; FALSE - idx为 menu item的索引
    • return : TRUE / FALSE

mPopMenuMgr示例

参见mMenuButton的示例

mToolImage

mToolImage是为mToolItem提供图片的类。该类封装了各种类型的图片,以方便用户选用

mToolImage方法

mToolImage的方法是开放的,下面提供的函数都是可以直接调用的

  • 从一个图片对象创建新的mToolImage对象
mToolImage * ncsNewToolImage(PBITMAP pbmp, int cell_count, BOOL autoUnload, BOOL bVert);
    • params
      • pbmp : 图像的源
      • cell_count: pbmp包含的小图像的个数
      • autoUnload : 自动调用UnloadBitmap删除该图像
      • bVert : 小图像的排列是否是垂直的
    • return : mToolImage指针

  • 从一个图片文件创建mToolImage对象
mToolImage * ncsNewToolImageFromFile(const char *fileName, \
int cell_count, \
BOOL autoUnload, \
BOOL bVert);

  • 释放一个mToolImage对象
void ncsFreeToolImage(mToolImage *mti);

  • 绘制mToolImage管理的指定位置的图片
BOOL ncsDrawToolImageCell(mToolImage *mti, HDC hdc, int idx, const RECT *prc);
    • params:
      • mti : mToolImage指针
      • hdc : 目标DC句柄
      • idx : 小图像索引
      • prc: 目标矩形
    • return TRUE/FALSE

对于用户来说,主要使用创建和删除相关的函数, 绘制函数是由ToolItem使用的

mToolImage示例

mToolItem

mToolItem是mToolbar的item的基类。这个类以及它的派生类是不公开的。用户只需要通过对外提供的API,自动创建即可。

mToolbar也将自动管理mToolItem的删除

mToolItem的类型

mToolItem有很多子类,对外接口上,表现为各种类型,这些定义如下:
enum mToolItemType{
        NCS_UNKNOWNTOOLITEM = 0,
        NCS_PUSHTOOLITEM,
        NCS_MENUTOOLITEM,
        NCS_WIDGETTOOLITEM,
        NCS_SEPARATORTOOLITEM
};
可以通过以下函数来检测一个ToolItem的类型
  • int ncsGetToolItemType(void *toolitem);
    • 获取ToolItem的类型
以下函数可以快速检测一个item的类型
  • BOOL ncsIsPushToolItem(void *toolitem);
  • BOOL ncsIsMenuToolItem(void *toolitem);
  • BOOL ncsIsSeparatorToolItem(void *toolitem);
  • BOOL ncsIsWidgetToolItem(void *toolitem);

mToolItem创建和删除

  • 创建一个PushToolItem
void * ncsCreatePushToolItem(int id, mToolImage * img, const char * str, UINT flags);
    • params:
      • img : mToolImage 指针,可以为NULL
      • str : 文字指针,可以为NULL, 但,*img和str中必须有一个不为NULL*
      • flags: 定义image和str的关系
        • NCS_TOOLITEM_FLAG_TEXT_LEFT/NCS_TOOLITEM_FLAG_TEXT_UP, 文本在左或者上,默认为右或者下
        • NCS_TOOLITEM_FLAG_VERT, image和str垂直排列,默认是水平排列
    • return : item 指针
  • 创建一个Menu Tool Item
void * ncsCreateMenuToolItem(int id, \
mToolImage * img, \
const char * str, \
UINT flags, \
mPopMenuMgr * menu);
    • 创建一个MenuToolItem, 参数menu为一个mPopMenuMgr, 其他参数同上

  • 创建一个Check Tool Item
void * ncsCreateCheckToolItem(int id, \
mToolImage * img, \
const char * str, \
UINT flags, \
int state);
    • 参数同ncsCreatePushToolItem

  • 创建一个Radio Tool Item
void * ncsCreateRadioToolItem(int id, mToolImage * img, const char * str, UINT flags);
    • 参数同ncsCreatePushToolItem。 RadioToolItem是自动分组的,从第一个或者上一个分割符开始到最后一个或者下个分割符结束直接的所有RadioToolItem是互斥的

  • 创建一个包含mWidget指针的ToolItem
void * ncsCreateWidgetToolItem(mWidget * widget);
    • params
      • widget : mWidget对象指针
    • return : item指针

  • 创建一个分割符
void * ncsCreateSeparatorItem(void);
    • return item指针

其他mToolItem函数

mToolItem还提供一些其他的函数,用于对ToolItem进行操作

  • 获取或者设置ToolItem的ID
int ncsToolItem_getId(void *self)

int ncsToolItem_setId(void *self, int id);
    • 如果不能设置或者不能获取,则返回-1

  • 获取或者设置CheckToolItem的Check状态
BOOL ncsToolItem_setCheck(void *self, int check_state);
int ncsToolItem_getCheck(void *self);
    • 只针对Check/RadioToolItem起效。当对其他ToolItem调用ncsToolItem_getCheck时,将永远返回unchecked状态

  • 对MenuToolItem弹出菜单
BOOL ncsToolItem_showMenu(void*self, mObject *owner);
    • 仅针对menu Tool item, owner为一个mWidgt*对象

mToolItem示例

上一章 < 目录 >

Edit | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r2 < r1 | More topic actions
 
Powered by TWiki
This site is powered by the TWiki collaboration platformCopyright © by the Feynman Software and/or the contributing authors. All material on this collaboration platform is the property of Feynman Software and/or the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback