最近開發一個軟件時遇到屬性編輯的問題,本來想用列表控件來代替,但是發現列表控件有很多缺陷,不是太好用。屬性控件不支持編輯與下拉列表功能,這個控件已經內置了這二個功能,而且還提供CUSTOMDRAW,不過還不完善。 程序運行畫面如圖一:
圖一
下面描述一下其主要方法:
自己定義一個宏來構架列表序列:
BEGIN_CREATE_NODE
BEGIN_YJITEM(0,YJ_FOLDER,YJ_DEFAULT,_T("文件"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_FOLDER,YJ_DEFAULT,_T("新建"),YJEDIT,true,_T("文檔"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("打開"),YJLISTBOX,true,_T("文檔#程序#文本"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("退出"),YJLISTBOX,true,_T("文檔#程序#文本"))
BEGIN_YJITEM(0,YJ_FOLDER,YJ_DEFAULT,_T("編輯"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("撤銷"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("粘貼"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("拷貝"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(0,YJ_FOLDER,YJ_DEFAULT,_T("視圖"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("撤銷"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("粘貼"),YJEDIT,true,_T("文件"))
BEGIN_YJITEM(1,YJ_ITEM,YJ_DEFAULT,_T("拷貝"),YJEDIT,true,_T("文件"))
END_CREATE_NODE
其中列表字符串之間以"#"分開。編輯框是YJEDIT,列表框是YJLISTBOX,然後在程序裡面調用宏,
CRATE_STRUCT(&m_propertyList)
m_propertyList.Invalidate();
顯示遍歷屬性列表:
For(int i=0;i< m_propertyList.GetSize();i++)
M_propertyList.m_List[i]->GetString();
其中的每一條目對應一個YJPropertyItem對象的指針.具體請看代碼。
開發:windows xp+VS2003 代碼見相關附件