GSI

사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지

사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지

사용자 삽입 이미지 사용자 삽입 이미지 사용자 삽입 이미지


Posted by gsi
:

// DataGridView 객체 얻어 오기
DataGridView dgv = sender as DataGridView;
if (dgv == null)
    return;

// 셀단위로 선택된 것이 있는지 찾는다. 하나도 없을때 리턴
if (dgv.SelectedCells.Count == 0)
    return;

// DB와 연결되어 있을때. DataSet의 테이블 정보를 가져온다.
DataTable dtItem = azitro_testDataSet.Tables[0];
// DataRow를 가져 오기 위해서 DataGridView의 선택된 셀정보를 가져와서
// RowIndex를 리턴해 준다.
// RowIndex의 값을 사용해서 DataRow를 구한다.
DataRow rwItem = dtItem.Rows[dgv.SelectedCells[0].RowIndex];

// Row의 셀 정보를 가져온다. (DB 내용)
string strCatenum = rwItem["cate_Num"].ToString();
string strCatedep = rwItem["cate_dep"].ToString();
string strCatesel = rwItem["cate_sel"].ToString();
string strsiImg = rwItem["icon_img"].ToString();

txtSelName.Text = rwItem["item_name"].ToString();
txtSelContents.Text = rwItem["item_contents"].ToString();

// DB에 있는 내용을 사용해서 폴더 경로를 구한다.
string filepath;
filepath = Application.StartupPath
    + "\\itemlist\\"
    + strCatenum + "\\"
    + strCatesel + "\\"
    + strsiImg + ".png";

// 파일이 존재 하는지 검사한다.
if (File.Exists(filepath))
{
    // 이미지를 연결하고 화면에 출력한다.
    picItemImage.Image = Image.FromFile(filepath);
}
else
{
    // 이미지가 없을때 null 처리
    picItemImage.Image = null;
}

Posted by gsi
:

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

Posted by gsi
:

사용자 삽입 이미지

본 내용은 자료가 좀 많다. -.-
우선 정리는 시간이 걸리기 때문에 차후에 해야 할거 같다.

간단하게 정리 하면...
Employee 라는 직원 정보를 담고 있는 클래스를 하나 제작한다.
Button의 Content의 프로퍼티를 Employee 객체로 설정하여 버튼을 확장하는 예제이다.
여기에서 사용되는 내용은 ContentTemplate, DataTemplate, DataTemplateSelector, DataTemplate.Triggers 등에 대한 내용을 담고 있다.
(이 내용은 WPF 서적의 25장. 템플릿의 내용이다.)

관련소스 :
Posted by gsi
:

