GSI

사용자 삽입 이미지

Posted by gsi
:

 

Posted by gsi
:

[MFC] 폴더 경로 얻기

C++ 2007. 12. 12. 14:23 |

사용자 삽입 이미지

 ITEMIDLIST      *pidlBrowse;
 char                  pszPathname[MAX_PATH];

 BROWSEINFO     BrInfo;

 BrInfo.hwndOwner = GetSafeHwnd();
 BrInfo.pidlRoot = NULL;

 memset( &BrInfo, 0, sizeof(BrInfo) );
 BrInfo.pszDisplayName = pszPathname;
 BrInfo.lpszTitle = "선택하고자 하는 폴더를 선택해 주십시오.";
 BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;

 // 다이얼로그 띄우기
 pidlBrowse = SHBrowseForFolder(&BrInfo); 

 if( pidlBrowse != NULL)
 {
  // 패스를 얻어옴
  BOOL bSuccess = ::SHGetPathFromIDList(pidlBrowse, pszPathname);

  if ( bSuccess )
  {
   m_szSafedefaultPath = pszPathname;   //<-- 여기서 값을 입력
   UpdateData(FALSE);
  }
  else
  {
   MessageBox("잘못된 폴더명입니다.", "lol", MB_OKCANCEL|MB_ICONASTERISK );
  }
 }

Posted by gsi
:

 //저장파일의 파일명을 찾아낸다.
 //확장자 분리 모듈
 TCHAR szDir[_MAX_DIR];
 TCHAR szDrive[_MAX_DRIVE];
 TCHAR szFileName[200] ;
 TCHAR szFileExt[20] ;
 _tsplitpath(saveFile, szDrive, szDir,szFileName, szFileExt);

 // etc
 //aze 파일 확장자를 소문자로 바꾸는 코드
 CString fileName;
 CString fileExt;
 fileExt.Format("%s", szFileExt);
 fileExt.MakeLower();
 fileName.Format("%s%s%s%s", szDrive, szDir, szFileName, fileExt);

szFile = strrchr( *pFullPath, '\\' ) + 1;
이건 뒤에 있는 파일이름+확장자 를 뽑아 주는 함수.
Posted by gsi
:

Dll 프로젝트를 하나 만들고 xml을 읽는 테스트를 진행해 봤다.
아래의 xml 파일을 읽는 테스트...

<?xml version="1.0" encoding="euc-kr" ?>

<Symbols>
  <Scanorders>
    <order Name="default">
      <!--false이면 지그재그-->
      <lineartype>true</lineartype>
      <!--두개씩 쌍을 이룬다.
          처음 두개는 진행방향 from > to 이고,
          뒤에 두개는 흐름방향 이다.-->
      <left>-1</left>
      <right>-1</right>
      <top>-1</top>
      <bottom>-1</bottom>
    </order>
  </Scanorders>
 
  <!--DefaultSymbol은 true이면 line이고, false이면 rectangle 이다.-->
  <Symbol Name="none" Uid="0" Type="line" DefaultSymbol="true">
    <HorizontalPixels>1</HorizontalPixels>
    <VerticalPixels>11</VerticalPixels>
    <SymbolWidth>12</SymbolWidth>
    <SymbolHeight>13</SymbolHeight>
    <ScanOrder>14</ScanOrder>
    <TotalPixels>15</TotalPixels>
    <TotalWidth>16</TotalWidth>
    <TotalHeight>17</TotalHeight>
    <Length>18</Length>
    <Color>
      <r>128</r>
      <g>129</g>
      <b>130</b>
    </Color>
  </Symbol>
  <Symbol Name="none" Uid="0" Type="line" DefaultSymbol="true">
