VC++ 2008에서 다이어로그를 도킹하려고 하려고 했는데 제대로 되지 않았다.
하다보니 도킹형태가 프로젝트 생성과정에 따라서 다르게 코딩해야 된다는 것을 알았다.
VC++2008에서 기존의 방법대로 만들기 위한 내가 한 생성 방법은 다음과 같다.
이전의 도킹 방법은 사용자 인터페이스에서 클래식 메뉴를 사용함으로써 되는것 같다.
응용프로그램 종류
응용프로그램 종류 :단일문서
프로젝트 스타일 : MFC표준
사용자 인터페이스 기능
명령 모음(메뉴/도구 모음/리본) : 클래식 메뉴 사용
코딩
* 도킹할 다이어로그 생성 (이건 꼭 해주어야 함)
ID : IDD_DIALOG1
Border : None
Style : Child
MainFrame.h
public:
CDialogBar m_DockingBar;
MainFrame.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
if(
!m_DockingBar.Create(this,
MAKEINTRESOURCE(IDD_DIALOG1), // 리소스 템프릿
CBRS_LEFT, // 스타일
IDD_DIALOG1) // 리소스 아이디
)
{
return -1;
}
m_DockingBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_DockingBar);
...
}
여기까지가 클래식 메뉴를 사용한 다이어로그의 도킹방법이다.
문제는 VC++ 2008에서 인터페이스를 클래식 메뉴를 사용하지 않았을 때이다.
클래식 메뉴를 사용하지 않으면 CMainFrame이 CFrameWnd를 상속받지 않고 CFrameWndEx를 상속받는데
이것 때문인지는 모르겠지만 도킹방법이 달라지게 된다.
이전에 CDialogBar를 사용한 것과 달리 CPaneDialog를 사용해보았다.
응용프로그램 종류
응용프로그램 종류 :단일문서
프로젝트 스타일 : MFC표준
사용자 인터페이스 기능
명령 모음(메뉴/도구 모음/리본) : 메뉴 모음 및 도구 모음 사용
코딩
* 도킹할 다이어로그 생성 (이건 꼭 해주어야 함)
ID : IDD_DIALOG1
Border : None
Style : Child
MainFrame.h
public:
CPaneDialog m_DockingBar;
MainFrame.cpp
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
if(
!m_DockingBar.Create (
_T("DialogBar"), this, TRUE,
MAKEINTRESOURCE (IDD_DIALOG1),
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
CBRS_LEFT | CBRS_FLOAT_MULTI,
IDD_DIALOG1)
)
{
return -1;
}
m_DockingBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_DockingBar);
...
}
실행하면 아무것도 나오지 않는다.
실패한 것이 아니다.
[보기]에서 [도구 모음 및 도킹 창]을 보면 추가할 수 있다.
다음과 같이 왼쪽에 창이 생긴다.
당연히 도킹도 가능하다.
그리고 마지막 문제에 도착했다. 다이어로그의 버튼이 활성화되지가 않는다.
해결방법은 CPaneDialog클래스를 그대로 쓰지 말고 CPaneDialog를 상속받는 클래스를 만들도록 한다.
그리고 이 클래스의 헤더에 아래와 같이 버추얼 함수를 추가하도록 한다.
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
CPaneDialog::OnUpdateCmdUI(pTarget, FALSE);
}
'Devlopment > C,C++,Ruby,Python' 카테고리의 다른 글
[VC++] 레지스트리 삭제 (저장된 설정 삭제 방법) (0) | 2010.04.13 |
---|---|
[VC++] 비트맵 출력 (0) | 2010.04.13 |
[VC++] 맵 사용방식 (0) | 2010.04.09 |
[VC++] Extern과 Const (0) | 2010.04.07 |
[VC++] 스레드(Thread) 동기화 (0) | 2010.04.01 |
[VC++] 파일 입출력시 버퍼 크기 문제 (0) | 2010.03.16 |
[VC++] 쓰레드 (0) | 2010.03.16 |
VC++ 변수 표기법 (0) | 2010.03.12 |
VC++ Data Type (0) | 2010.03.12 |
VC++ 컴파일/모드 (0) | 2010.03.12 |