CFrameWnd и его фон.
От: DrMom  
Дата: 21.04.03 09:19
Оценка:
У меня не получается самостоятельно ресайзить окно и заставить его востонавливать свой фон. Получается только либо окно ресайзится и само полностью перерисовывается, либо ресайзится мной, но перерисовывается хреново, оставляя не востановленным фон. Может кто подскажет, что надо изменить, мож стиль какой в классе окна или еще чего?
Re: CFrameWnd и его фон.
От: Serguei666 Беларусь  
Дата: 21.04.03 12:12
Оценка:
Здравствуйте, DrMom, Вы писали:

DM>У меня не получается самостоятельно ресайзить окно и заставить его востонавливать свой фон. Получается только либо окно ресайзится и само полностью перерисовывается, либо ресайзится мной, но перерисовывается хреново, оставляя не востановленным фон. Может кто подскажет, что надо изменить, мож стиль какой в классе окна или еще чего?


Invalidate() вы вызываете?
А вообще желательно бы на код глянуть
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: CFrameWnd и его фон.
От: DrMom  
Дата: 21.04.03 14:46
Оценка:
Здравствуйте, Serguei666, Вы писали:

S>Здравствуйте, DrMom, Вы писали:


DM>У меня не получается самостоятельно ресайзить окно и заставить его востонавливать свой фон. Получается только либо окно ресайзится и само полностью перерисовывается, либо ресайзится мной, но перерисовывается хреново, оставляя не востановленным фон. Может кто подскажет, что надо изменить, мож стиль какой в классе окна или еще чего?


S>Invalidate() вы вызываете?

S>А вообще желательно бы на код глянуть

void CMainFrame::OnSizing(UINT nSide, LPRECT lpRect)
{
    SECFrameWnd::OnSizing(nSide, lpRect);

    CRect curRect;
    MoveWindow(lpRect,false);
    Invalidate();
    ::SendMessage(m_hWnd,WM_NCPAINT,1,0);
//    ::SendMessage(m_hWnd,WM_ERASEBKGND,(UINT)GetDC(),0);

    POSITION pos = m_listControlBars.GetHeadPosition();
    while(pos != NULL)
    {
        SECCustomToolBar* pBar = (SECCustomToolBar*)m_listControlBars.GetNext(pos);
        if(ISA(pBar,SECCustomToolBar))
        {
            pBar->GetWindowRect(&curRect);
            ScreenToClient(&curRect);
            ValidateRect(&curRect);
        }
    }
}


Окошки за главным окном портятся и не восстанавливаются. Хотя своей цели я добиваюсь. Т.е. тулбары не мерцают при ресайзинге.
Re[3]: CFrameWnd и его фон.
От: Аноним  
Дата: 21.04.03 20:15
Оценка:
Здравствуйте, DrMom, Вы писали:


DM>Окошки за главным окном портятся и не восстанавливаются. Хотя своей цели я добиваюсь. Т.е. тулбары не мерцают при ресайзинге.


А-а-а. Так вы Stingray используете... Тогда я пас. Stingray — библиотека крутая и навороченная, и не без ошибок. Так что сдаюсь.
Re[4]: CFrameWnd и его фон.
От: SSf Россия  
Дата: 22.04.03 02:50
Оценка:
Это точно. Как я поню глюков там много, но исходники интересные. Если есть свежая Stigray то поделись (если не жалко).
Re[5]: CFrameWnd и его фон.
От: DrMom  
Дата: 22.04.03 07:25
Оценка:
Здравствуйте, SSf, Вы писали:

SSf>Это точно. Как я поню глюков там много, но исходники интересные. Если есть свежая Stigray то поделись (если не жалко).


Это не мое. Был бы халявный и мой, то ради бога.
Re[4]: CFrameWnd и его фон.
От: DrMom  
Дата: 22.04.03 08:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, DrMom, Вы писали:


А>А-а-а. Так вы Stingray используете... Тогда я пас. Stingray — библиотека крутая и навороченная, и не без ошибок. Так что сдаюсь.


Ну почему сразу пас??? Ну ведь дело не в стингрэе. Вот пример на MFC.


void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) 
{
    CFrameWnd::OnSizing(fwSide, pRect);

    CRect curRect;
    MoveWindow(pRect,false);
    Invalidate();
    ::SendMessage(m_hWnd,WM_NCPAINT,1,0);
//    ::SendMessage(m_hWnd,WM_PAINT,0,0);
//    ::SendMessage(m_hWnd,WM_ERASEBKGND,(UINT)GetDC(),0);

    m_wndToolBar.GetWindowRect(&curRect);
    ScreenToClient(&curRect);
    ValidateRect(&curRect);
}


Результат можно посмотреть простым созданием MFC проекта и заданием обработчика OnSizing. Все вроде получается нормально, но как восстанавливать окна которые перекрывает мое окно?
Re[5]: CFrameWnd и его фон.
От: Serguei666 Беларусь  
Дата: 22.04.03 11:36
Оценка:
Здравствуйте, DrMom, Вы писали:

DM>Здравствуйте, Аноним, Вы писали:


А>Здравствуйте, DrMom, Вы писали:


А>А-а-а. Так вы Stingray используете... Тогда я пас. Stingray — библиотека крутая и навороченная, и не без ошибок. Так что сдаюсь.


DM>Ну почему сразу пас??? Ну ведь дело не в стингрэе. Вот пример на MFC.

Ну так бы и сразу.

DM>
DM>void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) 
DM>{
DM>    CFrameWnd::OnSizing(fwSide, pRect);

DM>    CRect curRect;
DM>    MoveWindow(pRect,false);
DM>    Invalidate();
DM>    ::SendMessage(m_hWnd,WM_NCPAINT,1,0);
DM>//    ::SendMessage(m_hWnd,WM_PAINT,0,0);
DM>//    ::SendMessage(m_hWnd,WM_ERASEBKGND,(UINT)GetDC(),0);

DM>    m_wndToolBar.GetWindowRect(&curRect);
DM>    ScreenToClient(&curRect);
DM>    ValidateRect(&curRect);
DM>}
DM>


DM>Результат можно посмотреть простым созданием MFC проекта и заданием обработчика OnSizing. Все вроде получается нормально, но как восстанавливать окна которые перекрывает мое окно?


Я закомментировал "MoveWindow(pRect,false);" — все стало работать.
А что вы, собственно, делаете? В чем смысл сих манупуляций? Может, стОит их просто убрать?
Ну или, по крайней мере, убрать "MoveWindow" вызов?
Хотите сказать 'спасибо'? Тогда поставьте оценку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.