TabCtrl на Panecontener
От: fox632 Россия  
Дата: 28.06.09 23:35
Оценка:
я только учусь так что сильно не ругайте

я создаю простое SDI приложение на клиенте создаю два сплиттера на них по пане контейнеру и в верхнем пане контейнере создаю таб контрол
проблемка заключается в том что подложка таб контрола не перерисовывается то место где закладки отрисованы и когда тасткаеш приложение из стороны в сторону или изменяеш размер остаются разводы как это побороть
//Это в OnCreate

    GetClientRect(&rcvSplit);                                        
    // создаю  вертикальный сплиттер
    m_vSplit.Create(m_hWnd,rcvSplit,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,NULL,ID_VSPLIT,NULL);
    // устанавливаю шрифт
    m_vSplit.SetFont((HFONT)GetStockObject(DEFAULT_GUI_FONT),true);         
    // создаю  горизонтальный сплиттер
    m_hSplit.Create(m_vSplit,rchSplit,NULL,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,NULL,ID_HSPLIT,NULL);
    // устанавливаю шрифт
    m_hSplit.SetFont((HFONT)GetStockObject(DEFAULT_GUI_FONT),true);
    // вставляю горизонтальный сплиттер в правую область верт. сплиттера
    m_vSplit.SetSplitterPane(1,m_hSplit);
    // создаю пане контейнер на верт. сплиттере
    mLP.Create(m_vSplit,_T("Left Pane"));
    // вставляю  в левую половину верт. сплиттера
    m_vSplit.SetSplitterPane(0,mLP.m_hWnd);
    // создаю верхний пане контейнер на горизонтальном сплиттере
    mTP.Create(m_hSplit,_T("Top Pane"));
    // вставляю  в Верхнюю половину горизонт. сплиттера
    m_hSplit.SetSplitterPane(0,mTP.m_hWnd);
    // создаю нижний пане контейнер на горизонтальном сплиттере
    mBP.Create(m_hSplit,_T("Bottom Pane"));
    // изменяю стиль планочки на вертикальный
    mBP.SetPaneContainerExtendedStyle(PANECNT_VERTICAL);
    // вставляю  в нижнюю половину горизонт. сплиттера
    m_hSplit.SetSplitterPane(1,mBP.m_hWnd);
    // создаю таб контрол  на верхнем пане контейнере 
    m_hTab.Create(mTP.m_hWnd,rcDefault,NULL,WS_CHILD | WS_VISIBLE | WS_GROUP |WS_DLGFRAME| WS_CLIPSIBLINGS | WS_CLIPCHILDREN
        /*|TCS_OWNERDRAWFIXED*/,WS_EX_STATICEDGE|WS_EX_CLIENTEDGE,ID_TAB,NULL);
    // устанавливаю шрифт таб контролу
    m_hTab.SetFont((HFONT)GetStockObject(DEFAULT_GUI_FONT),true);
    // вставляю таб контрол в верхний пане контейнер
    mTP.SetClient(m_hTab.m_hWnd);
    InsertTabItem();
    m_vSplit.m_bFullDrag = false; 
    m_hSplit.m_bFullDrag = false;

//Это в OnSize

    //устанавливаю размер вертикального сплиттера
    CRect rc(0, 0, dx, dy);
    m_vSplit.MoveWindow(&rc);
    // устанавливаю положение верт. сплиттера
    m_vSplit.SetSplitterPos(85,true);
    // устанавливаю положение горизонтальног сплиттера
    m_hSplit.SetSplitterPos(dy - 45,true);
Re: TabCtrl на Panecontener
От: fox632 Россия  
Дата: 28.06.09 23:40
Оценка:

Вот в принцепе сам косяк который нужно побороть
Re[2]: TabCtrl на Panecontener
От: BuHHunyx Беларусь  
Дата: 29.06.09 06:20
Оценка:
Здравствуйте, fox632, Вы писали:

F>[]

F>Вот в принцепе сам косяк который нужно побороть

Re: CSplitterWindowImpl+CTabCtrl неожиданная проблема
Автор: BuHHunyx
Дата: 07.05.08


Re[18]: Проблемы с перерисовкой, хотя OnPaint() есть
Автор: BuHHunyx
Дата: 06.05.05


идея с OnEraseBkgnd сперта вроде как у Виксоя
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: TabCtrl на Panecontener
От: fox632 Россия  
Дата: 30.06.09 06:48
Оценка:
Спасибо за ответ но не помогло

я вот покопался в atlctrlx.h
и нашел вот такую строчку помоему сейчас WTL затачивают под win32CE
у меня WTL 8.0 прикручена к VS 2008 express Винда XP

// Message map and handlers
    BEGIN_MSG_MAP(CPaneContainerImpl)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        MESSAGE_HANDLER(WM_SIZE, OnSize)
        MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
        MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
        MESSAGE_HANDLER(WM_PAINT, OnPaint)
#ifndef _WIN32_WCE
        // MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint) вот тут я перекрываю это сообщение 
#endif // !_WIN32_WCE
        MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
        MESSAGE_HANDLER(WM_COMMAND, OnCommand)
        FORWARD_NOTIFICATIONS()
    END_MSG_MAP()


таб отрисовывается нормально но вся рабочая обласьт приложения при ресайзе перемаргивает
кто что подскажет
Re: TabCtrl на Panecontener
От: fox632 Россия  
Дата: 03.07.09 15:48
Оценка:
Привет всем
я так и не разобрался почему в PaneConteyner и в Splittere не хочет нормально отображаться таб контрол перепробовал несколько разных примеров всеравно результат один и тотже верх таб конторла не перерисовывается.

я попробовал создать таб контрол на view окне установленном на PaneConteynere таб отрисовывается нормально но при изменении размера таб контрол смаргивает.
как от смаргивания избавится
есле можно то кусок кода для примера напишите

и есть ли книги по WTL чтобы нормально было написано в подробносях или хотябы по ATL
подкинте ссылочку ато у меня почти 30 гигов книг разных а по WTL и ATL нет ни одной
зарание спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.