如何攔截繼承來的元件之message? |
尚未結案
|
cc12345
一般會員 發表:32 回覆:35 積分:13 註冊:2005-01-24 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
您好:
在.h中加入 private: // User declarations TWndMethod OldPanelWndProc; void __fastcall MyPanelWndProc(TMessage& Message); 在.cpp中加入 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { m_pMyPanel = new TMyPanel(this); m_pMyPanel->Parent=Form1; m_pMyPanel->Top=10; m_pMyPanel->Left=10; OldPanelWndProc = m_pMyPanel->WindowProc; m_pMyPanel->WindowProc = MyPanelWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::MyPanelWndProc(TMessage& Message) { if (Message.Msg == WM_LBUTTONDOWN) ShowMessage("Mouse Down!"); else OldPanelWndProc(Message); } //---------------------------------------------------------------------------順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> |
cc12345
一般會員 發表:32 回覆:35 積分:13 註冊:2005-01-24 發送簡訊給我 |
謝謝版主,
這樣可以動,
不過我原先的想法是以為, 可否在TMyPanel裡頭自己加入攔截Message的能力, 然後寫自己的event handler來處理, 而不是靠parent來的訊息加以判斷?!
另外, 我嘗試加入WM_PAINT, if( Message.Msg == WM_LBUTTONDOWN )
ShowMessage("Mouse Down!");
else if( Message.Msg == WM_PAINT )
// ask panel to draw some text
else
OldPanelWndProc(Message); 結果似乎是一直不斷收到WM_PAINT, 造成draw 出來的text不斷的閃動...
還是一樣的問題,
是否可在元件自己內部攔截並處理WM_PAINT( any message )? 謝謝 !!
引言: 您好:在.h中加入 private: // User declarations TWndMethod OldPanelWndProc; void __fastcall MyPanelWndProc(TMessage& Message); 在.cpp中加入 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { m_pMyPanel = new TMyPanel(this); m_pMyPanel->Parent=Form1; m_pMyPanel->Top=10; m_pMyPanel->Left=10; OldPanelWndProc = m_pMyPanel->WindowProc; m_pMyPanel->WindowProc = MyPanelWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::MyPanelWndProc(TMessage& Message) { if (Message.Msg == WM_LBUTTONDOWN) ShowMessage("Mouse Down!"); else OldPanelWndProc(Message); } //---------------------------------------------------------------------------順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> >>< face="Verdana, Arial, Helvetica"> |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
您好:
我照您所說的方式 ask panel to draw some text,但是沒有閃動的現象耶
BCB6.0, Win2000
if (Message.Msg == WM_LBUTTONDOWN) { ShowMessage("Mouse Down!"); } else if( Message.Msg == WM_PAINT ) { test->Canvas->TextOutA(10, 10, "123"); } else OldPanelWndProc(Message);順心 |
cc12345
一般會員 發表:32 回覆:35 積分:13 註冊:2005-01-24 發送簡訊給我 |
您好,
可是我有許多個Panel都內含一些資料,並且提供一個ReDraw()的function來做重畫的動作,如果寫成
if( Message.Msg == WM_PAINT )
{
m_Panel1->ReDraw();
m_Panel2->ReDraw();
m_Panel3->ReDraw();
m_Panel4->ReDraw();
.
.
.
}
會不會很奇怪?
所以我才想讓那些Panel自已來處理OnPaint()...
VC好像都是這樣做的?!
引言: 您好: 我照您所說的方式 ask panel to draw some text,但是沒有閃動的現象耶 BCB6.0, Win2000if (Message.Msg == WM_LBUTTONDOWN) { ShowMessage("Mouse Down!"); } else if( Message.Msg == WM_PAINT ) { test->Canvas->TextOutA(10, 10, "123"); } else OldPanelWndProc(Message);順心 >>< face="Verdana, Arial, Helvetica"> |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |