>지금 2009 버전으로 심각(?)하게 고민하면서
>각종 컴포넌트를 Testing 해보고 있습니다.
>
>전까지 Delphi7를 사용하고 있었는데,
>OpenGL을 사용할 때 같은 소스로 다른 결과가 나는군요.
>
>Delphi 에서 VC++의 dll을 호출하는데
>화면 크기변경 할 때만
>Delphi7에서는 전혀 없던 껌뻑거림이 2009 버전에서만 생깁니다.
>물론 Delphi 소스는 100% 동일합니다.
>컴파일만 2009 버전에서 한 것이죠.
>
>전혀없던 Delphi7에 비하자니 자꾸 눈에 거슬리는 군요.
>실행파일의 증상은 XP, Window7 모두 같습니다.
>
>물론 화면 크기의 변화 없이 화면을 갱신하면 껌뻑거림은 없습니다.
>
>아무래도 2009에서 컴파일된 실행파일에서 Resize 될 때 Form의 자체적인 화면갱신과
>OpenGL의 화면 갱신이 중복되면서 생기는 것 같습니다만,
>Delphi7 처럼 깔끔한 화면 크기 조절 할수 있는 방법은 없는지요.
짐작하신것처럼 WM_ERASEBKGND 때문입니다.
윈도우 영역의 무효화 방법이 차이가 나서 발생하는데 다음과 같이 WM_ERASEBKGND Message를 무시하세요.
제가 C++ Builder로 작업을 한 코드가 있어서 첨부 합니다. 델파이에서 동일하니 적용하시기 어렵지는 않을 겁니다.
헤더쪽
TWndMethod OpenGLWindowProc;
void __fastcall OpenGLWndProc(Messages::TMessage &Message);
소스쪽
//---------------------------------------------------------------------------
void __fastcall TFormMap3D::FormCreate(TObject *Sender)
{
OpenGLWindowProc=OpenGL->WindowProc;
OpenGL->WindowProc=OpenGLWndProc;
//---------------------------------------------------------------------------
void __fastcall TFormMap3D::OpenGLWndProc(Messages::TMessage &Message)
{
if (Message.Msg != WM_ERASEBKGND) OpenGLWindowProc(Message);
}
//---------------------------------------------------------------------------
위에서 OpenGL은 TCustom Panel에서 상속받아 만든 OpenGL용 Component입니다.