第二部分第十六章 其他相关类
本章介绍一些被mGNCS非控件类。它们是被设计出来提供给控件类使用。
mReferencedObj
该类封装一个自动计数,允许对象被传递时通过自动引用来控制该对象的生命周期。
该类主要用于一些非控件类上,例如mToolItem, mPropMenuMgr等类
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
HMENU createMenu(mPopMenuMgr *self);
void popMenu(mPopMenuMgr *self, mObject *owner);
-
- params:
- owner 指出PopMenu 相关关联的对象, 它必须是一个mWidget或者其子类。*PopMenu将发送MSG_COMMAND给owner*
- return : 无
BOOL addSeparator(mPopMenuMgr * self);
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 * ncsNewToolImage(PBITMAP pbmp, int cell_count, BOOL autoUnload, BOOL bVert);
-
- params
- pbmp : 图像的源
- cell_count: pbmp包含的小图像的个数
- autoUnload : 自动调用UnloadBitmap删除该图像
- bVert : 小图像的排列是否是垂直的
- return : mToolImage指针
mToolImage * ncsNewToolImageFromFile(const char *fileName, \
int cell_count, \
BOOL autoUnload, \
BOOL bVert);
void ncsFreeToolImage(mToolImage *mti);
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);
以下函数可以快速检测一个item的类型
- BOOL ncsIsPushToolItem(void *toolitem);
- BOOL ncsIsMenuToolItem(void *toolitem);
- BOOL ncsIsSeparatorToolItem(void *toolitem);
- BOOL ncsIsWidgetToolItem(void *toolitem);
mToolItem创建和删除
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);
void * ncsCreateCheckToolItem(int id, \
mToolImage * img, \
const char * str, \
UINT flags, \
int state);
void * ncsCreateRadioToolItem(int id, mToolImage * img, const char * str, UINT flags);
-
- 参数同ncsCreatePushToolItem。 RadioToolItem是自动分组的,从第一个或者上一个分割符开始到最后一个或者下个分割符结束直接的所有RadioToolItem是互斥的
void * ncsCreateWidgetToolItem(mWidget * widget);
void * ncsCreateSeparatorItem(void);
其他mToolItem函数
mToolItem还提供一些其他的函数,用于对ToolItem进行操作
int ncsToolItem_getId(void *self)
int ncsToolItem_setId(void *self, int id);
- 获取或者设置CheckToolItem的Check状态
BOOL ncsToolItem_setCheck(void *self, int check_state);
int ncsToolItem_getCheck(void *self);
-
- 只针对Check/RadioToolItem起效。当对其他ToolItem调用ncsToolItem_getCheck时,将永远返回unchecked状态
BOOL ncsToolItem_showMenu(void*self, mObject *owner);
-
- 仅针对menu Tool item, owner为一个mWidgt*对象
mToolItem示例
上一章 <
目录 >