달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

출처 : http://wlsdnrtjd.blog.me/20171757254

출처 : http://coolhiro.tistory.com/32


Public 생성자

설명

CTreeCtrl::CTreeCtrl

CTreeCtrl CTreeCtrl 개체를 생성합니다.

Public 메서드

Name

설명

CTreeCtrl::Create

트리 뷰 컨트롤을 만들고이에 연결 된 CTreeCtrl 개체입니다.

CTreeCtrl::CreateDragImage

지정 된 트리 뷰 항목을 끌기 비트맵을 만듭니다

CTreeCtrl::CreateEx

지정 된 Windows 확장된 스타일 트리 컨트롤을 만들고 연결 하는 CTreeCtrl 개체입니다.

CTreeCtrl::DeleteAllItems

트리 뷰 컨트롤에서 모든 항목을 삭제합니다.

CTreeCtrl::DeleteItem

새 트리 뷰 컨트롤에서 항목을 삭제합니다.

CTreeCtrl::EditLabel

지정 된 트리 뷰 항목 전체를 편집합니다.

CTreeCtrl::EndEditLabelNow

현재 트리 뷰 컨트롤에 트리 뷰 항목의 레이블을 편집 작업을 취소합니다.

CTreeCtrl::EnsureVisible

트리 뷰 항목의 트리 뷰 컨트롤에 표시 됩니다.

CTreeCtrl::Expand

확장 되거나 축소 되는 지정 된 트리 뷰 항목의 자식 항목입니다.

CTreeCtrl::GetBkColor

컨트롤의 현재 배경 색을 검색합니다.

CTreeCtrl::GetCheck

Tree 컨트롤 항목의 선택 상태를 검색합니다.

디버깅[Visual Studio]

자식을 지정 된 트리 뷰 항목을 검색합니다.

CTreeCtrl::GetCount

트리 뷰 컨트롤에 연결 된 트리 항목을 검색 합니다.

CTreeCtrl::GetDropHilightItem

끌어서 놓기 작업의 대상으로 검색합니다.

CTreeCtrl::GetEditControl

지정 된 트리 뷰 항목을 편집 하는 편집 컨트롤의 핸들을 검색 합니다.

CTreeCtrl::GetExtendedStyle

현재 트리 보기 컨트롤을 사용 하는 확장된 스타일을 검색 합니다.

CTreeCtrl::GetFirstVisibleItem

지정 된 트리 뷰 항목의 표시 되는 첫 번째 항목을 검색합니다.

CTreeCtrl::GetImageList

트리 뷰 컨트롤과 연결 된 이미지 목록의 핸들을 검색 합니다.

CTreeCtrl::GetIndent

트리 뷰 항목의 오프셋 (픽셀)의 부모를 검색합니다.

CTreeCtrl::GetInsertMarkColor

트리 뷰에 대 한 삽입 표시를 그리는 데 사용 되는 색을 검색 합니다.

CTreeCtrl::GetItem

지정 된 트리 뷰 항목의 특성을 검색합니다.

CTreeCtrl::GetItemData

항목과 연관 된 32 비트 응용 프로그램 특정 값을 반환 합니다.

CTreeCtrl::GetItemExpandedImageIndex

지정한 항목이 현재 트리 뷰 컨트롤의 확장 된 상태일 때 표시할 이미지의 인덱스를 검색 합니다.

CTreeCtrl::GetItemHeight

트리 보기 항목의 현재 높이 검색합니다.

CTreeCtrl::GetItemImage

항목에 연결 된 이미지를 검색 합니다.

CTreeCtrl::GetItemPartRect

현재 트리 뷰 컨트롤에서 지정된 된 항목의 지정 된 파트에 대 한 경계 사각형을 검색합니다.

CTreeCtrl::GetItemRect

트리 뷰 항목의 경계 사각형을 검색합니다.

CTreeCtrl::GetItemState

항목의 상태를 반환합니다.

CTreeCtrl::GetItemStateEx

현재 트리 뷰 컨트롤에서 지정 된 항목의 확장된 상태를 검색합니다.

