青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

MFC+D3D+ToolKitPro

MFC+D3D+ToolKitPro

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  3 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks

2008年8月21日 #

由于最近寫工具要使用xml來存儲腳本,所以看了一些xml的c++相關(guān)內(nèi)容
網(wǎng)上好多關(guān)于tinyxml的文檔看了好多總是覺得比較麻煩,所以決定自己寫一個類來封裝它
這個類封裝的不是很全面,但已經(jīng)基本夠我使用了,有興趣的朋友可以再繼續(xù)完善他,
讓不懂xml內(nèi)部原理的朋友們也可以方便使用xml格式文件存儲數(shù)據(jù)

這是測試項目,vc71版本,我喜歡用2003,哈哈
/Files/hwawai/CXML_vc71.7z
如果大家有什么更好的代碼來處理xml希望踴躍交流

頭文件
#pragma once
#include<string>
#include "tinyxml.h"
using namespace std;
class CXML
{
public:
 CXML(void);
 ~CXML(void);
 
 bool ParseXmlFile(const char* xmlFile);
 TiXmlElement* GetElement(const char* parentTitle,const char* title);//此函數(shù)需一層一層遞進
 bool getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string& reslut);
 bool getFirstElementValue(const char* title,string& result);
 bool getNextElementValue(const char* title,string& result);
 TiXmlElement* getRootElement();
 void Clear();
 //////////////////////////////////////////////////////////////////////////
 TiXmlElement* addXmlRootElement(const char* title);
 TiXmlElement* addXmlChildElement(TiXmlElement* pElement,const char* title);
 void addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value);
 void addXmlDeclaration(const char* vesion="1.0",const char* encoding="gb2312",const char* standalone="");
 void addElementValue(TiXmlElement* pElement,const char* value);
 void addXmlComment(TiXmlElement* pElement,const char* Comment);
 void saveFile(const char* file);
protected:
 TiXmlDocument m_xml;
 TiXmlElement* pElement;   // 獲取NextElementValue使用,屬臨時變量
 TiXmlElement* getFirstElement(const char* ElementMark,TiXmlElement* pcrElement);
};

源文件
#include "StdAfx.h"
#include ".\xml.h"

CXML::CXML(void)
{
}

CXML::~CXML(void)
{
}

bool CXML::ParseXmlFile(const char* xmlFile)
{
 return m_xml.LoadFile(xmlFile)?1:0;
}

TiXmlElement* CXML::GetElement(const char* parentTitle,const char* title)
{
 TiXmlNode* _=m_xml.FirstChildElement(parentTitle);
 for(_=_->FirstChild();_;_=_->NextSibling())
 {
  if (!strcmp(title,_->Value()))
  {
   return _->ToElement();
  }
 }
 return 0;
}

bool CXML::getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string& reslut)
{
 if(Element->Attribute(AttributeName))
 {
  reslut=Element->Attribute(AttributeName);
  return 1;
 }
 return 0;
}

bool CXML::getFirstElementValue(const char* title,string& result)
{
 if(!title)
  return 0;
 TiXmlElement* _(0);
 _=m_xml.RootElement();
 _=getFirstElement(title,_);
 if(_)
 {
  pElement=_;
  result=pElement->GetText();
  return 1;
 }
 return 0;
}

bool CXML::getNextElementValue(const char* title,string& result)
{
 result="";
 pElement=pElement->NextSiblingElement(title);
 if(pElement)
 {
  result=pElement->GetText();
  return 1;
 }
 return 0;
}

TiXmlElement* CXML::getRootElement()
{
 return m_xml.RootElement();
}

void CXML::Clear()
{
 m_xml.Clear();
}

//////////////////////////////////////////////////////////////////////////
TiXmlElement* CXML::addXmlRootElement(const char* title)
{
 TiXmlElement* _=new TiXmlElement(title);
 m_xml.LinkEndChild(_);
 return _;
}

TiXmlElement* CXML::addXmlChildElement(TiXmlElement* pElement,const char* title)
{
 if(pElement)
 {
  TiXmlElement* _=new TiXmlElement(title);
  pElement->LinkEndChild(_);
  return _;
 }
 return 0;
}

void CXML::addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value)
{
 if(pElement)
 {
  pElement->SetAttribute(name,value);
 }
}

void CXML::addXmlDeclaration(const char* vesion,const char* encoding,const char* standalone)
{
 TiXmlDeclaration *_=new TiXmlDeclaration(vesion,encoding,standalone);
 m_xml.LinkEndChild(_);
}

void CXML::addElementValue(TiXmlElement *pElement,const char* value)
{
 if(pElement)
 {
  TiXmlText *_=new TiXmlText(value);
  pElement->LinkEndChild(_);
 }
}
 
void CXML::addXmlComment(TiXmlElement* pElement,const char* Comment)
{
 if(pElement)
 {
  TiXmlComment *_=new TiXmlComment(Comment);
  pElement->LinkEndChild(_);
 }
}

