以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  各位高手又没有C++和svg编程的书或例子阿,急!!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=13674)


--  作者:天啦
--  发布时间:1/17/2005 8:40:00 AM

--  各位高手又没有C++和svg编程的书或例子阿,急!!
最近公司要把系统移植到Liunx系统下面,图形还要用SVG,这方便我不太熟悉,买书又没找到,所以还请高手多多帮忙,先谢了!
--  作者:zhiyu-2000
--  发布时间:1/17/2005 9:17:00 AM

--  
这是用c++生成svg的一段代码
一个是建立空的svg文档,一个是加入svg的根节点,你看看吧!


//建立空的SVG文档
BOOL CMXVSVG::CreateNullSVGDocAndPI()
{
 HRESULT hr;
 hr = CoCreateInstance(MSXML::CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
  MSXML::IID_IXMLDOMDocument, (void**)&m_pSVGDOMDocument);
 if(FAILED(hr))
  return FALSE;
 VARIANT varType;
 VARIANT varValue;
    BSTR bstrName;
    BSTR bstrNameSpaceURI;
 MSXML::IXMLDOMNode* pPIISVGDOMNode = NULL;
 MSXML::IXMLDOMNode* pTmpISVGDOMNode = NULL;
 MSXML::IXMLDOMAttribute* pISVGDOMAttribute = NULL;
 MSXML::IXMLDOMNamedNodeMap* pISVGDOMNamedNodeMap = NULL;
 VariantInit(&varType);
 VariantInit(&varValue);
 //构造xml文件的预处理指令
 varType.vt = VT_BSTR;
 varType.bstrVal = _com_util::ConvertStringToBSTR("processinginstruction"); 
 bstrName = _com_util::ConvertStringToBSTR("xml"); //xml 不能用大写的
 bstrNameSpaceURI = _com_util::ConvertStringToBSTR(""); 
 hr = m_pSVGDOMDocument->createNode(varType,bstrName,bstrNameSpaceURI,&pPIISVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = m_pSVGDOMDocument->appendChild(pPIISVGDOMNode,&pPIISVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 
 //为预指令添加standalone 属性
 varType.vt = VT_BSTR;
 varType.bstrVal = _com_util::ConvertStringToBSTR("attribute");
 bstrName = _com_util::ConvertStringToBSTR("standalone");
 bstrNameSpaceURI = _com_util::ConvertStringToBSTR("");
 hr = m_pSVGDOMDocument->createNode(varType,bstrName,bstrNameSpaceURI,(MSXML::IXMLDOMNode**)&pISVGDOMAttribute); 
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 varValue.vt = VT_BSTR;
 varValue.bstrVal = _com_util::ConvertStringToBSTR("no");
 hr = pISVGDOMAttribute->put_nodeValue(varValue);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = pPIISVGDOMNode->get_attributes(&pISVGDOMNamedNodeMap);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = pISVGDOMNamedNodeMap->setNamedItem(pISVGDOMAttribute,&pTmpISVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 VariantClear(&varType);
 VariantClear(&varValue);
 return TRUE;
}


//建立根节点
BOOL CMXVSVG::CreateSVGNode()
{
    int height=1000;
 int width=1000;
 VARIANT varType;
 VARIANT varValue;
    BSTR bstrName;
    BSTR bstrNameSpaceURI;
 MSXML::IXMLDOMNode* pSVGTmpISVGDOMNode = NULL;
 MSXML::IXMLDOMAttribute* pISVGDOMAttribute = NULL;
 MSXML::IXMLDOMNamedNodeMap* pISVGDOMNamedNodeMap = NULL;
 VariantInit(&varType);
 VariantInit(&varValue);
 //创建根节点svg
 varType.vt = VT_BSTR;
 varType.bstrVal = _com_util::ConvertStringToBSTR("element");
 bstrName = _com_util::ConvertStringToBSTR("svg");
    bstrNameSpaceURI = _com_util::ConvertStringToBSTR("");
    HRESULT hr = m_pSVGDOMDocument->createNode(varType,bstrName,bstrNameSpaceURI,&m_pSVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = m_pSVGDOMDocument->appendChild(m_pSVGDOMNode,&m_pSVGDOMNode);
    if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 //为svg节点加入height属性
 varType.vt = VT_BSTR;
 varType.bstrVal = _com_util::ConvertStringToBSTR("attribute");
 bstrName = _com_util::ConvertStringToBSTR("height"); 
 bstrNameSpaceURI = _com_util::ConvertStringToBSTR("");
 hr = m_pSVGDOMDocument->createNode(varType,bstrName,bstrNameSpaceURI,(MSXML::IXMLDOMNode**)&pISVGDOMAttribute); 
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 varValue.vt = VT_I4;
 varValue.lVal =height;
 hr = pISVGDOMAttribute->put_nodeValue(varValue);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = m_pSVGDOMNode->get_attributes(&pISVGDOMNamedNodeMap);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = pISVGDOMNamedNodeMap->setNamedItem(pISVGDOMAttribute,&pSVGTmpISVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 //为svg节点加入width属性
 varType.vt = VT_BSTR;
 varType.bstrVal = _com_util::ConvertStringToBSTR("attribute");
 bstrName = _com_util::ConvertStringToBSTR("width"); 
 bstrNameSpaceURI = _com_util::ConvertStringToBSTR("");
 hr = m_pSVGDOMDocument->createNode(varType,bstrName,bstrNameSpaceURI,(MSXML::IXMLDOMNode**)&pISVGDOMAttribute); 
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 varValue.vt = VT_I4;
 varValue.lVal = width;
 hr = pISVGDOMAttribute->put_nodeValue(varValue);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = m_pSVGDOMNode->get_attributes(&pISVGDOMNamedNodeMap);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 hr = pISVGDOMNamedNodeMap->setNamedItem(pISVGDOMAttribute,&pSVGTmpISVGDOMNode);
 if(FAILED(hr))
 {
  VariantClear(&varType);
  VariantClear(&varValue);
  return FALSE;
 }
 VariantClear(&varType);
 VariantClear(&varValue);
 return TRUE;
}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
32.227ms