728x90
반응형

MDI 5

[MFC] MDI에서 자식창 크기 조절하기

MDI 프로그램을 하고 있는데, CChildFrame의 크기를 조절해야 해서 MoveWindow를 사용하려고 하니 Frame 좌측 상단 좌측을 정확하게 찾을 수가 없었다. 그래서 여러 가지 조합을 사용했는데 미세하게 오차가 나서 고민하는 차에 SetWindowPos를 하면 되나 싶어서 사용하니 쉽게 된다. SetWindowPos(NULL, 0, 0, frameRect.Width(), frameRect.Height(), SWP_NOMOVE); 몇 시간을 Layout 잡는데 허비했다. 주의할 점은 꼭 Frame을 핸들로 잡고해야 한다는 것이다.

[MFC] MDI 자식창 모두 닫기

작업을 위해서 띄어 놓은 다수의 창을 한꺼번에 닫는 일은 종종 발생한다. 모든 창을 한꺼번에 닫는 것은 자식 창을 모두 검색해야 할 것 같지만 MFC는 해당 기능을 지원한다. App Class에는 CloseAllDocument()라는 함수가 있다. 간단한 호출로도 모든 자식 창을 닫을 수 있다. theApp.CloseAllDocument(); 다양한 형태의 Document를 사용하고 있다면, 분명 CDocTemplate를 종류 별로 멤버 변수로 등록하고 사용하고 있을 것이다. 그럴 경우에는 멤버 변수 별로 호출하면 각각의 자식 창을 모두 닫을 수 있다. CDocTemplate* pTemplateDoc = theApp.m_pDocTemplate; pTemplateDoc->CloseAllDocuments(F..

[MFC] MDI에서 자식 창을 맨 앞으로 가져오기

MDI에서 ChildFrame을 관리하는 것은 생각보다 번거로운 일이다. CMainFrame에서 CChildFrame을 찾고 해야 한다. MDI에서 새로운 창을 만들 때에 가끔 동일 창을 호출하는 경우가 있다. 그럴 경우에는 창을 새롭게 만들 것이 아니라 만들어진 창을 맨 앞으로 끄집어 와야 한다. 보통 CChildFrame을 컨트롤할 때는 아래와 같이 한다. // CMainFrame 에서 라면, CWnd* pWnd = FindWindow(NULL, /*ChildWnd Name*/); pWnd->BringWindowToTop(); // 해당 창을 맨 앞으로 가져온다. 하지만 Caption의 이름이 바뀔 수도 있고, 관리하기도 쉽지 않다. 그래서 CMainFrame에 CChildFrame을 관리할 수 있는..

[MFC] MDI에서 시작 시 새 창 방지 코드

MFC에서 MDI로 프로젝트를 만들면, 실행 후 항상 새 창 하나가 나타난다. 이것을 방지하기 위해서는 App 파일의 InitInstance() 함수에 아래와 같은 코드를 집어넣어주면 된다. // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 새창 열기 금지 if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; 함수가 끝나가기 직전에 위치하고 있다.

[MFC] 다이얼로그 캡션 변경

MFC에서 윈도우 창의 캡션을 변경하려면, 첫 번째로는 CMainFrame::PreCreateWindow에서 CREATESTRUCT를 변경하는 방법이 있다. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style &= ~(FWS_ADDTOTITLE); // 캡션이 파일 읽어오기 등으로 바뀌지 않도록 변경 cs.lpszName = _T("MY APPLICATION"); // 원하는 캡션 작성 return TRUE; } 두 번째는 그냥 CMainFrame에서 SetWindowText(캡션명)을 호출하면 된다. CMainFrame이 아니라 다른 곳에서 변경하고 싶..

728x90
반응형