<!--    <HorizontalPixels>1</HorizontalPixels> -->
    <VerticalPixels>2</VerticalPixels>
    <SymbolWidth>2</SymbolWidth>
    <SymbolHeight>2</SymbolHeight>
    <ScanOrder>2</ScanOrder>
    <TotalPixels>2</TotalPixels>
    <TotalWidth>2</TotalWidth>
    <TotalHeight>2</TotalHeight>
    <Length>2</Length>
    <Color>
      <r>80</r>
      <g>81</g>
      <b>82</b>
    </Color>
  </Symbol>
  <Symbol Name="none" Uid="0" Type="line" DefaultSymbol="true">
    <HorizontalPixels>3</HorizontalPixels>
    <VerticalPixels>3</VerticalPixels>
    <SymbolWidth>3</SymbolWidth>
    <SymbolHeight>3</SymbolHeight>
    <ScanOrder>3</ScanOrder>
    <TotalPixels>3</TotalPixels>
    <TotalWidth>3</TotalWidth>
    <TotalHeight>3</TotalHeight>
    <Length>3</Length>
    <Color>
      <r>150</r>
      <g>151</g>
      <b>152</b>
    </Color>
  </Symbol>
</Symbols>



C++ 에서 테스트할때..

    TRACE("--- xml start ---\n");
    if(m_TestXmlWrap2.Load("d:\\symbol.xml")) {
     // 정상적으로 읽었다면 여기로..
     
     HRESULT hr;
     MSXML2::IXMLDOMDocument2Ptr  pDoc;
     MSXML2::IXMLDOMNodeListPtr  pNodeList;
     MSXML2::IXMLDOMNodePtr   pNodeSub;
     MSXML2::IXMLDOMNodeListPtr  pNodeSubList;
     MSXML2::IXMLDOMNodePtr   pNodeSubSub;
     MSXML2::IXMLDOMNodePtr   pNodeSubSubSub;
     MSXML2::IXMLDOMElementPtr  pNodeSubElement;
     BSTR bszNodeValue;

     TRACE("--- xml start ---\n");
     if(m_TestXmlWrap2.GetDoc()) {
      pNodeList = m_TestXmlWrap2.GetDoc()->selectNodes(".//Symbol");
      for(int i = 0; i < pNodeList->length; i++) {
       pNodeSub = pNodeList->Getitem(i);

       // 같은 노드가 하나 이상은 존재 하지 않는다고 가정한다.
       pNodeSubSub = pNodeSub->selectSingleNode(".//HorizontalPixels");
       string value = "none";
       if(pNodeSubSub)
        value = (LPCTSTR)pNodeSubSub->Gettext();
       TRACE1("Symbol/HorizontalPixels=%s\n", value.c_str());
      }
     }
     TRACE("--- xml end ---\n");

     TRACE("--- xml start ---\n");
     if(m_TestXmlWrap2.GetDoc()) {
      pNodeList = m_TestXmlWrap2.GetDoc()->selectNodes(".//Symbol");
      for(int i = 0; i < pNodeList->length; i++) {
       pNodeSub = pNodeList->Getitem(i);

       pNodeSubList = pNodeSub->selectNodes(".//Color");
       for(int i = 0; i < pNodeSubList->length; i++) {
        pNodeSubSub = pNodeSubList->Getitem(i);

        string value;
        // 같은 노드가 하나 이상은 존재 하지 않는다고 가정한다.
        pNodeSubSubSub = pNodeSubSub->selectSingleNode(".//r");
        value = "none";
        if(pNodeSubSubSub)
         value = (LPCTSTR)pNodeSubSubSub->Gettext();
        TRACE1("Symbol/Color/r=%s\n", value.c_str());

        // 같은 노드가 하나 이상은 존재 하지 않는다고 가정한다.
        pNodeSubSubSub = pNodeSubSub->selectSingleNode(".//g");
        value = "none";
        if(pNodeSubSubSub)
         value = (LPCTSTR)pNodeSubSubSub->Gettext();
        TRACE1("Symbol/Color/g=%s\n", value.c_str());

        // 같은 노드가 하나 이상은 존재 하지 않는다고 가정한다.
        pNodeSubSubSub = pNodeSubSub->selectSingleNode(".//b");
        value = "none";
        if(pNodeSubSubSub)
         value = (LPCTSTR)pNodeSubSubSub->Gettext();
        TRACE1("Symbol/Color/b=%s\n", value.c_str());
       }
      }
     }
     TRACE("--- xml end ---\n");

      // 저장
      m_TestXmlWrap2.Save(_T("d:\\save_test.xml"));
    }

Dll 코드 :


Posted by gsi
: