본문 바로가기

전체 글280

CListCtrl DeleteItem https://msdn.microsoft.com/ko-kr/library/84fyba4z.aspx List View에서 특정 Row을 삭제할 때 주의를 해야 한다. 아래와 같이 DeleteItem에 i번째 Row을 삭제하라고 처리하면 정상적으로 삭제가 되지 않는다. int nCount = m_myListCtrl.GetItemCount(); // Delete all of the items from the list view control.for (int i=0; i < nCount; i++){m_myListCtrl.DeleteItem(i);} n번째부터 m번째까지 삭제를 한다면 아래와 같이 구현을 해야 정상적으로 처리된다.n번째를 m-n번 만큼 삭제를 하면 n부터 m까지 Row가 삭제된다. int nCoun.. 2018. 5. 15.
How to create ResizeDialog by Xtreme Toolkit ResizeDialog는 Dialog가 Resize가 되어야 하고 내부 Control이 Dialog가 Resize가 될 때 Layout도 같이 자동으로 변경되는 것을 의미한다. 인터넷을 검색하면 _CWndDynamicLayout template framework class를 만들어서 사용하는 예제 (를 검색할 수 있는데 Xtreme Toolkit을 사용하면 좀더 편하게 작업을 할 수가 있다. 우선 Dialog를 생성한다. 그럼 MFC는 CDialog를 상속해서 만들어진다.우리는 Xtreme Toolkit의 CXTPResizeDialog 클래스를 상속해서 만든다. 기본 생성한 Dialog의 클래스 이름이 TestDlg라면 아래와 같이 자동 제작이 된다. class CconfigListDlg : public.. 2018. 2. 28.
CTreeCtrl에서 SetItemData로 입력한 DWORD_PTR 삭제 방법 MFC에서 CTreeCtrl을 만들어 사용할 때 SetItemData에 DWORD_PTR를 특정 구조체나 Class의 객체 포인터를 넣어 사용하는 경우가 많다. 그럼 Struct 또는 Class를 Object을 New로 생성하고 언제 Delete를 해야 메모리 누수가 발생하지 않을까? 기존에 개발된 소스에는 Delete를 하는 부분이 없어서 많은 메모리 누수가 발생하고 있었다. 자료를 찾아보니 CTreeCtrl 객체를 선언에서 가지고 있는 Parent에 ON_NOTIFY 이벤트를 이용해서 처리를 하는 것을 발견했다. 일반적으로 CTreeCtrl의 Item을 삭제할 때에는 DeleteItem 또는 DeleteAllItems를 이용해서 삭제를 한다. 그러나 이것은 Tree의 Item을 삭제하는 것이지 동적으.. 2017. 12. 20.
pointer new, delete, 지역 pointer 변수 오류 Pointer의 이름이 길거나 구조체 안에 있는 포인터일 경우 지역 포인터 변수를 만들어 임시 처리를 하는 경우가 있다. 이 때 오류를 범할수 있다. 예을 들어 A구조체에 char* b가 존재할 경우 우리는 사용을 할 때 A->b로 접근을 해서 사용을 한다. 이 이름이 길면 함수 안에서 임시 포인터를 만들어서 사용을 한다. char* temp = A->b; 위와 같이 하면 b의 포인터 주소가 temp와 같고 우리는 temp를 A->b를 대신해서 사용을 한다. 만약 A->b를 delete 하고 다시 new를 해야 하는 상황일 경우 어떤 일이 발생할까? char* temp = A->b; if (temp) delete temp; temp = NULL; 위와 같이 처리를 하면 A->b는 NULL이 될까? tem.. 2017. 3. 28.
WPF 문자열 포맷 정리 (String Format) 참조 문서: https://msdn.microsoft.com/ko-kr/library/dwhawy9k(v=vs.110).aspx https://msdn.microsoft.com/ko-kr/library/0c899ak8(v=vs.110).aspx 하도 잊어 버려서 MSDN 내용을 이곳에 저장했다. 매번 할 때마다 잊어버린다. ㅠㅠ ///////////////////////////////////////////////////////////////////////////////////// 표준 숫자 형식 문자열 표준 숫자 서식 문자열은 일반 숫자 형식의 서식을 지정하는 데 사용됩니다. 표준 숫자 서식 문자열은 Axx 형식을 취합니다. 여기서A는 서식 지정자라는 단일 영문자입니다. 공백을 포함하여 영문자가 두 개 .. 2017. 2. 10.
DLL, EXE 파일에 Version 정보 넣기 Resource 파일에 Version 폴더가 있다. ID: VS_VERSION_INFO 를 선택하고 관련 정보를 입력하고 빌드하면 된다. 매번 잊어서 기록을 한다. 2016. 10. 31.
CryptGetUserKey() 함수 이용시 에러 발생시 확인 방법 CryptGetUserKey() 함수를 이용해서 MS에서 제공하는 Key를 관리할 수 있다.이 때 잘 사용하다가 이유없이 에러가 발생하는 경우가 있다. 저장된 키에 문제가 발생했을 경우이다.https://msdn.microsoft.com/ko-kr/library/windows/desktop/bb204778(v=vs.85).aspx 위의 페이지에 MS에서 제공하는 Key Storage에 대한 정보를 확인할 수 있다. 이와 같은 문제가 발생하면 관련 Key가 저장된 폴더를 삭제하고 함수를 이용하면 문제가 해결이 된다. 일반적으로 RSA를 사용할 경우 아래 폴더를 삭제 한다. user/appdata/roaming/microsoft/crypto/rsa 2016. 9. 30.
unicode CString to char* MFC에서는 CString을 많이 사용을 하는데 정말 지원하는 함수가 적다.char*로 변경할 때 아래와 같이 처리를 하면 된다. char buffer[1024] = {0};CString m_str = _T("TEST"); memset(buffer, 0, 1024);strcpy(buffer, CT2A(m_str) ); CT2A는 ATL and MFC String Conversion Macros로서 MFC에서 제공하는 매크로이다.아래 링크를 들어가면 자세한 설명이 있다. https://msdn.microsoft.com/en-us/library/87zae4a3.aspx 2016. 9. 20.
MSVS 팀프로젝트 소스 다운로드 방법 MSVS Team Project를 처음 사용해서 너무 혼란스럽다.Git도 별로던데 SVN만 사용해서 그런지 다른 것은 너무 불편하다. SVN과 달리 checkout은 소스를 받아오는 기능이 아니다. 서버에서 소스를 받기 위해서는 "솔루션"을 선택하고 오른쪽 마우스를 클릭해서 "소스제어"를 선택한다."소스제어" - "특정 버전 가져오기" 메뉴를 선택하면 소스를 받아 올 수 있다. 위와 같이 진행을 한 후에 "특정 버전 가져오기"를 선택한다. 위와 같이 "최신 버전"을 선택하고아래 체크 박스에서 필요한 것을 선택한 후 "가져오기" 버튼을 누른다. 이렇게 해서 소스를 서버로부터 다운 받을 수 있다. 잊어버릴 것 같아 기록한다. 2016. 9. 20.