void CXML::saveFile(const char* file)
{
 m_xml.SaveFile(file);
}

//////////////////////////////////////////////////////////////////////////
TiXmlElement* CXML::getFirstElement(const char* ElementMark,TiXmlElement* pcrElement)
{
 TiXmlElement* _=pcrElement; 
 while(_)
 {
  if(strcmp(_->Value(),ElementMark)==0)
  {
   //printf("%s\r\n",pElementtmp->Value());
   return _;
  }
  else
  {
   TiXmlElement* nextElement=_->FirstChildElement();
   while(nextElement)
   {
    //printf("%s\r\n",nextElement->Value());
    if(strcmp(nextElement->Value(),ElementMark)==0)
    {
     return nextElement;
    }
    else
    {
     TiXmlElement* reElement=NULL;
     reElement=getFirstElement(ElementMark,nextElement);
     if(reElement)
     {
      return reElement;
     }
    }
    nextElement=nextElement->NextSiblingElement();
   }
  }
  _=_->NextSiblingElement();
 }
 return NULL;
}


stdafx文件
#pragma once
#include <iostream>
#include <tchar.h>

用來測試的主cpp文件
#include "stdafx.h"
#include "tinyxml//XML.h"
#include <iostream>

void createXML()
{
 CXML xml;
 xml.addXmlDeclaration("1.0","gb2312","");
 TiXmlElement* root=xml.addXmlRootElement("fields");
 TiXmlElement* pElement=xml.addXmlChildElement(root,"pos");
 xml.addXmlAttribute(pElement,"x","100");
 xml.addXmlAttribute(pElement,"y","200.1");
 xml.addXmlAttribute(pElement,"z","0.123");

 TiXmlElement* pElement2=xml.addXmlChildElement(root,"dest");
 xml.addXmlAttribute(pElement2,"x","一二三");
 xml.addXmlAttribute(pElement2,"y","一二");
 xml.addXmlAttribute(pElement2,"z","一");
 xml.saveFile("1.xml");
}

void CreateXML1()
{
 CXML xml;
 xml.addXmlDeclaration();
    TiXmlElement* root=xml.addXmlRootElement("fields");
 xml.addXmlComment(root,"AAAAAAA");
 TiXmlElement* pElement=xml.addXmlChildElement(root,"pos_x");
 xml.addElementValue(pElement,"1.3");
 pElement=xml.addXmlChildElement(root,"pos_x");
 xml.addElementValue(pElement,"30.1");
 pElement=xml.addXmlChildElement(root,"pos_x");
 xml.addElementValue(pElement,"30ssss.1");
 xml.saveFile("2.xml");
}


void LoadXML()
{
 CXML xml;
 xml.ParseXmlFile("1.xml");
 string a;
 TiXmlElement* pElement=xml.GetElement("fields","dest");
   xml.getElementAttributeValue(pElement,"x",a);
  cout<<a<<endl;
  xml.getElementAttributeValue(pElement,"y",a);
  cout<<a<<endl;
  xml.getElementAttributeValue(pElement,"z",a);
  cout<<a<<endl;
}

void LoadXML1()
{
 CXML xml;
 xml.ParseXmlFile("2.xml");
 string a;
 xml.getFirstElementValue("pos_x",a);
 cout<<a<<endl;
 xml.getNextElementValue("pos_x",a);
  cout<<a<<endl;
 xml.getNextElementValue("pos_x",a);
 cout<<a<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
//  createXML();
//  LoadXML(); 
  CreateXML1();
  LoadXML1(); 
 getchar();
 return 0;
}


生成的xml文件
1.xml
<?xml version="1.0" encoding="gb2312" ?>
<fields>
    <pos x="100" y="200.1" z="0.123" />
    <dest x="一二三" y="一二" z="一" />
</fields>

2.xml
<?xml version="1.0" encoding="gb2312" ?>
<fields>
    <!--AAAAAAA-->
    <pos_x>1.3</pos_x>
    <pos_x>30.1</pos_x>
    <pos_x>30ssss.1</pos_x>
</fields>

posted @ 2008-08-21 15:45 hwawai 閱讀(3180) | 評論 (6)編輯 收藏

2008年8月19日 #

最近做了個模型查看器使用了ToolKitPro
中的屬性表組件









覺得這個組件太適合寫一些游戲工具之類的了。
posted @ 2008-08-19 13:51 hwawai 閱讀(1197) | 評論 (0)編輯 收藏


這篇是好久之前自己最初貼在cdsn上的帖子,現(xiàn)在也挪到這里算是開篇吧




 




這是根據(jù)原代碼例子改的中文版界面,主要是在OnInitDialog里面的代碼我都寫了注釋,有興趣大家一起研究一下

BOOL CPropGridDlg::OnInitDialog()
{
 //  CDialog::OnInitDialog();
 CPropertyGridDlgBase::OnInitDialog();

 // 將\“關(guān)于...\”菜單項添加到系統(tǒng)菜單中。

 // IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動
 //  執(zhí)行此操作
 SetIcon(m_hIcon, TRUE);   // 設(shè)置大圖標(biāo)
 SetIcon(m_hIcon, FALSE);  // 設(shè)置小圖標(biāo)

 // TODO: 在此添加額外的初始化代碼
 //////////////////////////////////////////////////////////////////////////
 // 獲得圖片框矩形
 CRect rc;
 m_wndPlaceHolder.GetWindowRect( &rc );
 // 轉(zhuǎn)為窗口坐標(biāo)
 ScreenToClient( &rc );
 // 建立屬性表
 if ( m_wndPropertyGrid.Create( rc, this, IDC_PROPERTY_GRID  ) )
 {
  m_wndPropertyGrid.SetVariableItemsHeight(TRUE);
  // 獲取邏輯字體
  LOGFONT lf;
  GetFont()->GetLogFont( &lf );
  // create document settings category.
  // 建立分類
  CXTPPropertyGridItem* pSettings        = m_wndPropertyGrid.AddCategory(_T("Document Settings"));
  // 設(shè)置TOOLTIP
  pSettings->SetTooltip(_T("Document Settings Category"));

  // add child items to category.
  // 建立bool內(nèi)容
  CXTPPropertyGridItem* pItemSaveOnClose = pSettings->AddChildItem(new CXTPPropertyGridItemBool(_T("SaveOnClose"), TRUE));
  // 建立字體內(nèi)容
  pSettings->AddChildItem(new CXTPPropertyGridItemFont(_T("WindowFont"), lf));
  // 建立size內(nèi)容
  pSettings->AddChildItem(new CXTPPropertyGridItemSize(_T("WindowSize"), CSize(100, 100)));
  
  // 展開
  pSettings->Expand();
  // 選擇
  pItemSaveOnClose->Select();

  // create global settings category.
  // 建立分類
  CXTPPropertyGridItem* pGlobals      = m_wndPropertyGrid.AddCategory(_T("Global Settings"));

  // add child items to category.
  // 建立只讀字符串內(nèi)容
  CXTPPropertyGridItem* pItemGreeting = pGlobals->AddChildItem(new CXTPPropertyGridItem(_T("Greeting Text"), _T("Welcome to your application!")));
  pItemGreeting->SetReadOnly(TRUE);
  // 建立整數(shù)內(nèi)容
  pGlobals->AddChildItem(new CXTPPropertyGridItemNumber(_T("ItemsInMRUList"), 4));
  // 設(shè)置說明
  CXTPPropertyGridItem* pItemRate     = pGlobals->AddChildItem(new CXTPPropertyGridItemNumber(_T("MaxRepeatRate"), 10));
  pItemRate->SetDescription(_T("The rate in milliseconds that the text will repeat."));
  // 建立color內(nèi)容
  pGlobals->AddChildItem(new CXTPPropertyGridItemColor(_T("ToolbarColor"), RGB(255, 192,128)));

  
  
  //////////////////////////////////////////////////////////////////////////
  // Version category.
  // 建立分類
  CXTPPropertyGridItem* pVersion      = m_wndPropertyGrid.AddCategory(_T("Version"));

  // add child items to category.
  // 建立只讀字符串內(nèi)容
  CXTPPropertyGridItem* pItemVersion  = pVersion->AddChildItem(new CXTPPropertyGridItem(_T("AppVersion"), _T("1.0")));
  pItemVersion->SetReadOnly(TRUE);
  // 使用資源建立字符串內(nèi)容
  CXTPPropertyGridItem* pItemLanguage = pVersion->AddChildItem(new CXTPPropertyGridItem(ID_ITEM_VERSION_LANGUAGE, _T("English (United States)")));
  // 展開分類
  pVersion->Expand();

  // 將combo連接到字符串內(nèi)容中
  // 測試結(jié)果 只要不是只讀的字符串內(nèi)容就可連接combo 步驟如下
  // 獲取item的Constraints
  CXTPPropertyGridItemConstraints* pList = pItemLanguage->GetConstraints();
  // 添加combo內(nèi)容
  pList->AddConstraint(_T("Neutral"));
  pList->AddConstraint(_T("Arabic"));
  pList->AddConstraint(_T("German"));
  pList->AddConstraint(_T("Chinese(Taiwan)"));
  pList->AddConstraint(_T("English (United Kingdom)"));
  pList->AddConstraint(_T("English (United States)"));
  pList->AddConstraint(_T("France"));
  pList->AddConstraint(_T("Russian"));
  pList->AddConstraint(_T("簡體中文"));
  pList->AddConstraint(_T("英文"));
  pList->AddConstraint(_T("日文"));
  // 設(shè)置combo為可編輯組合框
  pItemLanguage->SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit);

  //////////////////////////////////////////////////////////////////////////
  // Dynamic Options
  // 建立分類
  CXTPPropertyGridItem* pCategoryDynamic = m_wndPropertyGrid.AddCategory(_T("Dynamic Options"));
  // 建立bool內(nèi)容
  // 這是第2種方式 強制轉(zhuǎn)換指針方式
  CXTPPropertyGridItemBool* pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem(
   new CXTPPropertyGridItemBool(_T("Advanced"), FALSE));
  // 設(shè)置ID
  pItemBool->SetID(501);
  // 設(shè)置checkbox樣式
  pItemBool->SetCheckBoxStyle();
  // 建立bool內(nèi)容checkbox樣式并隱藏
  pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem(
   new CXTPPropertyGridItemBool(_T("Option 1"), FALSE));
  pItemBool->SetHidden(TRUE);
  pItemBool->SetCheckBoxStyle();
  // 建立bool內(nèi)容checkbox樣式并隱藏
  pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem(
   new CXTPPropertyGridItemBool(_T("Option 2"), FALSE));
  pItemBool->SetHidden(TRUE);
  pItemBool->SetCheckBoxStyle();
  // 建立bool內(nèi)容checkbox樣式并隱藏
  pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem(
   new CXTPPropertyGridItemBool(_T("Option 3"), FALSE));
  pItemBool->SetHidden(TRUE);
  pItemBool->SetCheckBoxStyle();
  // 建立bool內(nèi)容checkbox樣式并隱藏和只讀
  pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem(
   new CXTPPropertyGridItemBool(_T("Option 4"), TRUE));
  pItemBool->SetHidden(TRUE);
  pItemBool->SetCheckBoxStyle();
  pItemBool->SetReadOnly();

  // create standard items category.
  // 建立分類
  CXTPPropertyGridItem* pStandard   = m_wndPropertyGrid.AddCategory(_T("Standard Items"));
  // 建立字符串內(nèi)容
  pStandard->AddChildItem(new CXTPPropertyGridItem(_T("String item")));
  // 建立多行字符串下拉框 幫助文件中沒有
  pStandard->AddChildItem(new CXTPPropertyGridItemMultilineString(_T("Multiline String item"), _T("1\r\n2")));
  // 建立整數(shù)內(nèi)容
  pStandard->AddChildItem(new CXTPPropertyGridItemNumber(_T("Integer item")));
  // 建立double內(nèi)容并設(shè)置初始值和數(shù)據(jù)格式
  pStandard->AddChildItem(new CXTPPropertyGridItemDouble(_T("Double item"),0,"%0.3f"));
  // 建立顏色bool字體
  pStandard->AddChildItem(new CXTPPropertyGridItemColor(_T("Color item")));
  pStandard->AddChildItem(new CXTPPropertyGridItemBool(_T("Bool item")));
  pStandard->AddChildItem(new CXTPPropertyGridItemFont(_T("Font item"), lf));
  // mfc時間類COleDateTime
  COleDateTime dates(1981, 1, 26, 0, 0, 0 );
  // 使用COleDateTime建立時間內(nèi)容
  pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates));
  // 建立size內(nèi)容
  pStandard->AddChildItem(new CXTPPropertyGridItemSize(_T("Size item")));
  // 建立enum內(nèi)容
  CXTPPropertyGridItem* pItem = pStandard->AddChildItem(new CXTPPropertyGridItemEnum(_T("Enum item"), 1));
  // 添加enum記錄到enum內(nèi)容呈combo樣式
  pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 1);
  pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 2);
  pItem->GetConstraints()->AddConstraint(_T("Windows XP"), 3);

  // 建立flag內(nèi)容 第2個參數(shù)"1+2"為初始值 即"Windows 98"和"Windows 2000"為真
  // 且flag的元素數(shù)值需為1,2,4,8,16,32...
  pItem = pStandard->AddChildItem(new CXTPPropertyGridItemFlags(_T("Flag item"), 1 + 2));
  pItem->GetConstraints()->AddConstraint(_T("All Windows"), 1 + 2 + 4);
  pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 1);
  pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 2);
  pItem->GetConstraints()->AddConstraint(_T("Windows XP"), 4); 

  //////////////////////////////////////////////////////////////////////////
  // 建立分類
  CXTPPropertyGridItem* pButtons   = m_wndPropertyGrid.AddCategory(_T("Standard Buttons"));
  // 建立bool內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItemBool(_T("Combo Button")));
  // 設(shè)置為combo樣式
  pItem->SetFlags(xtpGridItemHasComboButton);
  // 建立字符串內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Expand Button")));
  // 設(shè)置為可編輯并帶有擴展按鈕樣式
  pItem->SetFlags(xtpGridItemHasEdit | xtpGridItemHasExpandButton);
  // 建立字符串內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("2 Buttons")));
  // 設(shè)置ID
  pItem->SetID(510);
  // 設(shè)置為可編輯并帶有擴展按鈕樣式和combo
  pItem->SetFlags(xtpGridItemHasEdit | xtpGridItemHasComboButton | xtpGridItemHasExpandButton);
  // 添加combo內(nèi)容
  pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 1);
  pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 2);
  // 建立字符串內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Text Button")));
  // 添加按鈕到字符串內(nèi)容行尾
  CXTPPropertyGridInplaceButton* pButton = pItem->GetInplaceButtons()->AddButton(new CXTPPropertyGridInplaceButton(1));
  // 設(shè)置按鈕文本
  pButton->SetCaption(_T("Find"));
  // 設(shè)置按鈕寬度
  pButton->SetWidth(100);
  // 建立字符串內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Image Button")));
  // 添加按鈕到字符串內(nèi)容行尾
  pButton = pItem->GetInplaceButtons()->AddButton(new CXTPPropertyGridInplaceButton(1));
  // 設(shè)置按鈕圖標(biāo)索引
  pButton->SetIconIndex(100);
  // UINT數(shù)組  估計是一個臨時存儲單元用于添加圖標(biāo)到按鈕
  // 上面的100和下面的100以及設(shè)置圖標(biāo)語句中的btnFilter是相聯(lián)系的
  UINT btnFilter[] = {100};
  // 設(shè)置圖標(biāo)
  m_wndPropertyGrid.GetImageManager()->SetIcons(IDB_BITMAP_FILTER, btnFilter, 1, 0);
  // 設(shè)置ToolTip在圖標(biāo)上
  pButton->SetTooltip(_T("Set Filter for item"));
  // 建立整形內(nèi)容
  pItem = pButtons->AddChildItem(new CXTPPropertyGridItemNumber(_T("Spin And Slider"), 60));
  // 默認0-100暫時沒有找到設(shè)置范圍的方法
  // 添加水平滑塊連接到整形內(nèi)容
  pItem->AddSliderControl();
  // 添加上下按鈕連接到整形內(nèi)容
  pItem->AddSpinButton();

  //////////////////////////////////////////////////////////////////////////
  // 建立分類
  CXTPPropertyGridItem* pMetrics   = m_wndPropertyGrid.AddCategory(_T("Custom Metrics"));
  // 建立字符串內(nèi)容
  pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Value Colors"), _T("")));
  // 設(shè)置文字顏色 可以采用RGB宏或DWORD
  // 文字和背景顏色會呈現(xiàn)混合效果
  pItem->GetValueMetrics()->m_clrFore = 0x00ff00;
  // 設(shè)置背景顏色
  pItem->GetValueMetrics()->m_clrBack = RGB(255, 0, 255);
  // 建立字符串內(nèi)容
  pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Caption Colors"), _T("")));
  // 設(shè)置文字顏色
  pItem->GetCaptionMetrics()->m_clrFore = 0xFF0000;
  // 設(shè)置背景顏色
  pItem->GetCaptionMetrics()->m_clrBack = RGB(235, 235, 235);
  // 建立enum內(nèi)容
  pItem = pMetrics->AddChildItem(new CXTPPropertyGridItemEnum(_T("Images"), 2));
  // 內(nèi)加enum記錄并帶有圖片
  pItem->GetConstraints()->AddConstraint(_T("Green"), 0, 0);
  pItem->GetConstraints()->AddConstraint(_T("Red"), 1, 1);
  pItem->GetConstraints()->AddConstraint(_T("Yellow"), 2, 2);
  pItem->GetConstraints()->AddConstraint(_T("Blue"), 3, 3);
  // 設(shè)置enum內(nèi)容的內(nèi)容圖片
  pItem->GetValueMetrics()->m_nImage = 2;
  // 設(shè)置enum內(nèi)容的標(biāo)題圖片
  pItem->GetCaptionMetrics()->m_nImage = 4;
  // 設(shè)置mask顏色
  m_wndPropertyGrid.GetImageManager()->SetMaskColor(0xC0C0C0);
  // 設(shè)置圖標(biāo)
  m_wndPropertyGrid.GetImageManager()->SetIcons(IDB_BITMAP_CONSTRAINTS, 0, 5, CSize(20, 14));
  // 建立字符串內(nèi)容
  pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Variable Height"), _T("Item")));
  // 建立內(nèi)容塊高度
  pItem->SetHeight(32);
  // 設(shè)置為combo樣式
  pItem->SetFlags(xtpGridItemHasComboButton);
  // 建立多行字符串內(nèi)容
  // 貌似在多行中無法真正的多行編輯 沒有找到讓文本換行即支持文本回車的方式
  pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("MultiLine"), _T("Codejock Software\r\n428 Corunna Avenue\r\nOwosso, Michigan 48867 USA")));
  // 設(shè)置能見得文本行數(shù)
  pItem->SetMultiLinesCount(3);

 

  // create custom items category.
  // 建立分類
  // 以下為自定義類型 代碼見CustomItems.h
  CXTPPropertyGridItem* pCustom   = m_wndPropertyGrid.AddCategory(_T("Custom Items"));
  // add child items to category.
  // 建立icon內(nèi)容
  CXTPPropertyGridItem* pItemIcon = pCustom->AddChildItem(new CCustomItemIcon(_T("Icon"), m_hIcon));
  pItemIcon->SetDescription(_T("This sample shows how to override draw function"));
  // 建立DockPadding內(nèi)容
  // DockPadding為4個數(shù)的組合
  CXTPPropertyGridItem* pItemDock = pCustom->AddChildItem(new CCustomItemChilds(_T("DockPadding"), CRect(100, 20, 400, 50)));
  pItemDock->SetDescription(_T("This sample shows how to add item with childs"));
  // 建立顏色內(nèi)容
  pCustom->AddChildItem(new CCustomItemColor(_T("CustomCombolist"), RGB(0xFF, 0x80, 0x40)));
  // 建立打開對話框內(nèi)容
  pCustom->AddChildItem(new CCustomItemFileBox(_T("File Box")));
  // 建立字符串內(nèi)容
  CXTPPropertyGridItem* pItemMaskEdit = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("Mask Edit"), _T("Phone No: (816) 220-0000")));
  // 設(shè)置字符串MASK
  pItemMaskEdit->SetMask(_T("Phone No: (000) 000-0000"), _T("Phone No: (___) ___-____"));
  // 建立字符串內(nèi)容
  CXTPPropertyGridItem* pItemPassword = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("Password"), _T("Text")));
  // 設(shè)置字符串Password
  pItemPassword->SetPasswordMask();
  // 建立日期內(nèi)容
  COleDateTime date(1981, 1, 26, 0, 0, 0 );
  pCustom->AddChildItem(new CXTPPropertyGridItemDate(_T("Date"), date));
  // 建立大寫字母內(nèi)容
  pCustom->AddChildItem(new CCustomItemUpperCase(_T("UpperCase")));
  // 建立ip地址內(nèi)容
  pCustom->AddChildItem(new CCustomItemIPAddress(_T("IP Address")));  
  // 建立PopupMenu內(nèi)容
  pCustom->AddChildItem(new CCustomItemMenu(_T("Popup Menu")));
  // 建立字符串內(nèi)容
  pCustom->AddChildItem(new CCustomItemEdit(_T("Output"), _T("Debug")));

  // add multi level tree node.
  // 建立樹形內(nèi)容
  CXTPPropertyGridItem* pCategoryOne    = pCustom->AddChildItem(new CXTPPropertyGridItemCategory(_T("First Sub Category")));
  CXTPPropertyGridItem* pCategoryTwo    = pCategoryOne->AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 1")));
  pCategoryTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T("")));
  pCategoryTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 2"), _T("")));
  CXTPPropertyGridItem* pCategoryTwo2   = pCategoryOne->AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 2")));
  pCategoryTwo2->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T("")));
  // 建立樹形內(nèi)容
  CXTPPropertyGridItem* pItemOne    = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("First Level"), _T("")));
  CXTPPropertyGridItem* pItemTwo    = pItemOne->AddChildItem(new CXTPPropertyGridItem(_T("Second Level"), _T("")));
  CXTPPropertyGridItem* pItemThird     = pItemTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level"), _T("")));
  pItemThird->AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 1"), _T("")));
  pItemThird->AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 2"), _T("")));


  // create custom items category.
  // 建立分類
  pCustom   = m_wndPropertyGrid.AddCategory(_T("Custom Butons"));
  // 建立上下按鈕內(nèi)容
  CXTPPropertyGridItem* pItemSpin = pCustom->AddChildItem(new CCustomItemSpin(_T("SpinButton")));
  pItemSpin->SetDescription(_T("This sample shows how to add new button type"));
  // 建立水平滑塊內(nèi)容
  pCustom->AddChildItem(new CCustomItemSlider(_T("Slider")));
  // 建立CheckBox內(nèi)容
  CCustomItemCheckBox* pItemCheckBox = (CCustomItemCheckBox*)pCustom->AddChildItem(new CCustomItemCheckBox(_T("Check Box")));
  pItemCheckBox->SetValue(_T("agree with conditions"));
  pItemCheckBox->SetBool(TRUE);
  // 建立自定義按鈕
  pCustom->AddChildItem(new CCustomItemButton(_T("Left Origin"), FALSE, TRUE));
  pCustom->AddChildItem(new CCustomItemButton(_T("Right Origin"), FALSE, TRUE));
  pCustom->AddChildItem(new CCustomItemButton(_T("Pointer"), TRUE, TRUE));
  pCustom->AddChildItem(new CCustomItemButton(_T("Gradient"), TRUE, FALSE));
 }


 m_groupAppearance.SubclassDlgItem(IDC_GBOX_APPEAR, this);
 m_groupSort.SubclassDlgItem(IDC_GBOX_SORT, this);
 m_groupColor.SubclassDlgItem(IDC_GBOX_COLOR, this);

 // Set control resizing.
 SetResize(IDC_PROPERTY_GRID, SZ_TOP_LEFT, SZ_BOTTOM_RIGHT);
