336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[_cdecl ] 마지막 인자부터 스택에 저장하며, 함수를 호출한 쪽에서 스택을 정리한다

[_stdcall] 마지막 인자부터 스택에 저장하며, 호출된 함수가 스택을 정리한다(Win32 API)

[_fastcall] 레지스터에 인자 두 개를 넣고, 마지막 인자부터 스택에 저장하며 호출된 함수가
               스택을 정리한다

_stdcall 은 보통 API들이 사용하고 있다. 그 이유는 스택을 정리하는 코드가 API 쪽에 있게 되면 그 만큼 메모리를 절약할 수 있기 때문이다


* 예제 코드

1. _cdecl 

C++
 void _cdecl Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);
}
Assembly
; 12 : Func( 1, 2, 3, 4);
    00000 6a 04 push 4
    00002 6a 03 push 3
    00004 6a 02 push 2
    00006 6a 01 push 1
    00008 e8 00 00 00 00 call ?Func@@YAXHHHH@Z
    0000d 83 c4 10 add esp, 16  
; 함수 호출부분만 보면 모두 스택에 넣고 호출 후 제거


2. _stdcall 

C++
void _stdcall Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);

 

Assembly 
// Func의 반환부분
// "ret 16”은 "add esp,16" "ret 0”과 같음
00000 c2 10 00 ret 16 ; 00000010H

// 함수 호출부분 4개의 인자를 스택에 쌓고 제거하지 않는다
00000 6a 04 push 4
00002 6a 03 push 3
00004 6a 02 push 2
00006 6a 01 push 1
00008 e8 00 00 00 00 call ?Func@@YGXHHHH@Z ; Func

3. _fastcall 

C++
void _fastcall Func( int a, int b, int c, int d)

    return;
}

void main()

    Func( 1, 2, 3, 4);

Assembly 
// Func의 반환부분 나머지 두 개는 레지스터에 있다
00000 c2 08 00 ret 8

// 함수 호출부분
// 2개의 인자를 스택에 쌓고,
// 2개는 레지스터에 넣는다
// 역시 스택을 제거하지 않음
00000 6a 04 push 4
00002 6a 03 push 3
00004 ba 02 00 00 00 mov edx, 2
00009 b9 01 00 00 00 mov ecx, 1
0000e e8 00 00 00 00 call ?Func@@YIXHHHH@Z ; Func  


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


MFC에서 주로 자용하는 CString 의경우

문자열을 분리할때 타입 문제로 strtok()를 사용하기 복잡해지는데

이역시도 간단한 대처 방법이 있으니...

BOOL AFXAPI AfxExtractSubString (
   CString& rString,
   LPCTSTR lpszFullString,
   int iSubString,
   TCHAR chSep = '\n'
);

rString
  • Reference to a CString object that will receive an individual substring.

lpszFullString
  • String containing the full text of the string to extract from.

iSubString
  • Zero-based index of the substring to extract from lpszFullString.

chSep
  • Separator character used to delimit substrings.


바로 요녀석 되겠다

간단한 예를 들어보면
CString strData = "write test.txt 0x00000000 1024";
CString strCmd, strFilename, strAddress, strLength;
AfxExtractSubString(strCmd, strData, 0, ' ');         // => write
AfxExtractSubString(strFilename, strData, 1, ' ');   // => test.txt
AfxExtractSubString(strAddress, strData, 2, ' ');    // => 0x00000000
AfxExtractSubString(strLength, strData, 3, ' ');      // => 1024

참 쉽죠~잉!

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

먼저 Dilaog에 Picture Control을 만들고 거기에 컨트롤 변수를 추가한다.

예의 경우 CStatic m_pCurrentProc이다.

IplImage* image = cvLoadImage( ... );

CvvImage cvv_image;

CRect rect = CRect(0,0,WIDTH,HEIGHT);
cvv_image.CopyOf(image,8);
CDC *pDC = m_pCurrentProc.GetDC();
HDC hDC = pDC->GetSafeHdc();
cvv_image.DrawToHDC(hDC,&rect);



http://www.cyworld.com/myWorkLog/2515440 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
openCV highgui에 보면 DC를 이용한 MFC용 이미지 클래스가 있다

CvvImage 바로 요녀석!

CvvImage.Load(const char* filename, int desired_color = 1 )

CvvImage.CopyOf(CvvImage& image, int desired_color = -1)

CvvImage.CopyOf(IplImage* img, int desired_color = -1)

