728x90
반응형
예전에 그냥 쓰던 DockingPane을 사용하려고 하니 계속 Error가 발생했다. 여기저기 찾아봐도 그냥 사용하는 법만 있고 어떻게 사용해야 되는지는 생략되어 있었다. ( 그만큼 기본적이라는 건가.. ) 그래서 MFC의 CDockingPane을 적용하는 법을 정리해 둔다.
Window : 유리들이 창틀에 끼여 집합된 창
Pane : 그냥 유리 한 장
Floating Pane : 떠다니는 유리 한 장 ( 어느 Window에도 끼어넣을 수 있는.. )
CDockingPane class를 MainFrame에 사용하려면 기존의 상속된 CFrameWnd(혹은 CMDIFrameWnd)를 사용할 수 없다. 상속받는 class를 CFrameWndEx(혹은 CMDIFrameWndEx)로 변경해야 한다.
class CMainFrame : public CMDIFrameWndEx // CMDIFrameWnd → CMDIFrameWndEx
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx) // CMDIFrameWnd → CMDIFrameWndEx
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx) // CMDIFrameWnd → CMDIFrameWndEx
ON_WM_CREATE()
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1) // CMDIFrameWnd → CMDIFrameWndEx
return -1;
한번 바꿔 놓으면 추가로 생성되는 Event 들은 자동으로 Ex가 붙어서 생성되지만, 이미 생성된 코드들은 일일이 수정해줘야 한다.
이렇게 수정해서 동작을 시키려면, TOOLBAR, MENUBAR, STATUSBAR 등에서 에러가 발생한다. CFrameWndEx를 사용하려면 기존 CMenuBar, CToolBar, CStatusBar를 모두 MFC class로 바꿔줘야 한다.
CMFCMenuBar m_wndMenuBar;
CMFCToolBar m_wndToolBar;
CMFCStatusBar m_wndStatusBar;
그리고 마지막으로 DockControlBar 함수를 Dockpane 함수로 변경하면 CDockablePane class를 사용할 수 있게 된다.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
//// TODO: Delete these three lines if you don't want the toolbar to be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndStatusBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndToolBar);
return 0;
}
728x90
반응형
'Program Language > API | MFC' 카테고리의 다른 글
[MFC] MDI에서 시작 시 새 창 방지 코드 (0) | 2021.05.20 |
---|---|
[MFC] MDI에서 새창 열기 (0) | 2021.05.20 |
[MFC] 다이얼로그 캡션 변경 (0) | 2021.05.20 |
[MFC] MFC 컨트롤 서브클래싱 하기 (0) | 2021.05.19 |
[MFC] Control 깜빡임 방지 코드 (0) | 2021.04.22 |