|
TPanel과 같은 컴포넌트를 만들어서 OnPaint이벤트를 추가하려고 합니다.
우선 제 소스를 잠깐 봐주세요
//소스시작=======================
class TCustomHPanel : public TCustomPanel
{
private:
protected:
public:
__fastcall TCustomHPanel(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
class PACKAGE THPanel : public TCustomHPanel
{
private:
protected:
void __fastcall fncOnPaint(TWMPaint &WMPaint);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_PAINT,TWMPaint,fncOnPaint)
VCL_MESSAGE_HANDLER(WM_ERASEBKGND,TWMPaint,fncOnPaint)
END_MESSAGE_MAP(TCustomHPanel)
public:
__fastcall THPanel(TComponent* Owner);
__published:
};
//소스끝=======================
이 상태에서 하나의 폼위에 Panel과 HPanel을 동시에 올려놓고
Spy++로 메세지를 보고 있으면
Panel에는 아무런 메세지가 발생하지 않는 반면
HPanel에는 계속에서 WM_PAINT메세지가 발생합니다.(실행하지 않고 폼디자인때에도 마찬가지입니다.)
저는 Panel처럼 숨겨졌다가 나타날때만(WM_PAINT가 발생할 때만) fncOnPaint를 실행하고 싶은데
메세지가 계속해서 발생하니 프로그램에 부하가 너무 크네요(가끔은 시스템전체가 다운됩니다.)
그래서 WM_NCPAINT이벤트로 처리해보려고 하니까 폼이 숨겨졌다 빠른속도로 나타날때는
HPanel위의 그림이 미쳐 다 그려지지 못하는 현상이 발생합니다.
도와주세요.
|