CTreeCtrl::GetItemText

항목의 텍스트를 반환합니다.

CTreeCtrl::GetLastVisibleItem

현재 트리 뷰 컨트롤에서 마지막으로 확장 된 항목을 검색합니다.

CTreeCtrl::GetLineColor

Tree view 컨트롤에 현재 선 색을 검색합니다.

CTreeCtrl::GetNextItem

지정한 관계와 일치 하는 다음 트리 뷰 항목을 검색 합니다.

CTreeCtrl::GetNextSiblingItem

지정 된 트리 뷰 항목의 다음 형제를 검색합니다.

CTreeCtrl::GetNextVisibleItem

지정 된 트리 뷰 항목의 표시 되는 다음 항목을 검색합니다.

CTreeCtrl::GetParentItem

지정 된 트리 뷰 항목의 부모를 검색합니다.

CTreeCtrl::GetPrevSiblingItem

지정 된 트리 뷰 항목의 이전 형제를 검색합니다.

CTreeCtrl::GetPrevVisibleItem

지정 된 트리 뷰 항목의 표시 되는 이전 항목을 검색합니다.

CTreeCtrl::GetRootItem

지정 된 트리 뷰 항목의 루트를 검색합니다.

CTreeCtrl::GetScrollTime

Tree view 컨트롤에 대 한 최대 스크롤 시간을 검색합니다.

CTreeCtrl::GetSelectedCount

현재 트리 뷰 컨트롤에서 선택한 항목의 수를 검색 합니다.

CTreeCtrl::GetSelectedItem

현재 선택된 된 트리 뷰 항목을 검색합니다.

CTreeCtrl::GetTextColor

현재 컨트롤의 텍스트 색을 검색합니다.

CTreeCtrl::GetToolTips

하위 트리 뷰 컨트롤에서 사용 되는 도구 설명 컨트롤에 대 한 핸들을 검색 합니다.

서비스

트리 뷰 컨트롤에 연결 된 표시 되는 트리 항목의 수를 검색 합니다.

CTreeCtrl::HitTest

CTreeCtrl 반환 관련 커서의 현재 위치는 CTreeCtrl 개체.

CTreeCtrl::InsertItem

트리 뷰 컨트롤에 새 항목을 삽입합니다.

CTreeCtrl::ItemHasChildren

자식 항목이 지정 된 항목이 있는 경우 0이 아닌 값을 반환 합니다.

CTreeCtrl::MapAccIdToItem

지정 된 내게 필요한 옵션 식별자를 핸들 현재 트리 뷰 컨트롤에 트리 뷰의 항목에 매핑합니다.

CTreeCtrl::MapItemToAccID

트리 보기 항목에 현재 트리 뷰 컨트롤에서 내게 필요한 옵션 식별자로 지정 된 핸들을 매핑합니다.

CTreeCtrl::Select

선택, 스크롤되어 또는 지정 된 트리 뷰 항목을 다시 그립니다.

CTreeCtrl::SelectDropTarget

트리 항목을 끌어서 놓기 작업의 대상으로 다시 그려집니다.

CTreeCtrl::SelectItem

지정 된 트리 뷰 항목을 선택합니다.

CTreeCtrl::SelectSetFirstVisible

지정 된 트리 뷰 항목으로 표시 되는 첫 번째 항목을 선택합니다.

CTreeCtrl::SetAutoscrollInfo

현재 트리 뷰 컨트롤의 스크롤 속도 설정합니다.

CTreeCtrl::SetBkColor

컨트롤의 배경색을 설정합니다.

CTreeCtrl::SetCheck

Tree 컨트롤 항목의 선택 상태를 설정합니다.

CTreeCtrl::SetExtendedStyle

현재 트리 뷰 컨트롤을 위한 확장된 스타일을 설정합니다.

CTreeCtrl::SetImageList

트리 뷰 컨트롤과 연결 된 이미지 목록의 핸들을 설정 합니다.

CTreeCtrl::SetIndent

