2017년 5월 23일 화요일

Pointer 변수의 array를 qsort를 사용해서 정렬하기

Pointer 변수의 array는 형변환이 살짝 복잡하게 보일수 있다.
Pointer의 Pointer가 qsort 함수에서 전달되므로 아래와 같이 형변환을 한다.

int CompareLayer(const void *a, const void *b)
{
CHg3DLayer *p1 = *(CHg3DLayer * const *)a;
CHg3DLayer *p2 = *(CHg3DLayer * const *)b;

return g_isAscending ? (p1->Compare(*p2, g_sortItem)) : (p2->Compare(*p1, g_sortItem));
}


2017년 5월 16일 화요일

MDI에서 창 선택을 탭으로 하는 방법

MDI 환경에서 창을 탭으로 분리하는 하려면 MainFrame이 만들어 질때 아래 코드만 추가하면 된다.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;

// 보관된 값에 따라 비주얼 관리자 및 스타일을 설정합니다.
OnApplicationLook(theApp.m_nAppLook);


CMDITabInfo mdiTabParams;
mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 사용할 수 있는 다른 스타일...
mdiTabParams.m_bActiveTabCloseButton = TRUE;      // FALSE로 설정하여 탭 영역 오른쪽에 닫기 단추를 배치합니다.
mdiTabParams.m_bTabIcons = FALSE;    // TRUE로 설정하여 MDI 탭의 문서 아이콘을 활성화합니다.
mdiTabParams.m_bAutoColor = TRUE;    // FALSE로 설정하여 MDI 탭의 자동 색 지정을 비활성화합니다.
mdiTabParams.m_bDocumentMenu = TRUE; // 탭 영역의 오른쪽 가장자리에 문서 메뉴를 활성화합니다.
EnableMDITabbedGroups(TRUE, mdiTabParams);

...
}

 새창을 만들면 탭이 자동으로 추가된다.


탭을 drag&drop하면 창이 분리된다.