CvvImage.Show(const char* window)

CvvImage.Destroy();

CvvImage.Save(const char* filename)


맴버는 요런식으로 구성 되어져있고

정말 간단 예를 보면

CvvImage cvImage;

IplImage* prawImage = cvQueryFrame( capture );

   .
   .
   .

cvImage.CopyOf(prawImage, 1);

cvImage.Show(this->GetDC()->GetSafeHdc(), 0, 0, rect.Right, rect.Bottom);

cvImage.Destory();


이를 이용하여 캠에서 영상을 받아 뿌려준 결과는 대략 요렇다


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



일을 하다가 요런 모양의 컨트롤러가 필요하게 되었다

일단 모양이 좋와야하니 Buddy가 필요했고

두자릿수 16진수를 각각 한자리씩 컨트롤 해야하기 때문에

두개의 Spin control이  필요하게 되었다.

초보인 난 구글신을 비롯하여 여기저기 구걸한 결과

전~~~혀 소득이 없었다....

But!!!! 

아무생각없이 MDSN을 보다가 문득 보게된

SetBuddy()!!!!!!!!!!!!!!!!!! 그래 이거였다.

방법은 간단하다

하나의 EditBox와 두개의 Spin control을 SetBuddy로 묶어주면 모양은 해결된다.

m_spAddressH.SetBuddy(GetDlgItem(IDC_EDIT_ADDRESS));
m_spAddressL.SetBuddy(GetDlgItem(IDC_EDIT_ADDRESS));

요런식으로 말이다

그리고 Spin을 수동으로 컨트롤하기 위해선

OnDeltaposSpin..() 이벤트를 사용하고 그안에

 if (pNMUpDown->iDelta >= 0) //Spin Up
 {
  ...
 }
 else      //Spin Down
 {
  ...
 }

을 사용하면 간단히 해결된다

삽질을 통한 오늘의 교훈이랄까?

구글신도 좋지만 윈도우 프로그레밍의 기본은 역시 MSDN이라는 깨닮음을 얻었다.

'Programming > Windows programming' 카테고리의 다른 글

OpenCV, IplImage Picture Control에 출력 시키기  (0) 2009.07.20
OpenCV MFC용 이미지 클래스  (0) 2009.07.16
PreTranslateMessage  (0) 2009.05.29
CFileDialog  (0) 2009.05.22
[VC++ 2003] File filter setting  (0) 2009.04.30
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
MFC애서 키입력을 처리할때 OnKeyDown message를 주로 사용하지만
OnKeyDown message의 경우 View 클래스에 우선권이 있기 때문에
MainFrm 클래스등에서 사용하려할때 원하는대로 사용되지 않는 경우가 있다

이럴때 PreTranslateMessage를 사용하면 된다

PreTranslateMessage는 메세지 처리 함수중 윈도우에 메세지가 전달되기 전에
미리 메세지를 알아내어 처리할수 있기때문이다

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
   // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
   if (pMsg->message == WM_KEYDOWN)
   {
      if (pMsg->wParam == VK_SPACE)

      ...

   }
   return CFrameWnd::PreTranslateMessage(pMsg);
}
이런식으로 사용하면 된다

'Programming > Windows programming' 카테고리의 다른 글

OpenCV MFC용 이미지 클래스  (0) 2009.07.16
하나의 에디트박스에 두개의 스핀컨트롤러 사용하기  (0) 2009.06.11
CFileDialog  (0) 2009.05.22
[VC++ 2003] File filter setting  (0) 2009.04.30
XML perser  (0) 2009.03.13
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CFileDialog::CFileDialog

CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );


Parameters

bOpenFileDialog : 파일 열기 대화상자를 생성하려면 TRUE로, 파일 저장하기 대화상자를 생성하려면 FALSE로 설정한다.

lpszDefExt : 디폴트 파일 확장자. 사용자가 파일명 에디트 박스에서 확장자를 포함하지 않으면, lpszDefExt에 설정된 확장자가 자동적으로 파일명에 붙는다. 인자가 NULL이면, 확장자가 붙지 않는다.

lpszFileName : 파일명 에디트 박스에 나타나는 초기 파일명. NULL이면, 초기에 파일명이 나타나지 않는다.

dwFlags : 사용자가 대화상자를 사용자 정의로 지정하도록 하는 하나 또는 그 이상의 플래그의 조합.

lpszFilter : 사용자가 파일에 적용할 수 있는 필터를 지정하는 문자열

