본문 바로가기

컴퓨터/MFC_API32

Resize ScrollView MDI based application의 CScrollView-derived view의 크기를 정하기 위해서는, SetScrollSizes로 frame의 크기를 정해 준 후, ResizeParentToFit(false); 구문으로, view의 client 크기가 frame 크기에 맞도록 변경해 준다. CScrollView-derived view에서 SetWindowPos 함수를 사용하여 이와 같은 작업을 할 수 없는 이유는, 이 함수는 view의 크기를 변경하는 것이지, frame의 크기를 변경하는 것이 아니기 때문이다. 또한, GetParentFrame()->SetWindowPos 를 사용하지 않는 이유는, 이 함수를 사용할 경우, scroll bar의 크기까지 고려하여 window의 크기를 설정해야 .. 2009. 12. 27.
CTreeCtrl 에서 check box를 집어 넣고 다루기 VC++ 6.0 IDE로 CTreeCtrl control을 집어 넣은 후 property 대화 상자를 통해 tree control의 property를 설정하면 제대로 작동하지 않는 경우가 있으므로, 직접 코드로 집어 넣는다. VC++ 9.0 (Visual Studio 2008) 의 경우에는 CTreeCtrl이나 CListCtrl 의 경우 속성 대화 상자에 모든 속성이 나와 있지는 않다. 즉, 코드상으로 변경시켜 줄 수 있는 속성이 속성 대화 상자에 나와 있지 않는 것이 있으므로 직접 코드로 작성해 주는 편이 낫다. // check box를 트리에 추가하기 위해서는 TVS_CHECKBOXES 속성을 setting 해야 한다. // _treeResult가 CTreeCtrl 변수의 instance 이름이다. .. 2009. 12. 27.
프로그램이 플로피 디스크를 읽는 것 방지 컴퓨터에 있는 드라이브를 전부 나열하는 프로그램들은 종종 각 드라이브에 있는 가장 첫번째 디렉토리 읽기를 시도한다. 이럴 경우 플로피 디스크 드라이브에까지 이와 같은 시도를 하는 프로그램을 구동시키면 '끅!' 과 같은 소리가 나고 플로피 디스크를 읽기 시도한다. 이와 같은 일을 피할 수 있는 방법은 매우 간단한다. 즉, // 사용중인 모든 드라이브 문자열을 얻어 간다. DWORD logicalDrives = GetLogicalDrives(); unsigned int i = 0; do{ // 사용중인 드라이브 문자열 각각에 대하여 if((logicalDrives & 1) != 0){ CString strDrive = ""; // 문자열을 setting 한다. strDrive.Format("%c:\\",i+.. 2009. 12. 27.
Scrollbar message handler 처리하기 CDialog-derived 에서뿐만이 아니라, SDI나 MDI에서도 동적으로든 정적으로든 CScrollBar를 쓰게 될 때, scrollbar에서 오는 message를 일일이 작성해 줄 때가 있는데, 다음과 같은 코드가 자주 사용된다. void CTestView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // scroll 되기 전의 위치를 저장해 놓는다. UINT nOldPos = pScrollBar->GetScrollPos(); int diff = 0; // scroll 될 정도 switch(nSBCode){ // 왼쪽이 눌리면 예전 값에서 1을 뺀다. case SB_LINELEFT: diff = -1; break; // PAGE의 .. 2009. 12. 27.