BOOL ValidateRect(
HWND hWnd, // хэндл окна
CONST RECT *lpRect // lpRect = NULL чтобы всю область окна сделать действительной
);
Прыгающие контрольчики
:) Ну в общем написал свой класс для кнопок, избавился от фликера - все чудненько... Но вот засада при перерисовке я рисую фон диалока (ну тоесть какой нить объект, рисуночек , не просто заливка) и тут то и стало видно, как они сходят с ума ... на рисайз кнопки не четко позиционируются - видно не большое дерганье - я понимаю что задавать данный вопрос может не очень нормально (учитывая что в виндузячих окнах этот же баг), но все же, можно как-то устранить это оооочень не приятное явление ?
Цитата: TITAMIN
:) Ну в общем написал свой класс для кнопок, избавился от фликера - все чудненько... Но вот засада при перерисовке я рисую фон диалока (ну тоесть какой нить объект, рисуночек , не просто заливка) и тут то и стало видно, как они сходят с ума ... на рисайз кнопки не четко позиционируются - видно не большое дерганье - я понимаю что задавать данный вопрос может не очень нормально (учитывая что в виндузячих окнах этот же баг), но все же, можно как-то устранить это оооочень не приятное явление ?
Эх... А после перерисовки случайно не забываете вызвать функцию ValidateRect()?
Контролы же методом SetWindowPos() в OnPaint() перемещаю...
Фон рисую на EraseBkGnd(). все ...
Цитата: TITAMIN
Зачем ? Я так понимаю Validate отменяет область перерисовки - я же делаю на ресайзе Invalidate() - перерисовать все !!!(единственное в свойствах диалога потомков не перерисовывать...). и UpdateWindow()
Контролы же методом SetWindowPos() в OnPaint() перемещаю...
Фон рисую на EraseBkGnd(). все ...
Контролы же методом SetWindowPos() в OnPaint() перемещаю...
Фон рисую на EraseBkGnd(). все ...
ValidateRect делает действительной область рисования, в результате чего будет остановлена бесконечная перерисовка окна, которая возникает по не совсем понятным причинам (отсюда и возникает так называемое «дергание» компонентов). Попробуйте в конец метода OnPaint() прописать ValidateRect(). Должно помочь, особенно если GUI написан на WinAPI, т.к. если забудете в конце OnPaint() вызвать выше упомянутую функцию, то получите массу проблем с прорисовкой контролов дочерних и диалоговых окон.
И вот это действие не совсем понятно:
Цитата:
Контролы же методом SetWindowPos() в OnPaint() перемещаю...
P.S. Иногда бывает полезно выложить проблематичный код.
Дк в том то и дело что не знаю где проблемный код ... или в свойстве диалога (Clip Children)... или при рисовании бэкграунда ... или в последовательности действий ...
Код:
:( Безрезультатно
Так сказать трудно. Выкладывайте код.
CRect r;
this->GetClientRect(&r);
::SetWindowPos(m_objOpen.GetSafeHwnd(),0,30,r.bottom-76,52,52,0);
::SetWindowPos(m_objPrev.GetSafeHwnd(),0, 82,r.bottom-76,52,52,0);
::SetWindowPos(m_objPlay.GetSafeHwnd(),0, 134,r.bottom-76,52,52,0);
::SetWindowPos(m_objPause.GetSafeHwnd(),0,134,r.bottom-76,52,52,0);
::SetWindowPos(m_objSpeed.GetSafeHwnd(),0,186,r.bottom-76,52,52,0);
::SetWindowPos(m_objStop.GetSafeHwnd(),0, 238,r.bottom-76, 52, 52,0);
::SetWindowPos(m_objNext.GetSafeHwnd(),0, 290,r.bottom-76, 52, 52,0);
::ValidateRect(this->GetSafeHwnd(),NULL);
CDialog::OnPaint();
}
BOOL CAVPlayerDlg::OnEraseBkgnd(CDC* pDC) {
GetClientRect(rect);
CRect r;
GetClientRect(&r);
pDC->BitBlt(r.left, r.bottom-bmpInfo.bmHeight, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
pDC->ExcludeClipRect(rect.left, rect.bottom-bmpInfo.bmHeight,rect.left+bmpInfo.bmWidth, rect.bottom);
return CDialog::OnEraseBkgnd(pDC);
}
HBRUSH CAVPlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {
CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return Hbr;
}
void CAVPlayerDlg::OnSize(UINT nType, int cx, int cy) {
Invalidate(1);
this->UpdateWindow();
}
BOOL CAVPlayerDlg::OnInitDialog() {
CDialog::OnInitDialog();
dcMemory.CreateCompatibleDC(this->GetDC());
CBitmap* pOldBitmap = dcMemory.SelectObject(&m_hBitmap);
Hbr = ::CreateSolidBrush(RGB(209, 208, 208));
return TRUE;
}
Зачем в OnPaint перемещать окна? :confused:
Дело не в этом !!! Если вы предполагаете, что прыгание кнопок происходит из-за перемещения контролов в Онпэинте …