저는 C++/CLI System::Windows::Forms::UserControl
파생 된 컨트롤을 가지고 있습니다.이 컨트롤은 새 데이터가 공급 될 때만 그 자체를 다시 그려야합니다. 어떤 이유로 인해 OnPaint 메커니즘은 앱 외부에 아무 것도없는 경우에도 호출됩니다.System :: Windows :: Forms :: UserControl이 백그라운드를 지우지 않게하려면 어떻게합니까?
여기에 코드 조각입니다 :
void Spectrogram::OnPaint(System::Windows::Forms::PaintEventArgs ^e)
{
// Overidden to stop the background being painted(?)
}
void Spectrogram::AddNewFFTData(float* data, int fataWidth)
{
Graphics^ gfx = CreateGraphics();
//now do some drawing
gfx->Dispose();
}
그래서 내가 (일부 강조를 지 웁니다) 이전 항목을 통해 이론 쓰기에 새 항목을 작성해야 새로운 데이터를 추가하기 위해 추가 데이터 메서드를 호출합니다.
위로 MFC/OpenGL 앱을 개발하는 데 사용했던 날에 처음으로 할 일 중 하나는 OnEraseBackground
메서드를 덮어 쓰는 것입니다. 내가 볼 수있는 한, 지우는 것을 막을 명백한 방법은 없습니다. 나는 무엇을 놓쳤는가? 그래서 당신은 OnPaintBackground
를 오버라이드 (override) 할 필요가 없습니다, 대신 당신은 (배경을 지울 수 있습니다 : 나는 그 OnPaintBackground
전혀 호출되는 것을 방지 생각
//do own background painting
this.SetStyle(ControlStyles.Opaque, true);
:
+1 : 그게 훌륭합니다. 정확히 내가 찾고 있던 것이 었습니다. –
기억할 것은 한 가지 더 있습니다. 이중 버퍼링을 해제했는지 확인하십시오. 그렇지 않으면 버퍼가 가끔 스왑하고 모든 것을 지울 것입니다. –
아, 전체 컨트롤이 무효화되었습니다. –