Mein Programm funktioniert bis auf ein sehr Interessantes Detail.
Viele haben sich sicher schon in manchen WIN32 gefragt:
Kann man das häßliche mitverschieben des Fensterinhaltes beim Fensterziehen verhindern ?
JA, ich verwende ein SetBackgroundBlack mit
FLAG_avoidflicker.
Doch damit funktioniert das Present() in OnRender manchmal nicht mehr.
Es liegt garantiert an den Kontrollanweisungen Validate() und Invalidate().
Aber wie funktionieren diese,
wo sollten sie stehen, oder besser wie Löse ich das Problem ?
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
// ONTIMER
void CoreApp::OnTimer()
{
// Was genau fehlt ?
}
// ONRESIZE
void CoreApp::OnResize()
{
window_IsResized= TRUE;
if ( FLAG_avoidflicker )
{
Rendertarget[0]->BeginDraw();
Rendertarget[0]->Clear(D2D1::ColorF(D2D1::ColorF::Black));
Rendertarget[0]->EndDraw();
SwapChain->Present(1, 0 );
}
DiscardDeviceResources();
}
// MESSAGE THREAD
switch(message)
{
case WM_SIZE:
{
pCoreApp->OnResize();
// Was genau fehlt ?
}
case WM_PAINT:
{
pCoreApp->OnRender();
// Was genau fehlt ?
}
case WM_TIMER:
{
pCoreApp->OnTimer( pCoreApp );
}
}
|
( P.S.: Da die msdn-Doku in engl. ist und ich selbst Parameter für Parameter schon ausgewechselt habe. )