pParentWnd : 파일 대화상자 객체의 부모 윈도우 또는 오우너 윈도우에 대한 포인터


Remarks

표준 윈도우 파일 대화상자 객체를 생성하기 위해서 이 함수를 호출한다. bOpenFileDialog의 값에 따라서 파일 열기 대화상자 또는 파일 저장하기 대화상자가 생성된다.

사용자가 다중 파일 선택을 가능하도록 하려면, DoMoal을 호출하기 전에 OFN_ALLOWMULTISELECT 플래그를 설정한다. 다중 파일명의 반환된 리스트를 처리하기 위해서 파일명 버퍼를 마련해야 한다. 이것은 m_ofn.lpstrFile을 할당한 버퍼에 대한 포인터로 대치함으로써 가능하다. CFileDialog를 생성한 수에 그러나 DoModal을 호출하기 전에 해야한다. 게다가, m_ofn.lpstrFile에 의해서 가리켜지는 버퍼에서 문자의 수를 m_ofn.nMaxFile에 설정해야 한다.

lpszFilter 인자가 파일명의 타입을 결정하는데 사용되어진다면 파일은 파일 리스트 박스에 표시되어야 한다. 문자열 쌍에서 첫 번째 문자열은 필터를 나타낸다. 두 번째 문자열은 사용되는 파일 확장자를 나타낸다. 다중 확장자는 구획문자 ‘;’를 사용해서 설정한다. 이 인자를 위해서 CString 객체를 사용할 수 있다. 문자열은 두 개의 ‘|’ 문자로 끝나고, 다음에 NULL이 온다.


CFileDialog::DoModal

virtual int DoModal( );


Return Value

함수가 성공적으로 수행되면, IDOK 또는 IDCANCEL 리턴. 대화상자에서 사용자가 선택한 버튼에 따라 IDOK 또는 IDCANCEL이 리턴된다.

IDCANCEL이 리턴되면, 에러가 발생했는지를 결정하기 위해서 윈도우즈 CommDlgExtendedError 함수를 호출할 수 있다.


Remarks

윈도우즈 공통 대화상자를 표시하고, 사용자가 파일과 디렉토리를 찾고, 파일명을 입력하도록 하기 위해서 이 함수를 호출한다.

m_ofn 구조체의 멤버들을 설정해서 다양한 파일 대화상자 옵션을 초기화하려면, 대화상자 객체가 생성되고, DoModal이 호출되기 전에 해야 한다.

사용자가 대화상자의 OK나 Cancel 버튼을 누르거나, 대화상자의 컨트롤 메뉴에서 Close 옵션을 선택했을 때, 컨트롤이 어플리케이션에 리턴된다. 그때서야 사용자가 대화상자에 입력한 정보나 설정을 알아내기 위해서 다른 멤버 함수들을 호출할 수 있다.

DoModal은 CDialog 클래스에서 오버라이딩된 가상함수이다.


CFileDialog::GetFolderPath

CString GetFolderPath() const;


Return Value

현재 열고있는 폴더나 디렉토리를 CString object에 담고있다

Remarks

이 다이얼로그 박스는 OFN_EXPLORER 스타일을 반드시 생성해야 한다.

CFileDialog::GetNextPathName

CString GetNextPathName (POSITION& pos) const;

Return Value

파일의 총 경로

Parameters
GetNextPathName 또는 GetStartPosition을 호출 되면 POSITION value를 리턴


Remarks

파일이름의 경로는 파일이름에 이렉토리 경로를 포함한다.
예를 들어, GetNextPathName 는 C:\FILES\TEXT.DAT 파일의 반환 값으로  "C:\FILES\TEXT.DAT"를 반환할 것이다. 만약 GetStartPosition을 사용하여 초기 위치를 설정한다면 GetNextPathName을 반복문 전에 사용하여야 한다.


CFileDialog::GetPathName

CString GetPathName( ) const;


Return Value

파일의 전체 경로를 리턴한다.


Remarks

대화상자에 입력된 파일의 전체 경로를 알아내기 위해서 이 함수를 호출한다. 예를 들면, GetPathName은 파일 C:\FILES\TEXT.DAT에 대해서 "C:\FILES\TEXT.DAT"를 리턴 할 것이다.

