2010-03-02 2 views
1

Я создал (сгенерировал) проект MDI с вкладками документов с VS2008 Pro. Visual Studio создает приложение с окном File/Class окно, окно свойств, окно вывода и первый документ MDI/ вид.MFC стыковочные окна и где они стыкуются

Я хочу контролировать стороны, на которых установлена ​​док-станция. Я думал, что это было сделано в BOOL CMainFrame :: CreateDockingWindows(), я изменил CBRS_TOP на CBRS_BOTTOM и CBRS_RIGHT на CBRS_LEFT, но окна все еще выглядят одинаково в клиентской области. Не имеет значения , что используется для атрибута стиля окна CBRS_xxxx. Где и как я могу контролировать, где в клиентской области эти окна док? я изменил тогда в:

BOOL CMainFrame::CreateDockingWindows() 
    { 
    BOOL bNameValid; 


    // Create class view 
    CString strClassView; 
    bNameValid = strClassView.LoadString(IDS_CLASS_VIEW); 
    ASSERT(bNameValid); 
    if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE,ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |  
    WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)) 
    { 
      TRACE0("Failed to create Class View window\n"); 
      return FALSE; // failed to create 
    } 


    // Create file view 
    CString strFileView; 
    bNameValid = strFileView.LoadString(IDS_FILE_VIEW); 
    ASSERT(bNameValid); 
     if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200),TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
    WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI)) 
    { 
      TRACE0("Failed to create File View window\n"); 
      return FALSE; // failed to create 
    } 


    // Create output window 
    CString strOutputWnd; 
    bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND); 
    ASSERT(bNameValid); 
    if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), 
     TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | 
     WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)) 
    { 
      TRACE0("Failed to create Output window\n"); 
      return FALSE; // failed to create 
    } 


    // Create properties window 
    CString strPropertiesWnd; 
    bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND); 
    ASSERT(bNameValid); 
    if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE,  ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |CBRS_RIGHT | CBRS_FLOAT_MULTI)) 
    { 
      TRACE0("Failed to create Properties window\n"); 
      return FALSE; // failed to create 
    } 


    SetDockingWindowIcons(theApp.m_bHiColorIcons); 
    return TRUE; 



    } 

Может кто-то пожалуйста, помогите мне объяснить, как управлять стороны, где док эти окна? Спасибо.

ответ

1

IIRC, CBRS_TOP и т.д., для которых они могут док, а не для того, где они находятся стыковка при запуске приложения. Это сохраняется в реестре, в основном он будет отображаться там, где это было, когда приложение было закрыто в последний раз.

В прошлом (это не было с инфраструктурой стыковки Feature Pack), если вы хотите состыковать при запуске с конкретной стороны, вам нужно было установить сторону, где вы хотите, чтобы панель инструментов была состыкована как единственная разрешенная (например, справа), создайте панель инструментов, прикрепите ее (появился SetDocked() или что-то в этом роде), а затем измените разрешенные стороны док-станции на направления, которые вы хотите разрешить. Я не уверен, что это поведение сохраняется в текущей версии, но я думаю, что это так, потому что это было чем-то, что строилось на функциональных возможностях панели инструментов на низком уровне, которые только что основаны на пакете компонентов.

Не настоящий ответ, но, надеюсь, он вас устроит ...

Смежные вопросы