線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2576
推到 Plurk!
推到 Facebook!

WndProc Overloading的問題

答題得分者是:dllee
falldog7
一般會員


發表:12
回覆:16
積分:5
註冊:2007-08-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-30 18:24:39 IP:140.113.xxx.xxx 訂閱
我想重載WndProc來處理一些訊息Message
以下是我的code
<textarea class="cpp" rows="10" cols="60" name="code">class TForm1 : public TForm { .... protected: virtual LRESULT __fastcall WndProc(TMessage&); } </textarea>


結果卻出現這樣子的compile Error....
E2113 Virtual function '_fastcall TForm1::WndProc(TMessage &)' conflicts with base class 'TCustomForm'
為什麼會這樣咧@@"

還是一定要宣告成virtual void__fastcall WndProc(TMessage&);才行???
因為我原本寫在
static LRESULT APIENTRY SkypeAPITest_Windows_WindowProc(
HWND hWindow, UINT uiMessage, WPARAM uiParam, LPARAM ulParam)
{
...
}
有些地方一定要return 才能正常work.

請問有什麼方法可解嗎?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-30 21:23:14 IP:59.105.xxx.xxx 訂閱
正確的作法應該是寫一個函式用 WindowProc 去指定,請參考 TControl 之 WindowProc 屬性線上說明。
另外,不知道您指的要 Return 是什麼意思?是要給回傳值嗎?TMessage 內有 Result 可以設定 Message return value,請參考。

以下範例取自BCB5線上說明
This example shows how to use the WndProc method and the WindowProc property to subclass a custom control旧 window procedure. This example subclasses the window procedure of a TListBox descendant to respond to a user-defined message called WM_STYLEMESSAGE. The subclassed window procedure can be turned on or off by pressing a radio button.

Style = (TListBoxStyle)Message.WParam;
else
WndProc(Message);
}

void __fastcall TMyListBoxDescendant::ToggleSubClass(bool On)
{
if (On)
WindowProc = SubClassWndProc;
else
WindowProc = WndProc;
}

void __fastcall TForm1::SubClassRadioGroup1Click(TObject *Sender)
{
MyListBoxDescendant1->ToggleSubClass(SubClassRadioGroup1->ItemIndex == 0);
}
------
http://www.ViewMove.com
falldog7
一般會員


發表:12
回覆:16
積分:5
註冊:2007-08-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-30 23:43:22 IP:124.10.xxx.xxx 訂閱
謝啦~dllee大大~ 感謝您~~~~
原來TMessage可以夾藏著該被return的Result~~~
謝啦~ 都不知道有這個點在~

不過我還是不太懂用TControl來寫WndProc @_@

我這邊用
virtual void__fastcall WndProc(TMessage&);
可以先處理想處理的Message完後 再交給原本內建的WndProc來處理其餘的Message即可
還是這個方法不好@@""""
願聞其詳~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-31 08:23:40 IP:220.134.xxx.xxx 訂閱
作得出來就好,只是 WindowProc 本來就是 VCL 視窗元件用來客製處理訊息的函式。
如線上說明,它也是要處理的自行處理, 不處理的交給原處理函式處理。

本來作法就有很多種,完全看個人的喜好,只要作得出來,沒有太多人會管你如何作。
老闆或客戶看的也是最後到底可不可以用,如果不能用,架構再好、程式再好看,也
是沒用的。作得出來,日後要改還可以慢慢改。
------
http://www.ViewMove.com
系統時間:2024-04-20 15:32:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!