я только учусь так что сильно не ругайте
я создаю простое 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);
Вот в принцепе сам косяк который нужно побороть
Здравствуйте, 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>>
Спасибо за ответ но не помогло
я вот покопался в 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()
таб отрисовывается нормально но вся рабочая обласьт приложения при ресайзе перемаргивает
кто что подскажет