사용자 삽입 이미지
  • ControlTemplate 태그 내에는 TargetType 속성을 포함하는 것이 가능하다.
    <ControlTemplate x:Key="btnCustom" TargetType="{x:Type Button}">
    이 경우 TemplateBinding 표현에서 의존 프로퍼티의 클래스 이름을 앞에 붙일 필요는 없다. 바인딩에는 이 프로퍼티를 참조하라는 정보가 들어 있기 때문.
  • 여러개의 컨트롤이 템플릿을 공유할때 리소스로 정의해야 한다.
  • btnCustom이라는 x:Key를 가진 ControlTemplate을 정의한 스탠드 얼론 xaml파일이 있다.
  • ControlTemplate 상에 TargetType 속성을 설정한 이유는 의존 프로퍼티나 이벤트 앞에 반복해서 클래스 이름을 붙이지 않기 위함이다.
  • Posted by 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
    :

    // 프로젝트 생성
    MFC Extension DLL 을 체크 하고 생성한다.

    // DLL 내부에서 class 생성할때
    class AFX_EXT_CLASS CTest : public CDialog
    이런 형태로 앞에 AFX_EXT_CLASS 를 추가한다.

    // 해당 프로젝트에서 사용할때.
    *.h, *.lib를 추가한다.
    *.dll을 실행파일과 같은 경로 또는 시스템 폴더에 추가한다.
    나머지 사용시에는 일반 클래스와 같이 동작한다.

    이건. mfc에서 확장해서 리소스 및 다이얼로그 등등.. 모든 자원을 dll로 뺀 다음에
    사용이 가능한듯 보인다.
    Posted by gsi
    :

     

     

    대한민국 소프트웨어 개발자 여러분, 안녕하십니까?

    개발자들이 행복해지는 세상을 위한 한마당 잔치 ,DevDays 2007 Korea’에 성원해주신 여러분께
    진심으로 감사의 말씀을 드립니다.

    서울, 부산, 대전에서 보내주신 뜨거운 성원에 힘입어 한국마이크로소프트는 앞으로도 모든 개발자들이
    행복한 세상을 위해 지속적으로 노력할 것을 약속 드립니다.

    강의자료 및 웹캐스트 코너에서는 최고의 강사진이 제공하는 강의 동영상과 발표자료를 다시 보실 수 있습니다.

    감사합니다.

     

     

    Time

    Session Title

    강의자료

    웹캐스트

    09:20-10:00

    등록

     

     

    10:00-10:10

    Opening Event - 대한민국에서 개발자로 산다는 것
    /
    훈스닷넷 연극팀

     

    10:10-10:20

    인사말 / 한국마이크로소프트 박남희 상무

     

    10:20-10:50

    Keynote : 10 후를 내다보는 개발자의 커리어 개발
    /
    한국마이크로소프트 김명호 박사/NTO

    10:50-12:30

    General Session : 변화하는 기술과 개발자의 경쟁력
    /
    한국마이크로소프트 유상용 부장
    개발자의 영원한 동반자 Visual Studio
    /
    한국마이크로소프트 강성재 과장, 김대우 과장

    12:30-13:30

    Lunch

     

    Track1 : UX 개발자 트랙

    Track2 : 엔터프라이즈 개발자 트랙

    13:30-14:30

    UX 개발자가 일하는 방법
    /
    한국마이트로소프트 황리건 과장

    .Net Framework 3.x 국내 기업 적용 사례
    /
    한국마이크로소프트 손정민 부장

    14:30-14:40

    휴식

    14:40-15:40

    Silverlight ASP.NET AJAX 이용한 애플리케이션 개발
    /
    이노가드 김태영 기술이사

    WebServices In Action
    /
    닷넷엑스퍼트 이동범 대표

    15:40-15:50

    휴식

    15:50-16:50

    2008년을 위한 WPF 개발 방법론
    /
    닷넷채널 김영욱 대표

    엔터프라이즈 통신 인프라를 위한 WCF 기능들
    /
    드원테크놀로지 유경상 수석컨설턴트

    16:50-17:00

    휴식

    17:00-17:20

    Closing - 경품 추첨 이벤트

     

     

     

     

     

    발표자료를 XPS 형식으로 다운로드 받으실 수 있습니다.
    다운로드 받으신 XPS 파일이 보이지 않을 경우 “XPS 뷰어”를 설치하시기 바랍니다.

     

     

     

    본 메일은 2007/12/07 기준으로 본 세미나에 참석하신 회원님들께 발송되는 발신전용 메일입니다.
    메일 수신을 원하지 않으시면, 여기 를 누르시고,
    내 전자메일 주소를 선택하신 후, 첫번째 체크박스를 uncheck 하시기 바랍니다.
    고객지원센터 전화번호: 1577-9700
    2007 Microsoft Corporation. All rights reserved. 사용권에 대한 고지 사항 | 개인정보보호정책 | 문의처

     

    Posted by gsi
    :

    사용자 삽입 이미지

    이틀 전인가. 문화 건물에서 같은 엘리베이터 탔는데. 일반 사람 같아 보이진 않아서. 혹시나 했더만.
    역시 FT 아일랜드랑 윤하 였네욤..

    Posted by gsi
    :

    사용자 삽입 이미지

    여기서 알 수 있는 기술
    1. TreeView에 DB의 정보를 입력하는 방법
    2. Tree의 노드를 선택하면 좌측의 DataGridView의 Row를 제어
    3. Detail Display
    4. 옵션으로 좌측의 3개의 버튼으로 트리의 입력 방법을 몇개 예제로 구성해봤다.

    이제 해야 될 건.. Drag & Drop

    관련코드 :
    Posted by gsi
    :

    [C#] TreeView 내용 추가하기

    C# 2007. 12. 7. 08:34 |

    사용자 삽입 이미지
    입력 배열 :

            string[] parentString = { "son1", "son2", "son3", "son4" };
            string[] childString = { "byoung1", "byoung2", "byoung3" };

    입력방법 #1

            private void button1_Click(object sender, EventArgs e)
            {
                treeView1.Nodes.Clear();
                treeView1.BeginUpdate();

                foreach (string str in parentString)
                {
                    TreeNode tn = treeView1.Nodes.Add(str);

                    foreach (string substr in childString)
                    {
                        tn.Nodes.Add(substr);
                    }
                }

                treeView1.EndUpdate();
            }

    입력방법 #2

            private void button2_Click(object sender, EventArgs e)
            {
                treeView1.Nodes.Clear();
                treeView1.BeginUpdate();

                foreach (string str in parentString)
                {
                    treeView1.Nodes.Add(str);
                }

                foreach (TreeNode tn in treeView1.Nodes)
                {
                    foreach (string substr in childString)
                    {
                        tn.Nodes.Add(substr);
                    }
                }

                treeView1.EndUpdate();
            }

    입력방법 #3

            private void button3_Click(object sender, EventArgs e)
            {
                treeView1.Nodes.Clear();
                treeView1.BeginUpdate();

                TreeNode tn = new TreeNode();
                foreach (string str in childString)
                {
                    tn.Nodes.Add(str);
                }

                foreach (string str in parentString)
                {
                    TreeNode tnParent = treeView1.Nodes.Add(str);
                }

                treeView1.EndUpdate();
            }

    Posted by gsi
    :