Programming - cpueblo.com

마우스 위로 옮겼을때 이미지가 변하는 코드 - CM_MOUSEENTER


글쓴이 : 유광희 날짜 : 2002-08-28 (수) 13:06 조회 : 14397

__fastcall TfrmADM::TfrmADM(TComponent* Owner)
	: TForm(Owner)
{
	// Panel 위에 이미지가 위치해 있을 경우 Panel 의 WindowProc 를 제어한다
	// 그 전에 Panel 의 WindowProc 를 저장해서 WndSubProc 호출시 같이 호출한다.
	// 그렇지 않으면 무한 루프~

	OriginalProc = PanelTool->WindowProc;
	PanelTool->WindowProc = WndSubProc;

	// Panel 위에 있지 않고 Form 위에 있을 경우에는 frmXXX->WindowProc = WndSubProc;
	// 등으로 처리한다.
}


void __fastcall TfrmADM::WndSubProc(Messages::TMessage &Message)
{
	// 기존 Panel 의 Proc 를 호출한다.
	OriginalProc(Message);

	// ImagePH2PC 는 TImage 임당~
	if(Message.LParam == (long)ImagePH2PC     	&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImagePH2PC,     0);
	if(Message.LParam == (long)ImagePC2PH     	&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImagePC2PH,     1);
	if(Message.LParam == (long)ImageUpgrade		&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImageUpgrade,     2);
	if(Message.LParam == (long)ImageSetup     	&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImageSetup,     3);
	if(Message.LParam == (long)ImageHelp     	&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImageHelp,     4);
	if(Message.LParam == (long)ImageAnycall		&& Message.Msg == CM_MOUSEENTER)		OnOverImg(ImageAnycall,     5);

	if(Message.LParam == (long)ImagePH2PC     	&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImagePH2PC,     0);
	if(Message.LParam == (long)ImagePC2PH     	&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImagePC2PH,     1);
	if(Message.LParam == (long)ImageUpgrade		&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImageUpgrade,     2);
	if(Message.LParam == (long)ImageSetup     	&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImageSetup,     3);
	if(Message.LParam == (long)ImageHelp     	&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImageHelp,     4);
	if(Message.LParam == (long)ImageAnycall    	&& Message.Msg == CM_MOUSELEAVE)		OnNormalImg(ImageAnycall,     5);
}


//---------------------------------------------------------------------------
// 마우스 On & Over 함수 처리
void TfrmADM::OnOverImg(TImage* img, int spec)
{
	// TImageList 에 있는 녀석의 이미지를 할당한다
	Graphics::TBitmap *image = new Graphics::TBitmap();
	ImageListToolDown->GetBitmap(spec, image);
	img->Picture->Assign(image);
}


// Over 가 되지 않았을 경우를 처리
void TfrmADM::OnNormalImg(TImage* img, int spec)
{
	Graphics::TBitmap *image = new Graphics::TBitmap();
	ImageListToolNormal->GetBitmap(spec, image);
	img->Picture->Assign(image);
}


void __fastcall TfrmADM::FormDestroy(TObject *Sender)
{
	// 폼 해제시 Panel 의 WindowProc 를 해준다.
	// 뭐 특별히 꼭 해줘야 할 이유는 없음. 적절히 복구해 주시길..
	PanelTool->WindowProc = OriginalProc;
}