//
  SetResize(IDC_GBOX_APPEAR,       SZ_TOP_RIGHT, SZ_TOP_RIGHT);
    SetResize(IDC_CHK_TOOLBAR,       SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_CHK_HELP,          SZ_TOP_RIGHT, SZ_TOP_RIGHT);
 SetResize(IDC_CHK_VERBS,         SZ_TOP_RIGHT, SZ_TOP_RIGHT);
 SetResize(IDC_CHK_DOUBLE,        SZ_TOP_RIGHT, SZ_TOP_RIGHT);
 SetResize(IDC_CHK_TABITEMS,      SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_CHK_HIGHLIGHT,     SZ_TOP_RIGHT, SZ_TOP_RIGHT);
 SetResize(IDC_COMBO_THEME,       SZ_TOP_RIGHT, SZ_TOP_RIGHT);
   SetResize(IDC_GBOX_SORT,         SZ_TOP_RIGHT, SZ_TOP_RIGHT);
    SetResize(IDC_SORT_CATEGORIES,   SZ_TOP_RIGHT, SZ_TOP_RIGHT);
 SetResize(IDC_SORT_ALPHABETICAL, SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_SORT_NOSORT,       SZ_TOP_RIGHT, SZ_TOP_RIGHT);
    SetResize(IDC_GBOX_COLOR,        SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_CHK_CUSTOMCOLORS,  SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_BUTTON_SWITCHSTATE,  SZ_TOP_RIGHT, SZ_TOP_RIGHT);
  SetResize(IDC_COMBO_BORDER,      SZ_TOP_RIGHT, SZ_TOP_RIGHT);
   SetResize(IDC_CHECK_SHOWBUTTONS, SZ_TOP_RIGHT, SZ_TOP_RIGHT);
   SetResize(IDC_CHK_RIGHTTOLEFT, SZ_TOP_RIGHT, SZ_TOP_RIGHT);

 // Load window placement
 AutoLoadPlacement(_T("PropertyGridSample"));

  m_cmbTheme.AddString(_T("xtpGridThemeDefault"));
  m_cmbTheme.AddString(_T("xtpGridThemeNativeWinXP"));
  m_cmbTheme.AddString(_T("xtpGridThemeOffice2003"));
  m_cmbTheme.AddString(_T("xtpGridThemeCool"));
  m_cmbTheme.AddString(_T("xtpGridThemeSimple"));
  m_cmbTheme.AddString(_T("xtpGridThemeDelphi"));
  m_cmbTheme.AddString(_T("xtpGridThemeWhidbey"));
  m_cmbTheme.AddString(_T("xtpGridThemeOfficeXP"));
  m_cmbTheme.AddString(_T("xtpGridThemeOffice2007"));
  m_cmbTheme.SetCurSel(0);
 
  m_cmbBorder.AddString(_T("xtpGridBorderNone"));
  m_cmbBorder.AddString(_T("xtpGridBorderFlat"));
  m_cmbBorder.AddString(_T("xtpGridBorderStaticEdge"));
  m_cmbBorder.AddString(_T("xtpGridBorderClientEdge"));
  m_cmbBorder.SetCurSel(3);

 return TRUE;  // 除非設(shè)置了控件的焦點,否則返回 TRUE

posted @ 2008-08-19 13:37 hwawai 閱讀(4118) | 評論 (3)編輯 收藏

僅列出標(biāo)題  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品1区| 欧美一级在线播放| 欧美午夜精品久久久久免费视| 久久精品一区二区三区中文字幕 | 黄色在线一区| 亚洲精品国精品久久99热| 亚洲精品美女在线观看播放| 久热国产精品| 夜夜嗨av色综合久久久综合网| 亚洲精品欧美专区| 欧美精品粉嫩高潮一区二区| 免费观看一区| 99ri日韩精品视频| 国产精品激情电影| 久久成年人视频| 亚洲精品日韩一| 久久裸体视频| 亚洲视频在线观看网站| 亚洲午夜在线| 国产午夜亚洲精品羞羞网站| 狂野欧美激情性xxxx| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美成人精品一区二区| 一区二区三区四区五区视频| 国产精品亚洲综合一区在线观看| 欧美一级免费视频| 亚洲日韩欧美视频一区| 美女主播精品视频一二三四| 亚洲男同1069视频| 99国产精品国产精品久久| 国产性猛交xxxx免费看久久| 一区二区成人精品| 亚洲欧美在线视频观看| 亚洲人成毛片在线播放| 国内久久婷婷综合| 国产日本欧美一区二区三区在线 | aa日韩免费精品视频一| 韩国三级电影久久久久久| 国产精品av久久久久久麻豆网| 欧美bbbxxxxx| 欧美日韩国产专区| 欧美成人四级电影| 女生裸体视频一区二区三区 | 国产一区亚洲一区| 国产人久久人人人人爽| 国产精自产拍久久久久久蜜| 欧美乱大交xxxxx| 欧美日韩亚洲三区| 欧美日韩免费一区二区三区| 欧美四级剧情无删版影片| 美日韩精品免费观看视频| 亚洲精品美女久久7777777| 亚洲视频视频在线| 亚洲女同在线| 久久免费视频这里只有精品| 另类av导航| 99pao成人国产永久免费视频| 99精品热视频| 麻豆久久久9性大片| 欧美日韩国产影片| 国产日韩在线不卡| 亚洲日本精品国产第一区| 亚洲视频在线观看视频| 久久乐国产精品| 一个色综合导航| 久久资源在线| 国模精品一区二区三区色天香| 亚洲国产精品成人综合色在线婷婷| 99re6这里只有精品| 欧美一区二区三区视频免费播放| 欧美fxxxxxx另类| 亚洲欧美综合v| 欧美精品久久99久久在免费线| 尹人成人综合网| 亚洲免费观看高清完整版在线观看| 亚洲欧美大片| 亚洲精品专区| 欧美88av| 亚洲精品国产系列| 久久亚裔精品欧美| 亚洲欧美日韩国产综合在线| 欧美日韩在线视频首页| 日韩视频在线一区二区| 女人天堂亚洲aⅴ在线观看| 欧美亚洲视频| 久久米奇亚洲| 韩国av一区二区三区在线观看| 亚洲综合日韩中文字幕v在线| 亚洲日本国产| 欧美日韩在线看| 亚洲一区制服诱惑| 亚洲欧美在线网| 午夜宅男久久久| 国产精品日韩在线一区| 亚洲综合电影一区二区三区| 欧美在线日韩精品| 欧美日韩国产综合久久| 亚洲一区不卡| 欧美一区免费| 亚洲国产精品日韩| 亚洲靠逼com| 国产欧美日韩亚州综合| 久久蜜桃香蕉精品一区二区三区| 另类av导航| 亚洲自拍三区| 老鸭窝亚洲一区二区三区| av成人福利| 久久久噜久噜久久综合| 一区二区三区欧美日韩| 亚洲影视综合| 欧美日韩在线一二三| 欧美在线免费观看视频| 久久久最新网址| 在线中文字幕一区| 久久久久久久久久久久久久一区| 一本久久a久久精品亚洲| 欧美一区午夜精品| 亚洲一级黄色| 欧美国产精品久久| 久久一区二区精品| 欧美日韩亚洲网| 亚洲日本中文字幕区| 好吊色欧美一区二区三区四区| 99在线热播精品免费99热| 亚洲第一在线综合在线| 久久aⅴ国产欧美74aaa| 久久国产免费看| 国产精品自拍在线| 亚洲午夜电影| 亚洲视频在线看| 欧美精品在线一区| 性欧美videos另类喷潮| 欧美婷婷六月丁香综合色| 亚洲日本激情| 亚洲午夜91| 国产精品手机在线| 欧美一区二区三区四区夜夜大片| 午夜精品成人在线视频| 国产精品久久久久高潮| 日韩一级网站| 久久久久一本一区二区青青蜜月| 久久久青草婷婷精品综合日韩| 国产精品嫩草久久久久| 亚洲自拍偷拍麻豆| 久久久久欧美精品| 在线日韩av片| 欧美日韩国产色站一区二区三区| 亚洲日本一区二区三区| 午夜精品久久久久久久久久久| 国产精品嫩草久久久久| 久久精品国产77777蜜臀| 美女999久久久精品视频| 亚洲精品一区二区三区蜜桃久| 欧美精品在线看| 久久www免费人成看片高清| 欧美mv日韩mv国产网站| 99亚洲精品| 欧美精品国产精品| 午夜久久影院| 一本一本久久| 亚洲成在线观看| 国产精品自在线| 欧美日韩视频在线观看一区二区三区| 午夜日韩电影| 亚洲一区二区成人在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久99爱| 亚洲欧美日本日韩| 亚洲肉体裸体xxxx137| 伊人婷婷久久| 好男人免费精品视频| 国产精品亚洲激情| 国产伦精品一区二区三区高清版 | 国产精品永久免费在线| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美黄色免费网站| 欧美高清视频在线播放| 久久国产免费| 久久亚洲欧美国产精品乐播| 亚洲午夜久久久久久久久电影网| 狠狠88综合久久久久综合网| 国产精品第十页| 日韩一区二区免费看| 亚洲精品国产精品乱码不99按摩 | 欧美一级久久| 久久精品国内一区二区三区| 亚洲欧美日韩在线不卡| 亚洲黄色高清| 亚洲一级高清| 欧美一区二区三区在线观看| 欧美在线免费视频| 久久久久久色| 欧美成人高清| 媚黑女一区二区| 欧美11—12娇小xxxx| 欧美午夜大胆人体| 国产区在线观看成人精品| 国产一区二区三区久久精品| 亚洲精品永久免费| 在线综合+亚洲+欧美中文字幕|