Как происходит процесс отрисовки, стирания виндового меню детально?

tosha01

Столкнулся со следующей проблемой OpenGLное окно обновляется при выборе некоторой команды меню. Затем винда стирает меню и портит обновленную сцену. Если более точно, то портится OpenGLное окно портится только выделенным пунктом меню. В этом месте винда восстанавливает старую картинку. Меню создается, затем запускается функцией TrackPopupMenu
Соответсвенно вопрос. Как с этим бороться, на какие сообщения реагировать или как заставить винду отрисовывать меню по-другому.

kokoc88

WM_EXITMENULOOP - ::InvalidateRect(m_hWnd, NULL, FALSE);

tosha01

Уже пробовал ловить это сообщение окном вьювера и перерисовывать его. Не помогает

kokoc88

Уже пробовал ловить это сообщение окном вьювера и перерисовывать его. Не помогает

Ничего не понял. Тебе надо перерисовать OpenGL сцену. Приведи минимальный код, который не работает.

tosha01

Меню перерисовывается за исключением выбранного пункта.
void CRenderWnd::OnRButtonUp(UINT nFlags, CPoint point)
{
. посылка сообщения об открытии контекстного меню
SetFocus;
}
bool ContextMenu( Thing3D * node, const CPoint & i_pt, ContextID i_contextID )
{
// сообщение от рендера об открытии меню обрабатывается здесь
CommandHandler* pCmd = NULL;
{
CMenu menu;
. сборка меню
int nItem = (int)menu.TrackPopupMenu( CTX_MENU_FLAGS, i_pt.x, i_pt.y,
getViewerWnd );
.преобразование nItem в pCmd;
} // удаление меню

if( pCmd )
pCmd-invoke(node);
}
class CMyView : public CView
{
.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
}
LRESULT CMyView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if( message == WM_EXITMENULOOP )
Invalidate;
return CView::WindowProc( message, wParam, lParam );
}

kokoc88

А перерисовка OpenGL сцены где? В WM_PAINT? По этому коду мало чего понятно. Сообщение WM_EXITMENULOOP приходит?

tosha01

Сообщение приходит, отрисовка на WM_PAINT

tosha01

могу уточнить любую часть.
CMyViewer содержить в себе RenderWnd
class CMyView: public CView
{
.
public:
RenderWnd m_renderWnd
}

Dasar

винда сама ничего не восстанавливает, она просто вызывает invalidate с последующим wm_paint.
соответственно бага скорее всего у тебя внутри wm_paint-а

tosha01

винда сама ничего не восстанавливает, она просто вызывает invalidate с последующим wm_paint.
соответственно бага скорее всего у тебя внутри wm_paint-а

Выяснилось что при выключение FadeEffect все работает без багов.
P.s. есть уверенность, что WM_PAINT обрабатывается нормально.

tosha01

Просветите плз. как влияет FadeEffect на прорисовку
Оставить комментарий
Имя или ник:
Комментарий: