'it/csharp'에 해당되는 글 2건

  1. MFC 프로젝트 버전 일괄 변경 툴
  2. ListView의 컬럼 해더 클릭시 소트 구현

MFC 프로젝트 버전 일괄 변경 툴

MFC 프로젝트가 여러개 일때, 버전 변경을 일일이 수정하는 것이 번거롭습니다.

이럴때, 버전일 일괄적으로 변경해 주는 툴입니다.


원리는, 설정 파일에 리소스파일 경로를 넣어둔 목록을 만들고

툴에서 파일 목록을 읽어서 아규먼트로 받은 버전으로 일괄 치환 합니다.

Visual Studio 2015 C# ( .NET Framework 4.5.2 ) 기반에서 코딩해 봤습니다.


자세한 내용은 github에 올린 내용으로 대체 합니다.

( https://github.com/lmk/changeVer )


changeVer

All change FileVersion/ProductVersion on MFC resource files

Enveroment

  • Virsual Studio 2015
  • C#

Help

Usage>
$ changeVer.exe -f FileVersion -p ProductVersion -c ConfigFilename
ex) $ changeVer.exe -f 2.1.6.33 -p 2.1.0.0 -c resources.txt
ex) $ changeVer.exe -s -c resources.txt

Options>
        -f[F]: After File version
        -p[P]: After Product version
        -c[C]: Config filename
        -s[S]: Show Current version

How to use

  1. Make list file
$ type resources.txt
D:\Source\server\server.rc
D:\Source\client\client.rc
D:\Source\client2\client2.rc
D:\Source\client3\client3.rc
  1. Execute tool
$ changeVer -f 2.1.6.34 -p 2.1.0.0 -c resources.txt
OK:     D:\Source\server\server.rc
OK:     D:\Source\client\client.rc
OK:     D:\Source\client2\client2.rc
OK:     D:\Source\client3\client3.rc

$ changeVer -s -c resources.txt
D:\Source\server\server.rc:
         FILEVERSION 2,1,6,34
         PRODUCTVERSION 2,1,0,0
                    VALUE "FileVersion", "2, 1, 6, 34"
                    VALUE "ProductVersion", "2, 1, 0, 0"
D:\Source\client\client.rc:
         FILEVERSION 2,1,6,34
         PRODUCTVERSION 2,1,0,0
                    VALUE "FileVersion", "2, 1, 6, 34"
                    VALUE "ProductVersion", "2, 1, 0, 0"
D:\Source\client2\client2.rc:
         FILEVERSION 2,1,6,34
         PRODUCTVERSION 2,1,0,0
                    VALUE "FileVersion", "2, 1, 6, 34"
                    VALUE "ProductVersion", "2, 1, 0, 0"
D:\Source\client3\client3.rc:
         FILEVERSION 2,1,6,34
         PRODUCTVERSION 2,1,0,0
                    VALUE "FileVersion", "2, 1, 6, 34"
                    VALUE "ProductVersion", "2, 1, 0, 0"


ListView의 컬럼 해더 클릭시 소트 구현

1. 폼 클래스의 맴버 변수를 선언 합니다.
public class form1 : System.Windows.Forms.Form
{
    // ListView의 정렬 방법을 저장하기위한
    private SortOrder[] arrSortOrder;


2. 리스트가 초기화 되는 부분에 아래 코드를 추가합니다.
   // 리스트의 값을 넣었으면.. 컬럼별 정렬 방법설정
arrSortOrder.Initialize();
arrSortOrder = new SortOrder[lvAddress.Columns.Count];
for(int i=0; i
    arrSortOrder[i] = SortOrder.None;



3. 해더클릭 이벤트를 아래와 같이 코딩합니다.
private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
  if ( arrSortOrder[e.Column] != SortOrder.Ascending )
       arrSortOrder[e.Column] = SortOrder.Ascending;
  else
       arrSortOrder[e.Column] = SortOrder.Descending;

  SortColumn ( e.Column );
}


4. 소트를 위한 비교 클래스를 아래와 같이 코딩합니다.
private class Comparer : IComparer
{
   private int m_Column;
   private bool m_bNumeric;
   private System.Windows.Forms.SortOrder m_SortOrder;

   public int Compare( object Object1 , object Object2 )
   {
       if( !(Object1 is ListViewItem) && !(Object2 is ListViewItem) )
       return 0;

       ListViewItem lv1 = (ListViewItem) Object1;
       ListViewItem lv2 = (ListViewItem) Object2;

      if ( m_SortOrder == System.Windows.Forms.SortOrder.Descending )
      {
       ListViewItem lvTemp;
       lvTemp = lv1;
       lv1 = lv2;
       lv2 = lvTemp;
       }

       if (m_bNumeric)
               return (Convert.ToInt32 (lv1.SubItems[m_Column].Text) -  Convert.ToInt32 (lv2.SubItems[m_Column].Text ));
       else
       return String.Compare( lv1.SubItems[m_Column].Text, lv2.SubItems[m_Column].Text );
   }

   public System.Windows.Forms.SortOrder SortOrder
   {
       set
       {
       m_SortOrder = value ;
       }
   }

   public bool bNumeric
   {
       set
       {
       m_bNumeric = value ;
       }
    }

    public int Column
    {
        set
        {
       m_Column = value ;
        }
     }
}


5. 컬럼소트함수를 작성합니다..
public void SortColumn( int iColumn )
{
   Comparer lvc = new Comparer ();

   lvc.SortOrder = arrSortOrder[iColumn];

   try
   {
       string s1 = listView1.Items[1].SubItems[iColumn].Text.ToUpper().Trim();
       long lng = Convert.ToInt32 (s1);
       lvc.bNumeric = true;
   }
   catch (Exception ex)
   {
       lvc.bNumeric = false;
   }

   lvc.Column = iColumn ;
   listView1.ListViewItemSorter = lvc;
}


뉴스그룹:microsoft.public.dotnet.framework.windowsforms의
Piyush(piy_9679@indiatimes.com)님
"Sort Multiple ListView Columns"소스를
오름/내림 차순 정렬이 가능하도록 수정했습니다.