본문 바로가기

MFC36

View Background Color(배경색) 변경하기 Background color of CView window구글 검색을 해보니 OnEraseBkgnd()함수를 사용하면 된다고 한다. 헤더에 함수를 선언하다. virtual BOOL OnEraseBkgnd(CDC* pDC); 소스의 메시지맵에 추가를 하고 함수를 아래와 같이 처리한다.ON_WM_ERASEBKGND() 배경색을 Button Face로 지정을 했다. BOOL CTestView::OnEraseBkgnd(CDC* pDC){// Get client areaCRect rc;GetClientRect(&rc); // Create grey brush and insert it into DCDWORD btnColor = GetSysColor(COLOR_BTNFACE);CBrush brush(RGB(GetRVa.. 2018. 6. 22.
Detect a CListCtrl selection change 구글을 검색해서 찾은 내용이다.LVN_ITEMCHANGED 메시지를 이용해서 확인할 수 있다. BEGIN_MESSAGE_MAP(CDlgTest, CDialog) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemChangedList)END_MESSAGE_MAP() /* ... */ void cDlgRun::OnItemChangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_SELECTED)) { int selected_item_ind.. 2018. 6. 18.
Select, Deselect a CListCtrl Item Programmatically 프로그래밍으로 CLIstCtrl의 Item을 선택 또는 해제하고 Highlight 처리하는 방법.구글에서 이것 저것 다 찾아 봤다. SetItemState 함수를 이용해서 처리한다고 여러곳에 설명되어 있는데 내가 원하는 것처럼 되지 않았다.내가 원하는 것은 Up/Down 버튼으로 List의 선택한 Row를 바꾸는 것이다. 예를 들어 1st Row가 Select 되어 있을 때 Down 버튼을 누르면 1st Row의 Highlight가 사라지고 2nd Row가 선택되어 Highlight가 되는 것이다.아래 함수처럼 Down 버튼을 클릭하면 버튼에 포커스가 이동된다. 따라서 현재 선택된 Item을 해제하고 다음 Item을 선택해서 Highlight를 이동하게 한다.그리고 ListCtrl에 포커스를 줘서 Hig.. 2018. 6. 18.
Bitmap 리소스로 Toolbar 만들기 https://msdn.microsoft.com/ko-kr/library/5xka8ka4.aspx 아이콘을 만들어서 Menu를 제작하기 위한 비트맵을 만든다. 우선 SVG 벡터 이미지를 가지고 아이콘을 1차 제작한다. 그리고 PNG 파일을 만든다.만든 이미지를 가지고 MSPAINT나 Paint.net을 이용해서 bmp 파일을 제작한다. 다른이름으로 저장을 할 때 Option을 24비트로 한다. 1. 리소스 파일을 연다. 2. 비트맵을 선택하고 리소스 추가를 클릭한다. 3. 아래와 같이 빈 비트맵 이미지가 생성된다. 캔버스 아래 쪽을 마우스 오른쪽 클릭하고 속성탭에 있는 Colors를 원하는 비트로 수정한다. 24비트로 선택하면 이미지가 최대한 덜 깨진다. 32비트는 선택이 안된다. 4. MSPAINT나 .. 2018. 5. 28.
MFC Icon 만들기 아이콘을 처음부터 만들수도 있지만 이미 오픈(무료)된 아이콘을 수정해서 제작하면 빨리 제작을 할 수 있다.우선 무료로 다운 받을 수 있는 아이콘 관련 홈페이지를 들어가 보자. https://www.flaticon.com 위의 홈페이지에 가보면 다양한 아이콘을 다운 받을 수 있다. 제공되는 이미지 형태(포맷)은 SVG, PNG, PSD 등이 있는데 SVG를 다운 받는다. SVG를 다운 받은 이유는 벡터 포맷이기 때문에 벡터는 확대/축소를 하더라도 깨지지 않고 점, 선 편집도 자유롭게 할 수 있다. PNG 같은 경우 비트맵이기 때문에 수정이 어렵다. 원하는 SVG 파일로 아이콘을 받았다면 편집을 해야 한다. 벡터 편집 특히 SVG 편집 프로그램 중 유명한 무료 편집툴이 있다. 잉크스케이프다. 아래 링크를 통.. 2018. 5. 23.
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.
DLL, EXE 파일에 Version 정보 넣기 Resource 파일에 Version 폴더가 있다. ID: VS_VERSION_INFO 를 선택하고 관련 정보를 입력하고 빌드하면 된다. 매번 잊어서 기록을 한다. 2016. 10. 31.
LIST