GSI

사용자 삽입 이미지

컬럼 정보를 크기에 맞도록 채우는 코드 입니다.
넓이 값을 가져 와서 비율 적으로 처리 하는 부분도 있지만.
그 부분을 빼고 직접 넓이를 지정하게 하는 구조를 취하게 했습니다.

코드는 아래와 같습니다.

//컬럼 채우기
int m_nColWidths[] = { 90, 60}; // sixty-fourths
TCHAR * lpszHeaders[] = {
       _T("Port/Sequence"),
       _T("Address"),
       NULL };

int i;
LV_COLUMN lvcolumn;
memset(&lvcolumn, 0, sizeof(lvcolumn));

// add columns
for (i = 0; ; i++)
{
 if (lpszHeaders[i] == NULL)
  break;

 lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
 lvcolumn.fmt = LVCFMT_LEFT;
 lvcolumn.pszText = lpszHeaders[i];
 lvcolumn.iSubItem = i;
 lvcolumn.cx = m_nColWidths[i];
 m_listPortSequencePerAddress.InsertColumn(i, &lvcolumn);
}

lpszHeaders, m_nColWidths 의 정보를 사용해서 for문을 통해서
컬럼 정보를 입력 하는 구조입니다.

하드 코딩 하는거 보다는 이 방법을 취하는게 중간 중간 컬럼명이 바뀔 경우
lpszHeaders의 내용만 수정해 주면 되니까 편한듯 합니다.

Posted by gsi
:

Dialog Form (MFC) 를 개발하다 보면 CView, CScroll, CHtmlView 등과 같은
뷰의 클래스를 추가 하고 싶을때가 있다.

하지만 동적으로 생성하는 방법을 사용해서
CMyView* pMyView = new CMyView();
pMyView.Create(...);
pMyView.ShowWindow(SW_SHOW);

이런 방법을 사용하게 되면 생성후에 화면에 제대로 나오는걸 확인할 수 있다.
하지만 종료할때 보면 디버그 에러가 발생하게 된다.

자세한 이유는 모르겠다. 하지만 분명한건 아래와 같은 RUNTIME_CLASS() 를 사용해서 생성해야 하는걸 확인하였다.
아래와 같이 코드를 작성해서 추가를 해보면 이상없이 동작하는 것을 확인할 수 있다.

///
BOOL CDlgTestViewDlg::OnInitDialog()
{
...
 CCreateContext pContext;
 /**
 * Note:CDialig derived pointer is converted to
 * CWnd pointer (a common base class for CDialog and CFrameWnd).
 * Thus casting it back to CFrameWnd is also easy.
 */
 CWnd* pFrameWnd = this;
 
 pContext.m_pCurrentDoc = new CDocument;
 pContext.m_pNewViewClass = RUNTIME_CLASS(CTestView);
 CTestView *pView =
  (CTestView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
 ASSERT(pView);
 pView->ShowWindow(SW_NORMAL);

 /**
 * After a view is created, resize that to
 * have the same size as the dialog.
 */
 CRect rectWindow;
 rectWindow = CRect(10, 10, 100, 100);
 /**
 * Leave a little space for border and title...
 */
 pView->MoveWindow(rectWindow);

...

 return TRUE;
}
Posted by gsi
:

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Netshow 3.0 Beta 1 - Close Captioning Sample</TITLE>
</HEAD>
<BODY>
    <CENTER>
        This is a sample of Close Captioning using Netshow 3.0<BR>
        and SAMI (Synchronized Accessible Media Interchange) files.<BR><BR><BR>

        <!-- BEGIN GENERIC ALL BROWSER FRIENDLY HTML FOR NETSHOW V3 -->
        <OBJECT ID="MediaPlayer1" width=320 height=240 classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
                codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
                standby="Loading Microsoft Media Player components..." type="application/x-oleobject">
                <PARAM name="FileName" value="kstr100.asf">
                <PARAM name="SAMIFileName" value="ccsample.smi">
                <PARAM name="ShowCaptioning" value="1">
                <PARAM name="ShowControls" value="1">
                <EMBED type="application/x-mplayer2"
                       pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/"
                       filename="kstr100.asf"
                       name="MediaPlayer1"
                       width=320
                       height=240
                       SAMIFileName="ccsample.smi"
                       ShowCaptioning=1
                       ShowControls=1
                ></EMBED>
        </OBJECT>
        <BR>
        <A href="kstr100.asf">Start the NetShow presentation in the stand-alone player.</A>
        <!-- END GENERIC ALL BROWSER FRIENDLY HTML FOR NETSHOW V3 RTM -->
    </CENTER>
</BODY>
</HTML>

Posted by gsi
:

10.22 ~ 10.26 일까지 동영상 소프트 웨어 교육을 받는다.
Direct Show를 사용해서 하는것..

이것을 배우면 동영상 제작을 통한 웹 관련 프로젝트를
진행할 수 있을런지..
제대로 함 받아봐야 겠다.
Posted by gsi
:

csFile 클래스 래퍼 클래스

C# 2007. 10. 19. 15:45 |

csFile 클래스
때로는 사용하기 쉬운 메서드를 제공하는 간단한 클래스를 만들고, 그 안에서 이들 파일과 관련된 메서드들을 감싸두면( Wrap ) 편리하다. 그러므로 여기서는 그러한 csFile 클래스를 작성하고, 나머지 장들의 예제에서 이 클래스를 사용해 볼 것이다.

public class csFile {
   private string fileName;
   StreamReader ts;
   StreamWrite ws;

   private bool opened, writeOpened;

   //--------------
   public csFile() { Init(); }

   //--------------
   private void Init() {
      opened = false;
      writeOpened = false;
   }

   //---------------
   public csFile(string file_name) {
      fileName = file_name;
      Init();
   }
}

우리는 두 가지 방법으로 파일을 읽기 위해 열 수 있다. 하나는 파일 이름을 포함하는 것이고, 다른 하나는 파일 이름을 인수로 받는 것이다.

그리고 readLine 메서드를 이용하여 텍스트 파일로 부터 데이터를 읽어 올 수 있다.

public bool OpenForRead(string file_name)
{
   fileName = file_name;
   try {
      ts = new StreamReader(fileName);
      opened = true;
   }
   catch(FileNotFoundException e) {
      return false;
   }
   return true;
}

//-----------------
public bool OpenForRead() {
   return OpenForRead(fileName);
}
public string readLine() {
   return ts.ReadLine();
}

마찬가지로, 다음 메서드는 파일에 쓸 수 있게 해준다.

public void writeLine(string s) {
   ws.WriteLine(s);
}
//------------
public bool OpenForWrite() {
   return OpenForWrite(fileName);
}
//------------
public bool OpenForWrite(string file_name) {
   trye {
      ws = new StreamWriter(file_name);
      fileName = file_name;
      writeOpended - true;
      return true;
   }
   catch(FileNotFoundException e) {
      return false;
   }
}

앞으로 파일 읽어야 할 때 이렇게 단순화된 파일 메서드 래퍼 클래스를 사용하면 좋다.

Posted by gsi
: