﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-MFC+D3D+ToolKitPro</title><link>http://www.cppblog.com/hwawai/</link><description>MFC+D3D+ToolKitPro</description><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 11:57:15 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 11:57:15 GMT</pubDate><ttl>60</ttl><item><title>关于tinyXML库的封装---我写的CXML类</title><link>http://www.cppblog.com/hwawai/archive/2008/08/21/59535.html</link><dc:creator>hwawai</dc:creator><author>hwawai</author><pubDate>Thu, 21 Aug 2008 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/hwawai/archive/2008/08/21/59535.html</guid><wfw:comment>http://www.cppblog.com/hwawai/comments/59535.html</wfw:comment><comments>http://www.cppblog.com/hwawai/archive/2008/08/21/59535.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/hwawai/comments/commentRss/59535.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hwawai/services/trackbacks/59535.html</trackback:ping><description><![CDATA[<p>由于最近写工具要使用xml来存储脚本，所以看了一些xml的c++相关内容<br>网上好多关于tinyxml的文档看了好多总是觉得比较麻烦，所以决定自己写一个类来封装它<br>这个类封装的不是很全面，但已经基本够我使用了，有兴趣的朋友可以再继续完善他，<br>让不懂xml内部原理的朋友们也可以方便使用xml格式文件存储数据<br><br>这是测试项目，vc71版本，我喜欢用2003，哈哈<br><a href="http://www.cppblog.com/Files/hwawai/CXML_vc71.7z">/Files/hwawai/CXML_vc71.7z</a><br>如果大家有什么更好的代码来处理xml希望踊跃交流<br><br>头文件<br>#pragma once<br>#include&lt;string&gt; <br>#include "tinyxml.h" <br>using namespace std; <br>class CXML<br>{<br>public:<br>&nbsp;CXML(void);<br>&nbsp;~CXML(void); <br>&nbsp; <br>&nbsp;bool ParseXmlFile(const char* xmlFile); <br>&nbsp;TiXmlElement* GetElement(const char* parentTitle,const char* title);//此函数需一层一层递进<br>&nbsp;bool getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string&amp; reslut); <br>&nbsp;bool getFirstElementValue(const char* title,string&amp; result); <br>&nbsp;bool getNextElementValue(const char* title,string&amp; result); <br>&nbsp;TiXmlElement* getRootElement(); <br>&nbsp;void Clear(); <br>&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;TiXmlElement* addXmlRootElement(const char* title);<br>&nbsp;TiXmlElement* addXmlChildElement(TiXmlElement* pElement,const char* title); <br>&nbsp;void addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value); <br>&nbsp;void addXmlDeclaration(const char* vesion="1.0",const char* encoding="gb2312",const char* standalone=""); <br>&nbsp;void addElementValue(TiXmlElement* pElement,const char* value); <br>&nbsp;void addXmlComment(TiXmlElement* pElement,const char* Comment); <br>&nbsp;void saveFile(const char* file); <br>protected: <br>&nbsp;TiXmlDocument m_xml; <br>&nbsp;TiXmlElement* pElement;&nbsp;&nbsp;&nbsp;//&nbsp;获取NextElementValue使用,属临时变量<br>&nbsp;TiXmlElement* getFirstElement(const char* ElementMark,TiXmlElement* pcrElement); <br>};<br><br>源文件<br>#include "StdAfx.h"<br>#include ".\xml.h"</p>
<p>CXML::CXML(void)<br>{<br>}</p>
<p>CXML::~CXML(void)<br>{<br>}</p>
<p>bool CXML::ParseXmlFile(const char* xmlFile) <br>{ <br>&nbsp;return m_xml.LoadFile(xmlFile)?1:0;<br>} </p>
<p>TiXmlElement* CXML::GetElement(const char* parentTitle,const char* title)<br>{<br>&nbsp;TiXmlNode* _=m_xml.FirstChildElement(parentTitle);<br>&nbsp;for(_=_-&gt;FirstChild();_;_=_-&gt;NextSibling())<br>&nbsp;{<br>&nbsp;&nbsp;if (!strcmp(title,_-&gt;Value()))<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return _-&gt;ToElement();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;return 0;<br>}</p>
<p>bool CXML::getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string&amp; reslut) <br>{ <br>&nbsp;if(Element-&gt;Attribute(AttributeName)) <br>&nbsp;{ <br>&nbsp;&nbsp;reslut=Element-&gt;Attribute(AttributeName); <br>&nbsp;&nbsp;return 1;<br>&nbsp;} <br>&nbsp;return 0; <br>}</p>
<p>bool CXML::getFirstElementValue(const char* title,string&amp; result) <br>{ <br>&nbsp;if(!title)<br>&nbsp;&nbsp;return 0;<br>&nbsp;TiXmlElement* _(0);<br>&nbsp;_=m_xml.RootElement();<br>&nbsp;_=getFirstElement(title,_);<br>&nbsp;if(_)<br>&nbsp;{<br>&nbsp;&nbsp;pElement=_;<br>&nbsp;&nbsp;result=pElement-&gt;GetText();<br>&nbsp;&nbsp;return 1;<br>&nbsp;} <br>&nbsp;return 0;<br>} </p>
<p>bool CXML::getNextElementValue(const char* title,string&amp; result) <br>{ <br>&nbsp;result=""; <br>&nbsp;pElement=pElement-&gt;NextSiblingElement(title); <br>&nbsp;if(pElement) <br>&nbsp;{ <br>&nbsp;&nbsp;result=pElement-&gt;GetText(); <br>&nbsp;&nbsp;return 1; <br>&nbsp;} <br>&nbsp;return 0; <br>} </p>
<p>TiXmlElement* CXML::getRootElement() <br>{ <br>&nbsp;return m_xml.RootElement(); <br>} </p>
<p>void CXML::Clear() <br>{ <br>&nbsp;m_xml.Clear(); <br>} </p>
<p>//////////////////////////////////////////////////////////////////////////<br>TiXmlElement* CXML::addXmlRootElement(const char* title) <br>{ <br>&nbsp;TiXmlElement* _=new TiXmlElement(title); <br>&nbsp;m_xml.LinkEndChild(_); <br>&nbsp;return _; <br>} </p>
<p>TiXmlElement* CXML::addXmlChildElement(TiXmlElement* pElement,const char* title) <br>{ <br>&nbsp;if(pElement) <br>&nbsp;{ <br>&nbsp;&nbsp;TiXmlElement* _=new TiXmlElement(title); <br>&nbsp;&nbsp;pElement-&gt;LinkEndChild(_); <br>&nbsp;&nbsp;return _; <br>&nbsp;} <br>&nbsp;return 0; <br>} </p>
<p>void CXML::addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value) <br>{ <br>&nbsp;if(pElement) <br>&nbsp;{ <br>&nbsp;&nbsp;pElement-&gt;SetAttribute(name,value); <br>&nbsp;} <br>} </p>
<p>void CXML::addXmlDeclaration(const char* vesion,const char* encoding,const char* standalone) <br>{ <br>&nbsp;TiXmlDeclaration *_=new TiXmlDeclaration(vesion,encoding,standalone); <br>&nbsp;m_xml.LinkEndChild(_); <br>} </p>
<p>void CXML::addElementValue(TiXmlElement *pElement,const char* value) <br>{ <br>&nbsp;if(pElement) <br>&nbsp;{ <br>&nbsp;&nbsp;TiXmlText *_=new TiXmlText(value); <br>&nbsp;&nbsp;pElement-&gt;LinkEndChild(_); <br>&nbsp;} <br>} <br>&nbsp;<br>void CXML::addXmlComment(TiXmlElement* pElement,const char* Comment) <br>{ <br>&nbsp;if(pElement) <br>&nbsp;{ <br>&nbsp;&nbsp;TiXmlComment *_=new TiXmlComment(Comment); <br>&nbsp;&nbsp;pElement-&gt;LinkEndChild(_); <br>&nbsp;} <br>} </p>
<p>void CXML::saveFile(const char* file) <br>{ <br>&nbsp;m_xml.SaveFile(file); <br>} </p>
<p>//////////////////////////////////////////////////////////////////////////<br>TiXmlElement* CXML::getFirstElement(const char* ElementMark,TiXmlElement* pcrElement) <br>{ <br>&nbsp;TiXmlElement* _=pcrElement;&nbsp; <br>&nbsp;while(_) <br>&nbsp;{ <br>&nbsp;&nbsp;if(strcmp(_-&gt;Value(),ElementMark)==0) <br>&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;//printf("%s\r\n",pElementtmp-&gt;Value()); <br>&nbsp;&nbsp;&nbsp;return _; <br>&nbsp;&nbsp;} <br>&nbsp;&nbsp;else <br>&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;TiXmlElement* nextElement=_-&gt;FirstChildElement(); <br>&nbsp;&nbsp;&nbsp;while(nextElement) <br>&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;//printf("%s\r\n",nextElement-&gt;Value()); <br>&nbsp;&nbsp;&nbsp;&nbsp;if(strcmp(nextElement-&gt;Value(),ElementMark)==0) <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nextElement; <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;else <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement* reElement=NULL; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reElement=getFirstElement(ElementMark,nextElement); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(reElement) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return reElement; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;nextElement=nextElement-&gt;NextSiblingElement(); <br>&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;} <br>&nbsp;&nbsp;_=_-&gt;NextSiblingElement(); <br>&nbsp;} <br>&nbsp;return NULL; <br>} </p>
<p><br>stdafx文件<br>#pragma once<br>#include &lt;iostream&gt;<br>#include &lt;tchar.h&gt;<br><br>用来测试的主cpp文件<br>#include "stdafx.h"<br>#include "tinyxml//XML.h"<br>#include &lt;iostream&gt;</p>
<p>void createXML()<br>{<br>&nbsp;CXML xml;<br>&nbsp;xml.addXmlDeclaration("1.0","gb2312","");<br>&nbsp;TiXmlElement* root=xml.addXmlRootElement("fields");<br>&nbsp;TiXmlElement* pElement=xml.addXmlChildElement(root,"pos");<br>&nbsp;xml.addXmlAttribute(pElement,"x","100");<br>&nbsp;xml.addXmlAttribute(pElement,"y","200.1");<br>&nbsp;xml.addXmlAttribute(pElement,"z","0.123");</p>
<p>&nbsp;TiXmlElement* pElement2=xml.addXmlChildElement(root,"dest");<br>&nbsp;xml.addXmlAttribute(pElement2,"x","一二三");<br>&nbsp;xml.addXmlAttribute(pElement2,"y","一二");<br>&nbsp;xml.addXmlAttribute(pElement2,"z","一");<br>&nbsp;xml.saveFile("1.xml"); <br>}</p>
<p>void CreateXML1()<br>{<br>&nbsp;CXML xml;<br>&nbsp;xml.addXmlDeclaration();<br>&nbsp;&nbsp;&nbsp; TiXmlElement* root=xml.addXmlRootElement("fields");<br>&nbsp;xml.addXmlComment(root,"AAAAAAA");<br>&nbsp;TiXmlElement* pElement=xml.addXmlChildElement(root,"pos_x");<br>&nbsp;xml.addElementValue(pElement,"1.3");<br>&nbsp;pElement=xml.addXmlChildElement(root,"pos_x");<br>&nbsp;xml.addElementValue(pElement,"30.1");<br>&nbsp;pElement=xml.addXmlChildElement(root,"pos_x");<br>&nbsp;xml.addElementValue(pElement,"30ssss.1");<br>&nbsp;xml.saveFile("2.xml");<br>}</p>
<p><br>void LoadXML()<br>{<br>&nbsp;CXML xml;<br>&nbsp;xml.ParseXmlFile("1.xml");<br>&nbsp;string a;<br>&nbsp;TiXmlElement* pElement=xml.GetElement("fields","dest"); <br>&nbsp; &nbsp;xml.getElementAttributeValue(pElement,"x",a);<br>&nbsp;&nbsp;cout&lt;&lt;a&lt;&lt;endl;<br>&nbsp;&nbsp;xml.getElementAttributeValue(pElement,"y",a);<br>&nbsp;&nbsp;cout&lt;&lt;a&lt;&lt;endl;<br>&nbsp;&nbsp;xml.getElementAttributeValue(pElement,"z",a);<br>&nbsp;&nbsp;cout&lt;&lt;a&lt;&lt;endl;<br>}</p>
<p>void LoadXML1()<br>{<br>&nbsp;CXML xml;<br>&nbsp;xml.ParseXmlFile("2.xml");<br>&nbsp;string a;<br>&nbsp;xml.getFirstElementValue("pos_x",a);<br>&nbsp;cout&lt;&lt;a&lt;&lt;endl; <br>&nbsp;xml.getNextElementValue("pos_x",a);<br>&nbsp;&nbsp;cout&lt;&lt;a&lt;&lt;endl;<br>&nbsp;xml.getNextElementValue("pos_x",a);<br>&nbsp;cout&lt;&lt;a&lt;&lt;endl;<br>}</p>
<p>int _tmain(int argc, _TCHAR* argv[])<br>{<br>// &nbsp;createXML();<br>// &nbsp;LoadXML();&nbsp; <br>&nbsp;&nbsp;CreateXML1();<br>&nbsp;&nbsp;LoadXML1();&nbsp; <br>&nbsp;getchar();<br>&nbsp;return 0;<br>}</p>
<p><br>生成的xml文件<br>1.xml<br>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<br>&lt;fields&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pos x="100" y="200.1" z="0.123" /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;dest x="一二三" y="一二" z="一" /&gt;<br>&lt;/fields&gt;<br><br>2.xml<br>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<br>&lt;fields&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!--AAAAAAA--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pos_x&gt;1.3&lt;/pos_x&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pos_x&gt;30.1&lt;/pos_x&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pos_x&gt;30ssss.1&lt;/pos_x&gt;<br>&lt;/fields&gt;<br></p>
<img src ="http://www.cppblog.com/hwawai/aggbug/59535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hwawai/" target="_blank">hwawai</a> 2008-08-21 15:45 <a href="http://www.cppblog.com/hwawai/archive/2008/08/21/59535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>v3Frame_StaticMeshView</title><link>http://www.cppblog.com/hwawai/archive/2008/08/19/59335.html</link><dc:creator>hwawai</dc:creator><author>hwawai</author><pubDate>Tue, 19 Aug 2008 05:51:00 GMT</pubDate><guid>http://www.cppblog.com/hwawai/archive/2008/08/19/59335.html</guid><wfw:comment>http://www.cppblog.com/hwawai/comments/59335.html</wfw:comment><comments>http://www.cppblog.com/hwawai/archive/2008/08/19/59335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/hwawai/comments/commentRss/59335.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hwawai/services/trackbacks/59335.html</trackback:ping><description><![CDATA[<p>最近做了个模型查看器使用了ToolKitPro<br>中的属性表组件<br></p>
<br><br><br><br><img height=533 alt="" src="http://www.cppblog.com/images/cppblog_com/hwawai/4.PNG" width=764 border=0><br><br><img height=535 alt="" src="http://www.cppblog.com/images/cppblog_com/hwawai/32.PNG" width=764 border=0><br><br>觉得这个组件太适合写一些游戏工具之类的了。<br>
<img src ="http://www.cppblog.com/hwawai/aggbug/59335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hwawai/" target="_blank">hwawai</a> 2008-08-19 13:51 <a href="http://www.cppblog.com/hwawai/archive/2008/08/19/59335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Xtreme ToolkitPro 2007 Vol 2 (11.2.1) 使用心得 No.1 CXTPPropertyGrid类测试</title><link>http://www.cppblog.com/hwawai/archive/2008/08/19/59334.html</link><dc:creator>hwawai</dc:creator><author>hwawai</author><pubDate>Tue, 19 Aug 2008 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/hwawai/archive/2008/08/19/59334.html</guid><wfw:comment>http://www.cppblog.com/hwawai/comments/59334.html</wfw:comment><comments>http://www.cppblog.com/hwawai/archive/2008/08/19/59334.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/hwawai/comments/commentRss/59334.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hwawai/services/trackbacks/59334.html</trackback:ping><description><![CDATA[<p><br>这篇是好久之前自己最初贴在cdsn上的帖子，现在也挪到这里算是开篇吧<br><br><img height=508 alt="" src="http://www.cppblog.com/images/cppblog_com/hwawai/1.png" width=525 border=0><br><br><br>&nbsp;<br><img height=511 alt="" src="http://www.cppblog.com/images/cppblog_com/hwawai/2.png" width=525 border=0></p>
<p><br><br><br>这是根据原代码例子改的中文版界面,主要是在OnInitDialog里面的代码我都写了注释,有兴趣大家一起研究一下</p>
<p>BOOL CPropGridDlg::OnInitDialog()<br>{<br>&nbsp;// &nbsp;CDialog::OnInitDialog();<br>&nbsp;CPropertyGridDlgBase::OnInitDialog();</p>
<p>&nbsp;// 将\&#8220;关于...\&#8221;菜单项添加到系统菜单中。</p>
<p>&nbsp;// IDM_ABOUTBOX 必须在系统命令范围内。<br>&nbsp;ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);<br>&nbsp;ASSERT(IDM_ABOUTBOX &lt; 0xF000);</p>
<p>&nbsp;CMenu* pSysMenu = GetSystemMenu(FALSE);<br>&nbsp;if (pSysMenu != NULL)<br>&nbsp;{<br>&nbsp;&nbsp;CString strAboutMenu;<br>&nbsp;&nbsp;strAboutMenu.LoadString(IDS_ABOUTBOX);<br>&nbsp;&nbsp;if (!strAboutMenu.IsEmpty())<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_SEPARATOR);<br>&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<p>&nbsp;// 设置此对话框的图标。当应用程序主窗口不是对话框时，框架将自动<br>&nbsp;//&nbsp; 执行此操作<br>&nbsp;SetIcon(m_hIcon, TRUE);&nbsp;&nbsp;&nbsp;// 设置大图标<br>&nbsp;SetIcon(m_hIcon, FALSE);&nbsp;&nbsp;// 设置小图标</p>
<p>&nbsp;// TODO: 在此添加额外的初始化代码<br>&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;//&nbsp;获得图片框矩形<br>&nbsp;CRect rc;<br>&nbsp;m_wndPlaceHolder.GetWindowRect( &amp;rc );<br>&nbsp;//&nbsp;转为窗口坐标<br>&nbsp;ScreenToClient( &amp;rc );<br>&nbsp;//&nbsp;建立属性表<br>&nbsp;if ( m_wndPropertyGrid.Create( rc, this, IDC_PROPERTY_GRID&nbsp; ) )<br>&nbsp;{<br>&nbsp;&nbsp;m_wndPropertyGrid.SetVariableItemsHeight(TRUE);<br>&nbsp;&nbsp;//&nbsp;获取逻辑字体<br>&nbsp;&nbsp;LOGFONT lf;<br>&nbsp;&nbsp;GetFont()-&gt;GetLogFont( &amp;lf );<br>&nbsp;&nbsp;// create document settings category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pSettings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Document Settings"));<br>&nbsp;&nbsp;//&nbsp;设置TOOLTIP<br>&nbsp;&nbsp;pSettings-&gt;SetTooltip(_T("Document Settings Category"));</p>
<p>&nbsp;&nbsp;// add child items to category.<br>&nbsp;&nbsp;//&nbsp;建立bool内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemSaveOnClose = pSettings-&gt;AddChildItem(new CXTPPropertyGridItemBool(_T("SaveOnClose"), TRUE));<br>&nbsp;&nbsp;//&nbsp;建立字体内容<br>&nbsp;&nbsp;pSettings-&gt;AddChildItem(new CXTPPropertyGridItemFont(_T("WindowFont"), lf));<br>&nbsp;&nbsp;//&nbsp;建立size内容<br>&nbsp;&nbsp;pSettings-&gt;AddChildItem(new CXTPPropertyGridItemSize(_T("WindowSize"), CSize(100, 100)));<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;//&nbsp;展开<br>&nbsp;&nbsp;pSettings-&gt;Expand();<br>&nbsp;&nbsp;//&nbsp;选择<br>&nbsp;&nbsp;pItemSaveOnClose-&gt;Select();</p>
<p>&nbsp;&nbsp;// create global settings category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pGlobals&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Global Settings"));</p>
<p>&nbsp;&nbsp;// add child items to category.<br>&nbsp;&nbsp;//&nbsp;建立只读字符串内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemGreeting = pGlobals-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Greeting Text"), _T("Welcome to your application!")));<br>&nbsp;&nbsp;pItemGreeting-&gt;SetReadOnly(TRUE);<br>&nbsp;&nbsp;//&nbsp;建立整数内容<br>&nbsp;&nbsp;pGlobals-&gt;AddChildItem(new CXTPPropertyGridItemNumber(_T("ItemsInMRUList"), 4));<br>&nbsp;&nbsp;//&nbsp;设置说明<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemRate&nbsp;&nbsp;&nbsp;&nbsp; = pGlobals-&gt;AddChildItem(new CXTPPropertyGridItemNumber(_T("MaxRepeatRate"), 10));<br>&nbsp;&nbsp;pItemRate-&gt;SetDescription(_T("The rate in milliseconds that the text will repeat."));<br>&nbsp;&nbsp;//&nbsp;建立color内容<br>&nbsp;&nbsp;pGlobals-&gt;AddChildItem(new CXTPPropertyGridItemColor(_T("ToolbarColor"), RGB(255, 192,128)));</p>
<p>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;// Version category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pVersion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Version"));</p>
<p>&nbsp;&nbsp;// add child items to category.<br>&nbsp;&nbsp;//&nbsp;建立只读字符串内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemVersion&nbsp; = pVersion-&gt;AddChildItem(new CXTPPropertyGridItem(_T("AppVersion"), _T("1.0")));<br>&nbsp;&nbsp;pItemVersion-&gt;SetReadOnly(TRUE);<br>&nbsp;&nbsp;//&nbsp;使用资源建立字符串内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemLanguage = pVersion-&gt;AddChildItem(new CXTPPropertyGridItem(ID_ITEM_VERSION_LANGUAGE, _T("English (United States)")));<br>&nbsp;&nbsp;// 展开分类<br>&nbsp;&nbsp;pVersion-&gt;Expand();</p>
<p>&nbsp;&nbsp;//&nbsp;将combo连接到字符串内容中<br>&nbsp;&nbsp;//&nbsp;测试结果&nbsp;只要不是只读的字符串内容就可连接combo 步骤如下<br>&nbsp;&nbsp;//&nbsp;获取item的Constraints<br>&nbsp;&nbsp;CXTPPropertyGridItemConstraints* pList = pItemLanguage-&gt;GetConstraints();<br>&nbsp;&nbsp;//&nbsp;添加combo内容<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("Neutral"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("Arabic"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("German"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("Chinese(Taiwan)"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("English (United Kingdom)"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("English (United States)"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("France"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("Russian"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("简体中文"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("英文"));<br>&nbsp;&nbsp;pList-&gt;AddConstraint(_T("日文"));<br>&nbsp;&nbsp;//&nbsp;设置combo为可编辑组合框<br>&nbsp;&nbsp;pItemLanguage-&gt;SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit);</p>
<p>&nbsp;&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;// Dynamic Options<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pCategoryDynamic = m_wndPropertyGrid.AddCategory(_T("Dynamic Options"));<br>&nbsp;&nbsp;//&nbsp;建立bool内容<br>&nbsp;&nbsp;//&nbsp;这是第2种方式&nbsp;强制转换指针方式<br>&nbsp;&nbsp;CXTPPropertyGridItemBool* pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic-&gt;AddChildItem(<br>&nbsp;&nbsp;&nbsp;new CXTPPropertyGridItemBool(_T("Advanced"), FALSE));<br>&nbsp;&nbsp;//&nbsp;设置ID<br>&nbsp;&nbsp;pItemBool-&gt;SetID(501);<br>&nbsp;&nbsp;//&nbsp;设置checkbox样式<br>&nbsp;&nbsp;pItemBool-&gt;SetCheckBoxStyle();<br>&nbsp;&nbsp;//&nbsp;建立bool内容checkbox样式并隐藏<br>&nbsp;&nbsp;pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic-&gt;AddChildItem(<br>&nbsp;&nbsp;&nbsp;new CXTPPropertyGridItemBool(_T("Option 1"), FALSE));<br>&nbsp;&nbsp;pItemBool-&gt;SetHidden(TRUE);<br>&nbsp;&nbsp;pItemBool-&gt;SetCheckBoxStyle();<br>&nbsp;&nbsp;//&nbsp;建立bool内容checkbox样式并隐藏<br>&nbsp;&nbsp;pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic-&gt;AddChildItem(<br>&nbsp;&nbsp;&nbsp;new CXTPPropertyGridItemBool(_T("Option 2"), FALSE));<br>&nbsp;&nbsp;pItemBool-&gt;SetHidden(TRUE);<br>&nbsp;&nbsp;pItemBool-&gt;SetCheckBoxStyle();<br>&nbsp;&nbsp;//&nbsp;建立bool内容checkbox样式并隐藏<br>&nbsp;&nbsp;pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic-&gt;AddChildItem(<br>&nbsp;&nbsp;&nbsp;new CXTPPropertyGridItemBool(_T("Option 3"), FALSE));<br>&nbsp;&nbsp;pItemBool-&gt;SetHidden(TRUE);<br>&nbsp;&nbsp;pItemBool-&gt;SetCheckBoxStyle();<br>&nbsp;&nbsp;//&nbsp;建立bool内容checkbox样式并隐藏和只读<br>&nbsp;&nbsp;pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic-&gt;AddChildItem(<br>&nbsp;&nbsp;&nbsp;new CXTPPropertyGridItemBool(_T("Option 4"), TRUE));<br>&nbsp;&nbsp;pItemBool-&gt;SetHidden(TRUE);<br>&nbsp;&nbsp;pItemBool-&gt;SetCheckBoxStyle();<br>&nbsp;&nbsp;pItemBool-&gt;SetReadOnly();</p>
<p>&nbsp;&nbsp;// create standard items category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pStandard&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Standard Items"));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItem(_T("String item")));<br>&nbsp;&nbsp;//&nbsp;建立多行字符串下拉框&nbsp;帮助文件中没有<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemMultilineString(_T("Multiline String item"), _T("1\r\n2")));<br>&nbsp;&nbsp;//&nbsp;建立整数内容<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemNumber(_T("Integer item")));<br>&nbsp;&nbsp;//&nbsp;建立double内容并设置初始值和数据格式<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemDouble(_T("Double item"),0,"%0.3f"));<br>&nbsp;&nbsp;//&nbsp;建立颜色bool字体<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemColor(_T("Color item")));<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemBool(_T("Bool item")));<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemFont(_T("Font item"), lf));<br>&nbsp;&nbsp;// mfc时间类COleDateTime<br>&nbsp;&nbsp;COleDateTime dates(1981, 1, 26, 0, 0, 0 );<br>&nbsp;&nbsp;//&nbsp;使用COleDateTime建立时间内容<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates));<br>&nbsp;&nbsp;//&nbsp;建立size内容<br>&nbsp;&nbsp;pStandard-&gt;AddChildItem(new CXTPPropertyGridItemSize(_T("Size item")));<br>&nbsp;&nbsp;//&nbsp;建立enum内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItem = pStandard-&gt;AddChildItem(new CXTPPropertyGridItemEnum(_T("Enum item"), 1));<br>&nbsp;&nbsp;//&nbsp;添加enum记录到enum内容呈combo样式<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 98"), 1);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 2000"), 2);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows XP"), 3);</p>
<p>&nbsp;&nbsp;//&nbsp;建立flag内容&nbsp;第2个参数"1+2"为初始值&nbsp;即"Windows 98"和"Windows 2000"为真<br>&nbsp;&nbsp;//&nbsp;且flag的元素数值需为1,2,4,8,16,32...<br>&nbsp;&nbsp;pItem = pStandard-&gt;AddChildItem(new CXTPPropertyGridItemFlags(_T("Flag item"), 1 + 2));<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("All Windows"), 1 + 2 + 4);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 98"), 1);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 2000"), 2);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows XP"), 4);&nbsp;</p>
<p>&nbsp;&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pButtons&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Standard Buttons"));<br>&nbsp;&nbsp;//&nbsp;建立bool内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItemBool(_T("Combo Button")));<br>&nbsp;&nbsp;//&nbsp;设置为combo样式<br>&nbsp;&nbsp;pItem-&gt;SetFlags(xtpGridItemHasComboButton);<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Expand Button")));<br>&nbsp;&nbsp;//&nbsp;设置为可编辑并带有扩展按钮样式<br>&nbsp;&nbsp;pItem-&gt;SetFlags(xtpGridItemHasEdit | xtpGridItemHasExpandButton);<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItem(_T("2 Buttons")));<br>&nbsp;&nbsp;//&nbsp;设置ID<br>&nbsp;&nbsp;pItem-&gt;SetID(510);<br>&nbsp;&nbsp;//&nbsp;设置为可编辑并带有扩展按钮样式和combo<br>&nbsp;&nbsp;pItem-&gt;SetFlags(xtpGridItemHasEdit | xtpGridItemHasComboButton | xtpGridItemHasExpandButton);<br>&nbsp;&nbsp;//&nbsp;添加combo内容<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 2000"), 1);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Windows 98"), 2);<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Text Button")));<br>&nbsp;&nbsp;//&nbsp;添加按钮到字符串内容行尾<br>&nbsp;&nbsp;CXTPPropertyGridInplaceButton* pButton = pItem-&gt;GetInplaceButtons()-&gt;AddButton(new CXTPPropertyGridInplaceButton(1));<br>&nbsp;&nbsp;//&nbsp;设置按钮文本<br>&nbsp;&nbsp;pButton-&gt;SetCaption(_T("Find"));<br>&nbsp;&nbsp;//&nbsp;设置按钮宽度<br>&nbsp;&nbsp;pButton-&gt;SetWidth(100);<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Image Button")));<br>&nbsp;&nbsp;//&nbsp;添加按钮到字符串内容行尾<br>&nbsp;&nbsp;pButton = pItem-&gt;GetInplaceButtons()-&gt;AddButton(new CXTPPropertyGridInplaceButton(1));<br>&nbsp;&nbsp;//&nbsp;设置按钮图标索引<br>&nbsp;&nbsp;pButton-&gt;SetIconIndex(100);<br>&nbsp;&nbsp;//&nbsp;UINT数组&nbsp;&nbsp;估计是一个临时存储单元用于添加图标到按钮<br>&nbsp;&nbsp;//&nbsp;上面的100和下面的100以及设置图标语句中的btnFilter是相联系的<br>&nbsp;&nbsp;UINT btnFilter[] = {100};<br>&nbsp;&nbsp;//&nbsp;设置图标<br>&nbsp;&nbsp;m_wndPropertyGrid.GetImageManager()-&gt;SetIcons(IDB_BITMAP_FILTER, btnFilter, 1, 0);<br>&nbsp;&nbsp;//&nbsp;设置ToolTip在图标上<br>&nbsp;&nbsp;pButton-&gt;SetTooltip(_T("Set Filter for item"));<br>&nbsp;&nbsp;//&nbsp;建立整形内容<br>&nbsp;&nbsp;pItem = pButtons-&gt;AddChildItem(new CXTPPropertyGridItemNumber(_T("Spin And Slider"), 60));<br>&nbsp;&nbsp;//&nbsp;默认0-100暂时没有找到设置范围的方法<br>&nbsp;&nbsp;//&nbsp;添加水平滑块连接到整形内容<br>&nbsp;&nbsp;pItem-&gt;AddSliderControl();<br>&nbsp;&nbsp;//&nbsp;添加上下按钮连接到整形内容<br>&nbsp;&nbsp;pItem-&gt;AddSpinButton();</p>
<p>&nbsp;&nbsp;//////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;CXTPPropertyGridItem* pMetrics&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Custom Metrics"));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pMetrics-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Value Colors"), _T("")));<br>&nbsp;&nbsp;//&nbsp;设置文字颜色&nbsp;可以采用RGB宏或DWORD<br>&nbsp;&nbsp;//&nbsp;文字和背景颜色会呈现混合效果<br>&nbsp;&nbsp;pItem-&gt;GetValueMetrics()-&gt;m_clrFore = 0x00ff00;<br>&nbsp;&nbsp;//&nbsp;设置背景颜色<br>&nbsp;&nbsp;pItem-&gt;GetValueMetrics()-&gt;m_clrBack = RGB(255, 0, 255);<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pMetrics-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Caption Colors"), _T("")));<br>&nbsp;&nbsp;//&nbsp;设置文字颜色<br>&nbsp;&nbsp;pItem-&gt;GetCaptionMetrics()-&gt;m_clrFore = 0xFF0000;<br>&nbsp;&nbsp;//&nbsp;设置背景颜色<br>&nbsp;&nbsp;pItem-&gt;GetCaptionMetrics()-&gt;m_clrBack = RGB(235, 235, 235);<br>&nbsp;&nbsp;//&nbsp;建立enum内容<br>&nbsp;&nbsp;pItem = pMetrics-&gt;AddChildItem(new CXTPPropertyGridItemEnum(_T("Images"), 2));<br>&nbsp;&nbsp;//&nbsp;内加enum记录并带有图片<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Green"), 0, 0);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Red"), 1, 1);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Yellow"), 2, 2);<br>&nbsp;&nbsp;pItem-&gt;GetConstraints()-&gt;AddConstraint(_T("Blue"), 3, 3);<br>&nbsp;&nbsp;//&nbsp;设置enum内容的内容图片<br>&nbsp;&nbsp;pItem-&gt;GetValueMetrics()-&gt;m_nImage = 2;<br>&nbsp;&nbsp;//&nbsp;设置enum内容的标题图片<br>&nbsp;&nbsp;pItem-&gt;GetCaptionMetrics()-&gt;m_nImage = 4;<br>&nbsp;&nbsp;//&nbsp;设置mask颜色<br>&nbsp;&nbsp;m_wndPropertyGrid.GetImageManager()-&gt;SetMaskColor(0xC0C0C0);<br>&nbsp;&nbsp;//&nbsp;设置图标<br>&nbsp;&nbsp;m_wndPropertyGrid.GetImageManager()-&gt;SetIcons(IDB_BITMAP_CONSTRAINTS, 0, 5, CSize(20, 14));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pItem = pMetrics-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Variable Height"), _T("Item")));<br>&nbsp;&nbsp;//&nbsp;建立内容块高度<br>&nbsp;&nbsp;pItem-&gt;SetHeight(32);<br>&nbsp;&nbsp;//&nbsp;设置为combo样式<br>&nbsp;&nbsp;pItem-&gt;SetFlags(xtpGridItemHasComboButton);<br>&nbsp;&nbsp;//&nbsp;建立多行字符串内容<br>&nbsp;&nbsp;//&nbsp;貌似在多行中无法真正的多行编辑 没有找到让文本换行即支持文本回车的方式<br>&nbsp;&nbsp;pItem = pMetrics-&gt;AddChildItem(new CXTPPropertyGridItem(_T("MultiLine"), _T("Codejock Software\r\n428 Corunna Avenue\r\nOwosso, Michigan 48867 USA")));<br>&nbsp;&nbsp;//&nbsp;设置能见得文本行数<br>&nbsp;&nbsp;pItem-&gt;SetMultiLinesCount(3);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;// create custom items category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;//&nbsp;以下为自定义类型 代码见CustomItems.h<br>&nbsp;&nbsp;CXTPPropertyGridItem* pCustom&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Custom Items"));<br>&nbsp;&nbsp;// add child items to category.<br>&nbsp;&nbsp;//&nbsp;建立icon内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemIcon = pCustom-&gt;AddChildItem(new CCustomItemIcon(_T("Icon"), m_hIcon));<br>&nbsp;&nbsp;pItemIcon-&gt;SetDescription(_T("This sample shows how to override draw function"));<br>&nbsp;&nbsp;//&nbsp;建立DockPadding内容<br>&nbsp;&nbsp;//&nbsp;DockPadding为4个数的组合<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemDock = pCustom-&gt;AddChildItem(new CCustomItemChilds(_T("DockPadding"), CRect(100, 20, 400, 50)));<br>&nbsp;&nbsp;pItemDock-&gt;SetDescription(_T("This sample shows how to add item with childs"));<br>&nbsp;&nbsp;//&nbsp;建立颜色内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemColor(_T("CustomCombolist"), RGB(0xFF, 0x80, 0x40)));<br>&nbsp;&nbsp;//&nbsp;建立打开对话框内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemFileBox(_T("File Box")));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemMaskEdit = pCustom-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Mask Edit"), _T("Phone No: (816) 220-0000")));<br>&nbsp;&nbsp;//&nbsp;设置字符串MASK<br>&nbsp;&nbsp;pItemMaskEdit-&gt;SetMask(_T("Phone No: (000) 000-0000"), _T("Phone No: (___) ___-____"));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemPassword = pCustom-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Password"), _T("Text")));<br>&nbsp;&nbsp;//&nbsp;设置字符串Password<br>&nbsp;&nbsp;pItemPassword-&gt;SetPasswordMask();<br>&nbsp;&nbsp;//&nbsp;建立日期内容<br>&nbsp;&nbsp;COleDateTime date(1981, 1, 26, 0, 0, 0 );<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CXTPPropertyGridItemDate(_T("Date"), date));<br>&nbsp;&nbsp;//&nbsp;建立大写字母内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemUpperCase(_T("UpperCase")));<br>&nbsp;&nbsp;//&nbsp;建立ip地址内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemIPAddress(_T("IP Address")));&nbsp;&nbsp;<br>&nbsp;&nbsp;//&nbsp;建立PopupMenu内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemMenu(_T("Popup Menu")));<br>&nbsp;&nbsp;//&nbsp;建立字符串内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemEdit(_T("Output"), _T("Debug")));</p>
<p>&nbsp;&nbsp;// add multi level tree node.<br>&nbsp;&nbsp;//&nbsp;建立树形内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pCategoryOne&nbsp;&nbsp;&nbsp; = pCustom-&gt;AddChildItem(new CXTPPropertyGridItemCategory(_T("First Sub Category")));<br>&nbsp;&nbsp;CXTPPropertyGridItem* pCategoryTwo&nbsp;&nbsp;&nbsp; = pCategoryOne-&gt;AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 1")));<br>&nbsp;&nbsp;pCategoryTwo-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T("")));<br>&nbsp;&nbsp;pCategoryTwo-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Third Level 2"), _T("")));<br>&nbsp;&nbsp;CXTPPropertyGridItem* pCategoryTwo2&nbsp;&nbsp; = pCategoryOne-&gt;AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 2")));<br>&nbsp;&nbsp;pCategoryTwo2-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T("")));<br>&nbsp;&nbsp;//&nbsp;建立树形内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemOne&nbsp;&nbsp;&nbsp; = pCustom-&gt;AddChildItem(new CXTPPropertyGridItem(_T("First Level"), _T("")));<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemTwo&nbsp;&nbsp;&nbsp; = pItemOne-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Second Level"), _T("")));<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemThird&nbsp;&nbsp;&nbsp;&nbsp; = pItemTwo-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Third Level"), _T("")));<br>&nbsp;&nbsp;pItemThird-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 1"), _T("")));<br>&nbsp;&nbsp;pItemThird-&gt;AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 2"), _T("")));</p>
<p><br>&nbsp;&nbsp;// create custom items category.<br>&nbsp;&nbsp;//&nbsp;建立分类<br>&nbsp;&nbsp;pCustom&nbsp;&nbsp; = m_wndPropertyGrid.AddCategory(_T("Custom Butons"));<br>&nbsp;&nbsp;//&nbsp;建立上下按钮内容<br>&nbsp;&nbsp;CXTPPropertyGridItem* pItemSpin = pCustom-&gt;AddChildItem(new CCustomItemSpin(_T("SpinButton")));<br>&nbsp;&nbsp;pItemSpin-&gt;SetDescription(_T("This sample shows how to add new button type"));<br>&nbsp;&nbsp;//&nbsp;建立水平滑块内容<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemSlider(_T("Slider")));<br>&nbsp;&nbsp;//&nbsp;建立CheckBox内容<br>&nbsp;&nbsp;CCustomItemCheckBox* pItemCheckBox = (CCustomItemCheckBox*)pCustom-&gt;AddChildItem(new CCustomItemCheckBox(_T("Check Box")));<br>&nbsp;&nbsp;pItemCheckBox-&gt;SetValue(_T("agree with conditions"));<br>&nbsp;&nbsp;pItemCheckBox-&gt;SetBool(TRUE);<br>&nbsp;&nbsp;//&nbsp;建立自定义按钮<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemButton(_T("Left Origin"), FALSE, TRUE));<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemButton(_T("Right Origin"), FALSE, TRUE));<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemButton(_T("Pointer"), TRUE, TRUE));<br>&nbsp;&nbsp;pCustom-&gt;AddChildItem(new CCustomItemButton(_T("Gradient"), TRUE, FALSE));<br>&nbsp;}</p>
<p><br>&nbsp;m_groupAppearance.SubclassDlgItem(IDC_GBOX_APPEAR, this);<br>&nbsp;m_groupSort.SubclassDlgItem(IDC_GBOX_SORT, this);<br>&nbsp;m_groupColor.SubclassDlgItem(IDC_GBOX_COLOR, this);</p>
<p>&nbsp;// Set control resizing.<br>&nbsp;SetResize(IDC_PROPERTY_GRID, SZ_TOP_LEFT, SZ_BOTTOM_RIGHT);<br>// <br>&nbsp;&nbsp;SetResize(IDC_GBOX_APPEAR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp; &nbsp;SetResize(IDC_CHK_TOOLBAR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_CHK_HELP,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;SetResize(IDC_CHK_VERBS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;SetResize(IDC_CHK_DOUBLE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;SetResize(IDC_CHK_TABITEMS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_CHK_HIGHLIGHT,&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;SetResize(IDC_COMBO_THEME,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp; &nbsp;SetResize(IDC_GBOX_SORT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp; &nbsp;SetResize(IDC_SORT_CATEGORIES,&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;SetResize(IDC_SORT_ALPHABETICAL, SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_SORT_NOSORT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;&nbsp; SetResize(IDC_GBOX_COLOR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_CHK_CUSTOMCOLORS,&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_BUTTON_SWITCHSTATE,&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp;&nbsp;SetResize(IDC_COMBO_BORDER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp; &nbsp;SetResize(IDC_CHECK_SHOWBUTTONS, SZ_TOP_RIGHT, SZ_TOP_RIGHT);<br>&nbsp; &nbsp;SetResize(IDC_CHK_RIGHTTOLEFT, SZ_TOP_RIGHT, SZ_TOP_RIGHT);</p>
<p>&nbsp;// Load window placement<br>&nbsp;AutoLoadPlacement(_T("PropertyGridSample"));</p>
<p>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeDefault"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeNativeWinXP"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeOffice2003"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeCool"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeSimple"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeDelphi"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeWhidbey"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeOfficeXP"));<br>&nbsp;&nbsp;m_cmbTheme.AddString(_T("xtpGridThemeOffice2007"));<br>&nbsp;&nbsp;m_cmbTheme.SetCurSel(0);<br>&nbsp;<br>&nbsp;&nbsp;m_cmbBorder.AddString(_T("xtpGridBorderNone"));<br>&nbsp;&nbsp;m_cmbBorder.AddString(_T("xtpGridBorderFlat"));<br>&nbsp;&nbsp;m_cmbBorder.AddString(_T("xtpGridBorderStaticEdge"));<br>&nbsp;&nbsp;m_cmbBorder.AddString(_T("xtpGridBorderClientEdge"));<br>&nbsp;&nbsp;m_cmbBorder.SetCurSel(3);</p>
<p>&nbsp;return TRUE;&nbsp; // 除非设置了控件的焦点，否则返回 TRUE<br>}&nbsp;</p>
<img src ="http://www.cppblog.com/hwawai/aggbug/59334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hwawai/" target="_blank">hwawai</a> 2008-08-19 13:37 <a href="http://www.cppblog.com/hwawai/archive/2008/08/19/59334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>