m_ofn.Flags가 OFN_ALLOWMULTISELECT 플래그 설정을 가지면, 이 문자열은 첫 번째 문자열은 선택된 파일 그룹의 디렉토리 경로이고, 그 다음은 사용자가 선택한 모든 파일명을 가지는 널종료 문자열을 포함한다. 이러한 이유로, 리스트에서 다음 파일명을 얻기 위해서 GetStartPosition과 GetNextPathName 멤버 함수를 사용한다.


CFileDialog::GetFileName

CString GetFileName( ) const;


Return Value

파일명을 리턴한다.


Remarks

대화상자에 입력된 파일명을 알아내기 위해서 이 함수를 호출한다. 물론 확장자도 포함된다. 예를 들면, GetFileName은 C:\FILES\TEXT.DAT에 대해서 "TEXT.DAT"을 리턴한다. 

m_ofn.Flages가 OFN_ALLOWMULTISELECT 플개그 설정을 가지면, 파일 경로명을 알아내기 위해서 GetStartPosition과 GetNextPathName을 호출해야 한다.


CFileDialog::GetOFN
const OPENFILENAME& GetOFN() const;

OPENFILENAME& GetOFN;

Return Value

OPENFILENAME 구조체


Remarks

이 함수는 FileOpen이나 File Save As 다이얼로그 박스를 DoModal 함수를 호출하기 이전에 두번째 버전을 사용하여 초기화한다.

예를 들어 m_ofn의 맴버 lpstrTitle를 이용해 다이얼로그 박스의 캡션을 설정할 수 있다.

CFileDialog::HideControl
void HideControl( int nID);

 

Parameters

nID, 컨트롤의 ID를 숨길 수있습니다


Remarks

다이얼로그 박스는 반드시 OFN_EXPLORER 스타일을 이용하여 생성해야 한다

 

CFileDialog::GetFileExt

CString GetFileExt( ) const;


Return Value

파일의 확장자


Remarks

대화상자에 입력된 파일의 확장자를 알아내기 위해서 이 함수를 호출한다. 예를 들어, 파일명이 DATA.TXT인 파일명이 입력되면, GetFileExt는 "TXT"를 리턴한다.

m_ofn.Flags가 OFN_ALLOWMULTISELECT 플래그 설정을 가지면, 이 문자열은 첫 번째 문자열은 선택된 파일 그룹의 디렉토리 경로이고, 그 다음은 사용자가 선택한 모든 파일명을 가지는 널종료 문자열을 포함한다. 파일 경로명을 얻기 위해서 GetStartPosition과 GetNextPathName 멤버 함수를 사용한다.


CFileDialog::GetFileTitle

CString GetFileTitle( ) const;


Return Value

파일의 타이틀


Remarks

대화상자에 입력된 파일의 이름을 알아내기 위해서 이 함수를 호출한다. 파일의 이름은 확장자나 경로없이 그것의 이름만을 포함한다. 예를 들면, GetFileTitle은 C:\FILES\TEXT.DAT에 대해서 "TEXT"를 리턴한다.

m_ofn.Flags가 OFN_ALLOWMULTISELECT 플래그 설정을 가지면, 이 문자열은 첫 번째 문자열은 선택된 파일 그룹의 디렉토리 경로이고, 그 다음은 사용자가 선택한 모든 파일명을 가지는 널종료 문자열을 포함한다. 이러한 이유로, 리스트에서 다음 파일명을 얻기 위해서 GetStartPosition과 GetNextPathName 멤버 함수를 사용한다.


CFileDialog::GetReadOnlyPref

BOOL GetReadOnlyPref( ) const;


Return Value

대화상자에서 읽기 전용 체크박스가 선택되면, 0이 아닌 값을 그렇지 않으면 0을 리턴.


Remarks

윈도우즈 표준 파일 열기 대화상자에는 읽기 전용 체크 박스가 있다. 이 함수는 읽기 전용체크 박스가 체크되었는지를 결정하기 위해서 이 함수를 호출한다. 읽기 전용 체크 박스는 CFileDialog 생성자에서 OFN_HIDEREADONLY 속성을 설정하면 보이지 않게 할 수 있다.


CFileDialog::GetStartPosition

POSITION GetStartPosition( ) const;


Return Value

순환을 위한 위치값으로 리스트가 비어있으면 NULL을 리턴.


Remarks

m_ofn.Flags가 OFN_ALLOWMULTISELECT 플래그 설정을 가질 경우, 리스트에 있는 첫 번째 파일 경로명의 위치를 알아내기 위해서 이 멤버 함수를 호출한다.


CFileDialog::OnShareViolation

virtual UINT OnShareViolation( LPCTSTR lpszPathName );


Return Value

다음 값들 중 하나를 리턴:

OFN_SHAREFALLTHROUGH : 대화상자로부터 리턴된 파일명

OFN_SHARENOWARN : 처리할 필요가 있는 액션이 더 이상 없음

OFN_SHAREWARN : 에러에 대한 표준 경고 메시지를 검색


Parameters

lpszPahtName : 공유 위반이 발생한 파일의 경로


Remarks

공유 위반의 사용자 정의 처리를 제공하기 위해서 이 함수를 오버라이딩 한다. 보통, 이 함수를 사용할 필요가 없다. 왜냐하면, 프레임워크가 공유 위반의 디폴트 체크를 제공하고, 공유 위반이 발생하면, 메시지 박스를 보여주기 때문이다. 

공유 위반 확인을 불가능하게 하려면, m_ofn.Flags를 가진 플래그 OFN_SHAREAWARE를 조합한 OR 연산자를 사용한다.


CFileDialog::OnFileNameOK

virtual BOOL OnFileNameOK( );


Return Value

파일명이 유효한 이름이 아니면 1을 그렇지 않으면 0을 리턴.


Remarks

공통 파일 대화상자에 입력된 파일명의 사용자 유효성 검사를 제공하기를 원하는 경우만 이 함수를 오버라이딩한다. 이 함수는 어떤 어플리케이션 지정 이유로 파일명을 거절하도록 한다. 보통은, 이 함수를 사용할 필요가 없다. 왜냐하면, 프레임워크는 파일명의 디폴트 유효성 검사를 제공하고, 무효한 파일명이 입력된다면 메시지 박스를 출력하기 때문이다.

1이 리턴되면, 대화상자는 사용자가 다른 파일명을 입력하도록 하기 위해서 표시된 상태로 그대로 있는다. 대화 프로시저는 리턴 값이 0이면 대화상자를 없앤다. 다른 0이 아닌 리턴된 값들은 저장되어지고 사용되지는 않는다.


CFileDialog::OnLBSelChangedNotify

virtual void OnLBSelChangedNotify( UINT nIDBox, UINT iCurSel, UINT nCode);


Parameters

nIDBox : 선택된 리스트 박스나 콤보 박스의 ID

iCurSel : 현재 선택된 인덱스

nCode : 컨트롤 통지 코드. 이 인자는 다음 값들중 하나를 가져야만 한다.

CD_LBSELCHANGE : 단일 선택 리스트 박스에서 선택된 아이템인 iCurSel을 지정한다. 

CD_LBSELSUB : 다중 선택 리스트 박스에서 더 이상 선택된 것이 없다는 iCurSel을 지정한다.

CD_LBSELADD   Specifies that iCurSel is selected in a multiselection list box.

: 다중 선택 리스트 박스에서 선택된 iCurSel을 지정한다.

CD_LBSELNOITEMS   Specifies that no selection exists in a multiselection list box.

: 다중선택 리스트 박스에서 선택된 것이 더 이상 없다는 것을 지정한다.


Remarks

이 함수는 리스트 박스에서 현재 선택된 것이 바뀔려고 할 때마다 호출된다.  리스트 박스에서 선택의 변화를 처리하기 위해서 사용자 정의로 하려면 이 함수를 오버라이딩 한다.


CFileDialog::OnInitDone

virtual void OnInitDone( );


Remarks

WM_NOTIFY CDN_INITDONE 메시지를 처리하기 위해서 이 함수를 오버라이딩 한다. 통지 메시지는 시스템이 차일드 대화상자의 컨드롤들을 위한 공간을 만들기 위해서 열기나 저장하기 대화상자에서 컨트롤들을 배치하는 것을 마쳤을 때 보내진다.

통지는 OFN_EXPLORER 속성을 가지고 생성된 대화화상자에게만 보내진다. OFN_EXPLORER 속성에 대해서 알고싶으면, OPENFILENAME 구조체와 열기와 저장하기 대화상자를 참조하라.


CFileDialog::OnFileNameChange

virtual void OnFileNameChange( );


Remarks

WM_NOTIFY CDN_SELCHANGE 메시지를 처리하기 위해서 이 함수를 오버라이딩 한다.

