Форум — Ответы ( К темам )
? | Dr.Phoenix: Как отключить / включить перерисовку формы? (26-12-2002 17:37:40) |
Моя форма слишком долго перерисовывается. Как выключить перерисовку фомы при FormResize, а потом включить обратно, когда изменение размеров закончится? | |
Devnvd (26-12-2002 20:22:00) | |
Если у вас в системе в настройках рабочего стола помечено "Отображать содержимое окна при перетаскивании", то при этом и происходит полная перерисовка при изменении размеров и перемещении окна. Чтобы на время отключить это, необходимо воспользоваться функцией SystemParametersInfo и программно отключить это свойство. по событию WM_LBUTTONUP мы узнаём, что процесс перетаскивания или изменения размеров закончился. BOOL bFullDragWindows; bool bProcessResize=false; //----------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->OnMessage = AppMessage; } //------------------------------------------------------------------- void __fastcall TForm1::FormResize(TObject *Sender) { if(!bProcessResize) { SystemParametersInfo(SPI_GETDRAGFULLWINDOWS,0,&bFullDragWindows,0); if(bFullDragWindows)//Если есть в этом необходимость { SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,FALSE,NULL,0); bProcessResize=true; //Процесс пошёл } } } //--------------------------------------------------------------------- void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled) { if(bProcessResize && WM_LBUTTONUP)//Процесс завершился { SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,bFullDragWindows,NULL,0); bProcessResize=false; //Перерисуем окно, чтобы убрать возможные артефакты RedrawWindow(Form1->Handle, NULL, NULL, RDW_FRAME| RDW_UPDATENOW| RDW_INVALIDATE | RDW_ALLCHILDREN); } } | |
Devnvd (26-12-2002 20:28:04) | |
Поправлюсь: void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled) { if(bProcessResize && Msg.message ==WM_LBUTTONUP) { SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,bFullDragWindows,NULL,0); bProcessResize=false; RedrawWindow(Form1->Handle, NULL, NULL, RDW_FRAME| RDW_UPDATENOW| RDW_INVALIDATE | RDW_ALLCHILDREN); } } |