트리 뷰 항목의 오프셋 (픽셀)의 부모를 설정합니다.

CTreeCtrl::SetInsertMark

Tree view 컨트롤에서 삽입 표시를 설정합니다.

CTreeCtrl::SetInsertMarkColor

트리 뷰에 대 한 삽입 표시를 그리는 데 사용 되는 색을 설정 합니다.

CTreeCtrl::SetItem

지정 된 트리 뷰 항목의 특성을 설정합니다.

CTreeCtrl::SetItemData

항목과 연관 된 32 비트 응용 프로그램 특정 값을 설정 합니다.

CTreeCtrl::SetItemExpandedImageIndex

지정한 항목이 현재 트리 뷰 컨트롤의 확장 된 상태일 때 표시할 이미지의 인덱스를 설정 합니다.

연습: 구성 요소 디자이너에서 Windows 서비스 응용 프로그램 만들기

높이 트리 뷰 항목을 설정합니다.

CTreeCtrl::SetItemImage

이미지를 항목에 연결 합니다.

CTreeCtrl::SetItemState

항목의 상태를 설정합니다.

CTreeCtrl::SetItemStateEx

현재 트리 뷰 컨트롤에서 지정된 된 항목의 확장된 상태를 설정합니다.

CTreeCtrl::SetItemText

항목의 텍스트를 설정합니다.

CTreeCtrl::SetLineColor

Tree view 컨트롤에 현재 선 색을 설정합니다.

CTreeCtrl::SetScrollTime

Tree view 컨트롤에 대 한 최대 스크롤 시간을 설정합니다.

CTreeCtrl::SetTextColor

컨트롤의 텍스트 색을 설정합니다.

CTreeCtrl::SetToolTips

하위 트리 뷰 컨트롤의 도구 설명 컨트롤을 설정합니다.

CTreeCtrl::ShowInfoTip

현재 트리 뷰 컨트롤에는 지정 된 항목에 대 한 정보 팁을 표시합니다.

CTreeCtrl::SortChildren

지정 된 부모 항목의 자식으로 정렬합니다.

CTreeCtrl::SortChildrenCB

응용 프로그램 정의 정렬 함수를 사용 하 여 지정 된 부모 항목의 자식으로 정렬 합니다.


Posted by dewlit
|

class간 교차 참조시 오류가 발생하는 경우
error C2146: 구문 오류 : ';'이(가) ... 식별자 앞에 없습니다. error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. ... 위와 같은 에러가 나는 이유는 클래스를 찾을 수 없는 경우에 발생합니다. 분명히 클래스가 있는데도 불구하고 이런 에러메시지가...


실례로 헤더를 서로 교차해서 include할 경우 발생했음


출처 : https://plus.google.com/+SeokjoonYun/posts/LBD2cj4ySex

Posted by dewlit
|

Windows 환경에서 C/C++을 사용하여 코딩할 때 utf-8과 cp949의 인코딩을 변환하는 방법은 크게 두 가지가 있습니다. 첫째로는 Windows에서 제공해주는 MultiByteToWideChar()와 WideCharToMultiByte()라는 API를 이용하는 것이고, 둘째로는 리눅스나 php를 써 보신 분이라면 익숙한 iconv를 사용하는 것입니다. iconv를 사용하는 것이 직관적으로 볼 때에는 상당히 편하므로 이 방법을 쓰는 것도 좋지만, 애석하게도 iconv는 MinGW 출시 이후로 Visual Studio에서의 포팅에 관한 지원을 끊었습니다. 다행스럽게도 Visual Studio에 대한 지원이 끊긴 지 얼마 안 되었고, 헤더 파일도 몇 개만 바꿔 주면 될 정도로 상당히 간단한 작업을 통해 dll로 포팅할 수 있습니다. 자세한 사항은 링크를 참조해주세요.
[win32] iconv 포팅하기
또, (wx)Dev-C++이나 mingw를 사용하시는 분들에 한해서 iconv를 별다른 복잡한 과정 없이 쉽게 쓰실 수 있습니다. 이에 관해서는 전에 포스팅한 링크를 남겨드리니 이 링크를 참조하시기 바랍니다.
iconv() - 문자열 인코딩 변환

