CSplitter в контроле
От: fregate Россия  
Дата: 13.08.09 12:39
Оценка:
Есть MainFrm в нем сплиттер, и я хочу в леовой части, например, прикрутить контрол, который содержит в себе сплиттер (просто запихать второй детенышем — не правильно)
Итак, MainFrm.h

class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
        public CMessageFilter, public CIdleHandler
{
public:
    DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)

    CSplitterWindow m_splitter;
    CSplitContainer m_panels;

    BEGIN_MSG_MAP(CMainFrame)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        // ...
        CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
    END_MSG_MAP()

    LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    { // ...
        m_hWndClient = m_splitter.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);

        m_panels.Create(m_splitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);

        m_view.Create(m_splitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE); // some view

        m_splitter.SetSplitterPanes(m_pane, m_view);
        UpdateLayout();
        m_splitter.SetSplitterPosPct(25);
// ...
}


CSplitContainer


class CSplitContainer : public CWindowImpl<CSplitContainer>
{
protected:
    CHorSplitterWindow m_Splitter;
    CSSSView m_View1, m_View2; // some views

public:
    BEGIN_MSG_MAP_EX(CSplitContainer)
        MSG_WM_CREATE(OnCreate)
    END_MSG_MAP()

    int OnCreate(LPCREATESTRUCT)
    {
        m_Splitter.Create(*this, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
        m_View1.Create(m_Splitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
        m_View2.Create(m_Splitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);

        m_Splitter.SetSplitterPane(SPLIT_PANE_TOP, m_View1);
        m_Splitter.SetSplitterPane(SPLIT_PANE_BOTTOM, m_View2);

        m_Splitter.SetSplitterPos(200);

        return 0;
    }
};


Во все OnCreate заходим, все m_hWnd получаем, а вот слева в основном сплиттере — пусто (темно серый такый фон... нулевое окно, вобщем). Сплиттера нет.
Что надо сделать, что бы получилось нормально?
Re: CSplitter в контроле
От: BuHHunyx Беларусь  
Дата: 17.08.09 06:16
Оценка:
Здравствуйте, fregate, Вы писали:
[]
Можно попробовать вот так:
m_splitter.m_cxyMin = 100;
F>        m_splitter.SetSplitterPanes(m_pane, m_view);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: CSplitter в контроле
От: Аноним  
Дата: 17.08.09 08:03
Оценка:
Здравствуйте, fregate, Вы писали:

F> Что надо сделать, что бы получилось нормально?

может в CSplitContainer надо обрабатывать WM_SIZE?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.