Как происходит процесс отрисовки, стирания виндового меню детально?
WM_EXITMENULOOP - ::InvalidateRect(m_hWnd, NULL, FALSE);
Уже пробовал ловить это сообщение окном вьювера и перерисовывать его. Не помогает
Уже пробовал ловить это сообщение окном вьювера и перерисовывать его. Не помогает
Ничего не понял. Тебе надо перерисовать OpenGL сцену. Приведи минимальный код, который не работает.
Ничего не понял. Тебе надо перерисовать OpenGL сцену. Приведи минимальный код, который не работает.
Меню перерисовывается за исключением выбранного пункта.
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 );
}
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 );
}
А перерисовка OpenGL сцены где? В WM_PAINT? По этому коду мало чего понятно. Сообщение WM_EXITMENULOOP приходит?
Сообщение приходит, отрисовка на WM_PAINT
могу уточнить любую часть.
CMyViewer содержить в себе RenderWnd
class CMyView: public CView
{
.
public:
RenderWnd m_renderWnd
}
CMyViewer содержить в себе RenderWnd
class CMyView: public CView
{
.
public:
RenderWnd m_renderWnd
}
винда сама ничего не восстанавливает, она просто вызывает invalidate с последующим wm_paint.
соответственно бага скорее всего у тебя внутри wm_paint-а
соответственно бага скорее всего у тебя внутри wm_paint-а
винда сама ничего не восстанавливает, она просто вызывает invalidate с последующим wm_paint.
соответственно бага скорее всего у тебя внутри wm_paint-а
Выяснилось что при выключение FadeEffect все работает без багов.
P.s. есть уверенность, что WM_PAINT обрабатывается нормально.
соответственно бага скорее всего у тебя внутри wm_paint-а
Выяснилось что при выключение FadeEffect все работает без багов.
P.s. есть уверенность, что WM_PAINT обрабатывается нормально.
Просветите плз. как влияет FadeEffect на прорисовку
Оставить комментарий
tosha01
Столкнулся со следующей проблемой OpenGLное окно обновляется при выборе некоторой команды меню. Затем винда стирает меню и портит обновленную сцену. Если более точно, то портится OpenGLное окно портится только выделенным пунктом меню. В этом месте винда восстанавливает старую картинку. Меню создается, затем запускается функцией TrackPopupMenuСоответсвенно вопрос. Как с этим бороться, на какие сообщения реагировать или как заставить винду отрисовывать меню по-другому.