하지만 Windows 환경에서 제공되는 다른 컴파일러의 경우는 얘기가 다릅니다. iconv를 쓸 수 없다면 인코딩표를 참조해서 직접 코딩을 하거나, 인터넷에서 돌아다니는 사용법도 모르는 소스를 일단 프로젝트에 추가해야 하죠. 만약 추가한 소스에서 에러가 난다면 생판 처음 보는 남의 코드를 디버깅해야 하는 웃지 못할 일이 벌어지기도 합니다. 그래서 전 Borland C++ 등의, Windows에서 돌아가는 다른 컴파일러에서도 쉽게 쓸 수 있도록 API를 활용하는 방안을 여러분들께 말씀드리고자 합니다.


사실 WinAPI에서는 cp949 - utf8을 바로 바꿔 주는 함수는 존재하지 않습니다. 대신에 cp949 - Unicode(UTF16), Unicode - UTF8을 지원해주지요. 우리는 Unicode를 중간 매개로 삼아 cp949 - utf8 변환을 할 것입니다.

먼저 cp949 - Unicode를 살펴보겠습니다. cp949에서 Unicode로 변환하는 것은 MultiByteToWideChar()란 함수를 통해 할 수 있습니다. MSDN에서 발췌한 내용에 따르면 원형은 이렇게 된다는군요.

int MultiByteToWideChar(   __in   UINT CodePage,   __in   DWORD dwFlags,   __in   LPCSTR lpMultiByteStr,   __in   int cbMultiByte,   __out  LPWSTR lpWideCharStr,   __in   int cchWideChar );


cp949에서 Unicode로 변환하기 위해서는 다음과 같이 함수를 사용하면 됩니다.

char ansi[MAX]; // 여기 안에 원문이 있다고 가정합시다. ^^* 
WCHAR unicode[MAX]; // 여기엔 변환할 문자열을 넣을 것입니다. 
 
// 혹시 모르니까 깔끔하게 정리해주고... 
memset(unicode, 0, sizeof(unicode)); 
 
// 변환! 
MultiByteToWideChar(CP_ACP, 0, ansi, -1, unicode, sizeof(unicode));


CodePage는 multibyte 원문의 인코딩 형식을 나타내는 건데요, ANSI이므로 CP_ACP를 써줍니다. 여러 가지가 많지만 하나하나 설명해드리진 않겠습니다. 자세한 건 아래의 MSDN 링크를 참조해주세요.
lpMultiByteStr는 원문의 포인터 주소를 나타내는 것입니다. 쓰기 작업이 되지 않으니 const char *를 써 주셔도 됩니다. 
cbMultiByte는 최대로 변환할 바이트 수인데, 일반적으로 strlen()을 활용해서 넣기도 합니다만 굳이 그걸 쓰지 않아도 됩니다. -1은 "Null 문자까지 포함해서 문자열 전체"라는 뜻이니까요.
lpWideCharStr는 유니코드로 변환할 데이터가 저장될 공간을 나타내는 것이고, cchWideChar는 버퍼의 크기를 나타냅니다. 일반적으로 sizeof를 써 줍니다.

이제 Unicode - utf8을 보겠습니다. 이번에는 WideCharToMultiByte()란 함수를 쓸 건데요, 이 함수는 매개 변수 두 개가 추가된 것 외엔 별다른 게 없습니다. 원형을 봅시다.

int WideCharToMultiByte(   __in   UINT CodePage,   __in   DWORD dwFlags,   __in   LPCWSTR lpWideCharStr,   __in   int cchWideChar,   __out  LPSTR lpMultiByteStr,   __in   int cbMultiByte,   __in   LPCSTR lpDefaultChar,   __out  LPBOOL lpUsedDefaultChar );


Unicode에서 utf8로 변환하려면 다음과 같이 코드를 써 주면 됩니다.

WCHAR unicode[MAX]; // 위에서 변환한 정보가 그대로 있다고 생각합시다^^ 
char utf8[MAX]; // 여기에 변환할 문자열을 넣겠습니다. 
 
// 정리 정리 
memset(utf8, 0, sizeof(utf8)); 
 
// 변환! 
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, sizeof(utf8), NULL, NULL);


UTF8로 변환할 것이므로 CodePage에 CP_UTF8이 오신 걸 보실 수 있습니다.
뒤에 두 개의 매개 변수가 추가되었는데, 실제로 사용한 부분을 보시면 둘 다 NULL로 채워버린 걸 보실 수 있습니다. 이런 식의 변환에는 그다지 중요하지 않으므로 자세한 설명은 생략하겠습니다. 확실히 알고 싶다면 마찬가지로 MSDN 링크를 참조해주세요.

이제 반대로 UTF8에서 cp949로 가 봅시다. 위의 예제를 꼼꼼히 보셨다면 별다른 생각 없이 쉽게 구현하실 수 있습니다. 먼저 UTF8에서 Unicode로 변환해보겠습니다.

char utf8[MAX]; // utf8로 인코딩된 문자열이 이미 들어가 있다고 생각합시다. 
WCHAR unicode[MAX]; // 유니코드 버퍼 
 
memset(unicode, 0, sizeof(unicode)); 
 
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, unicode, sizeof(unicode));



바로 Unicode에서 cp949로 변환해보겠습니다.

WCHAR unicode[MAX]; 
char ansi[MAX]; 
 
memset(ansi, 0, sizeof(ansi)); 
 
WideCharToMultiByte(CP_ACP, 0, unicode, -1, ansi, sizeof(ansi), NULL, NULL);


이렇게 코딩하시면 됩니다.


위에서 썼던 방법을 쓰기 좋게 통합하면 다음과 같습니다.
ANSI to UTF8

string ansi_to_utf8(string& ansi) 
{ 
    WCHAR unicode[1500]; 
    char utf8[1500]; 
 
    memset(unicode, 0, sizeof(unicode)); 
    memset(utf8, 0, sizeof(utf8)); 
 
    ::MultiByteToWideChar(CP_ACP, 0, ansi.c_str(), -1, unicode, sizeof(unicode)); 
    ::WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, sizeof(utf8), NULL, NULL); 
 
    return string(utf8); 
}


UTF8 to ANSI

string utf8_to_ansi(string &utf8) 
{ 
    WCHAR unicode[1500]; 
    char ansi[1500]; 
 
    memset(unicode, 0, sizeof(unicode)); 
    memset(ansi, 0, sizeof(ansi)); 
 
    ::MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, unicode, sizeof(unicode)); 
    ::WideCharToMultiByte(CP_ACP, 0, unicode, -1, ansi, sizeof(ansi), NULL, NULL); 
 
    return string(ansi); 
}



C++에서 쓰이는 string이 조금 들어갔는데, 이 정도는 C에서 사용할 수 있도록 쉽게 바꿀 수 있으므로 C 언어에서 쓰는 방법을 따로 소개해드리진 않겠습니다.

 

추가;; C에서 사용할 수 있게 변경

char* utf8_to_ansi(char *utf8) 

    WCHAR *unicode = NULL; 
    char *ansi = NULL; 
 
 unicode = (WCHAR*)calloc(1, strlen(utf8)*2);
    ::MultiByteToWideChar(CP_UTF8, 0, utf8, -1, unicode, strlen(utf8)*2);

 ansi = (char*)calloc(1, _tcslen(unicode)*2);
    ::WideCharToMultiByte(CP_ACP, 0, unicode, -1, ansi, _tcslen(unicode)*2, NULL, NULL); 
 
    return ansi; 
}



링크:
MSDN - WideCharToMultiByte
MSDN - MultiByteToWideChar

 

 

출처:http://marnitto.edogawa.kr/71


출처:http://blog.naver.com/PostView.nhn?blogId=nimi315&logNo=50093464158


Posted by dewlit
|