Notification is sent only if the dialog box was created with the OFN_EXPLORER style. 통지는 OFN_EXPLORER 속성을 가지고 생성된 대화상자에게만 보내진다. 통지에 대해서 더 알고싶으면, CDN_SELCHANGE를 참조하시오. 통지는 OFN_EXPLORER 속성을 가지고 생성된 대화화상자에게만 보내진다. OFN_EXPLORER 속성에 대해서 알고싶으면, OPENFILENAME 구조체와 열기와 저장하기 대화상자를 참조하라.


CFileDialog::OnFolderChange

virtual void OnFolderChange( );


Remarks

WM_NOTIFY CDN_FOLDERCHANGE 메시지를 처리하기 위해서 이 함수를 오버라이딩 한다. 통지 메시지는 새로운 폴더가 열기 또는 저장하기 대화상자에서 열릴 때 보내진다.

통지는 OFN_EXPLORER 속성을 가지고 생성된 대화화상자에게만 보내진다. 통지에 대해서 더 알고싶으면, CDN_FOLDERCHANGE를 참조하시오. OFN_EXPLORER 속성에 대해서 알고싶으면, OPENFILENAME 구조체와 열기와 저장하기 대화상자를 참조하라.


CFileDialog::OnTypeChange

virtual void OnInitDone( );


Remarks

WM_NOTIFY CDN_TYPECHANGE 메시지를 처리하기 위해서 이 함수를 오버라이딩 한다. 통지 메시지는 사용자가 열기 또는 저장하기 대화상자에서 파일 타입의 리스트에서 새로운 파일 타입을 선택할 때 보내진다.

통지 메시지는 OFN_EXPLORER 속성을 가지고 생성된 대화상자에게만 보내진다.  통지 메시지에 대해서 더 알고싶으면, CDN_TYPECHANGE를 참도하시오. OFN_EXPLORER 속성에 대해서 더 알고싶으면, OPENFILENAME 구조체와 열기와 저장하기 대화상자를 참조하시오.

'Programming > Windows programming' 카테고리의 다른 글

OpenCV MFC용 이미지 클래스  (0) 2009.07.16
하나의 에디트박스에 두개의 스핀컨트롤러 사용하기  (0) 2009.06.11
PreTranslateMessage  (0) 2009.05.29
[VC++ 2003] File filter setting  (0) 2009.04.30
XML perser  (0) 2009.03.13
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


VC++ 6.0으로 날림 공부한지 얼마 안돼서 2003을 써먹을라니

공부할때와는 또 다른 부분들이 제법 보인다

그중하나가 파일 열기/저장에 관한 문제였는데

파일 필터를 사용하기위해 ID_FILE_SAVE등의 이벤트를 사용하여

파일 확장자 필터를 만들게 되면

타이틀바에 표시된 (title) - untitled 에서 untitled가 변경되지 않는

문제가 발생한다..

몇시간 고민끝에 구글신님의 도움을 받아 알아낸 정말 간단한 방법...

Resource view 에서 String Table중 IDR_MAINFRAME 을 이용하면 된다!

IDR_MAINFRAME 을 보면

(Title)\n\n(Title)\n\n\n(title).Document\n(title).Document

이런 식을로 되어있을 것있는 부분을 다음과 같이 변경하면 된다

(Title)\n\n(Title)\n My program File (*.dat)\n.dat\n(title).Document\n(title).Document

이때 파일 확장자가 여러가지를 설정할 경우에는 ';(세미콜론)'을 사용하여 구분지어주면 된다

'Programming > Windows programming' 카테고리의 다른 글

OpenCV MFC용 이미지 클래스  (0) 2009.07.16
하나의 에디트박스에 두개의 스핀컨트롤러 사용하기  (0) 2009.06.11
PreTranslateMessage  (0) 2009.05.29
CFileDialog  (0) 2009.05.22
XML perser  (0) 2009.03.13
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

학교 다닐때 배우면서 이걸 내가 과연 써먹을일이 있을까 싶어
완전 천대했던 XML을 써먹어야 하는 지못미 상황이...

머리가 어찌나 좋은지
용어고뭐고 그나마 당장 어렴풋이 생각나는건
어떤 형식으로 생겨먹었는지 밖에...

하늘이 무너져도 솟아날 구멍은 있다고
다행이 XML강좌를 하는 사이트를 찾아냈다는 사실ㅋㅋ

바로 요기

그리고 보너스!! C/C++에서 읽기용 파서로 쓸만한녀석
Small, simple, cross-platform, free and fast  C++ XML Parser



+ Recent posts