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

SendMessage 可以傳訊息給 非視窗的元件嗎??

答題得分者是:jcjroc
moritao
一般會員


發表:8
回覆:5
積分:2
註冊:2007-03-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-07 11:30:10 IP:59.124.xxx.xxx 訂閱
主程式 LRESULT ret; MStk *stk;  . .  ret = SendMessage(stk->handle, WM_STOCK_QUOTE,0, (int)(&Quote));  //stk是我自訂class 收不到message  ret = SendMessage(MsgCenter->Handle, WM_STOCK_QUOTE,0, (int)(&Quote));   //MsgCenter是一個TForm 收得到message 沒問題    被叫程式  class MStk: public MBase {  private:        void __fastcall WMP_STOCK_QUOTE(TMessage &Message);        BEGIN_MESSAGE_MAP              MESSAGE_HANDLER(WM_STOCK_QUOTE, TMessage, WMP_STOCK_QUOTE);        END_MESSAGE_MAP(MStk);  public:        HWND handle;         __fastcall MStk(AnsiString strID);        __fastcall ~MStk(void);  };


 

 是有那裡有錯嗎 ? 
   
編輯記錄
moritao 重新編輯於 2011-10-06 21:44:21, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-07 16:56:47 IP:210.66.xxx.xxx 訂閱
有一點不了解的地方,你的class非 視窗類,如何會有一個HWND handle 這個值呢?

且,一般來說非視官類的是沒有message queue的分配,所以無法收message。   
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
moritao
一般會員


發表:8
回覆:5
積分:2
註冊:2007-03-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-07 17:43:51 IP:111.235.xxx.xxx 訂閱
 不能在 class 中的property加入 HWND handle;的變數嗎?
讓這個class 變數也能收訊息
像這樣
class MStk: public MBase {
private:
void __fastcall WMP_STOCK_QUOTE(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_STOCK_QUOTE, TMessage, WMP_STOCK_QUOTE);
END_MESSAGE_MAP(MStk);
public:
HWND handle;
__fastcall MStk(AnsiString strID);
__fastcall ~MStk(void);
};

還是一定要視窗元件 才可以?

aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-10-08 01:37:19 IP:122.126.xxx.xxx 訂閱
CLASS中當然可以加任何型別的property,只是以你這個class來說,加入這樣的property為的是什麼?   該如何把值設定進去?  我猜測的是你想讓使用者把它的form的handle設定進去嗎?
就算是,那也沒有幫助。比如說你把form1的handle代入你這個class,然後另一個form2去sendmessage給這個handle,那收message的人還是form1本身,不是你的class。

如果說你的property的值是自己定的,那就更有問題了。windows 的handle要由os來發配才有用。

我只能說,如果你把MBase 換成 TForm 那就ok。

===================引 用 moritao 文 章===================
不能在 class 中的property加入 HWND handle;的變數嗎?
讓這個class 變數也能收訊息
像這樣
class MStk: public MBase {
private:
void __fastcall WMP_STOCK_QUOTE(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_STOCK_QUOTE, TMessage, WMP_STOCK_QUOTE);
END_MESSAGE_MAP(MStk);
public:
HWND handle;
__fastcall MStk(AnsiString strID);
__fastcall ~MStk(void);
};

還是一定要視窗元件 才可以?

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jcjroc
高階會員


發表:21
回覆:276
積分:114
註冊:2002-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-10-08 02:59:16 IP:60.248.xxx.xxx 訂閱
當然可以
但有限制
1.必須繼承自TControl
2.不是所有訊息(經由SendMeessage傳送)都能會拿到(你的訊息WM_STOCK_QUOTE就不可能)
3.此元件最終的Parent必須是TWinControl
4.這些程式碼只能架構在VCL之上

最後欲知詳情.........請參照TImage或TLabel等等



編輯記錄
jcjroc 重新編輯於 2011-10-07 13:01:41, 註解 無‧
moritao
一般會員


發表:8
回覆:5
積分:2
註冊:2007-03-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-10-11 15:23:50 IP:59.124.xxx.xxx 訂閱
我原本的想法是想在收到資料時
能用SendMessage的方式,把我的資料傳給我自訂的class去處理
才想到用成像是event driven的方法

如果自訂的非視窗class 不能加入handle
有其它的方法 可以產生event 來通知 自訂的class 做處理嗎?
謝謝

===================引 用 aftcast 文 章===================
CLASS中當然可以加任何型別的property,只是以你這個class來說,加入這樣的property為的是什麼? 該如何把值設定進去? 我猜測的是你想讓使用者把它的form的handle設定進去嗎?
就算是,那也沒有幫助。比如說你把form1的handle代入你這個class,然後另一個form2去sendmessage給這個handle,那收message的人還是form1本身,不是你的class。

如果說你的property的值是自己定的,那就更有問題了。windows 的handle要由os來發配才有用。

我只能說,如果你把MBase換成TForm 那就ok。

===================引 用 moritao 文 章===================
不能在 class 中的property加入 HWND handle;的變數嗎?
讓這個class 變數也能收訊息
像這樣
class MStk: public MBase {
private:
void __fastcall WMP_STOCK_QUOTE(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_STOCK_QUOTE, TMessage, WMP_STOCK_QUOTE);
END_MESSAGE_MAP(MStk);
public:
HWND handle;
__fastcall MStk(AnsiString strID);
__fastcall ~MStk(void);
};

還是一定要視窗元件 才可以?

jcjroc
高階會員


發表:21
回覆:276
積分:114
註冊:2002-09-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-10-11 23:22:27 IP:60.248.xxx.xxx 訂閱
繼承自TControl 然後呼叫Perform
===================引 用 moritao 文 章===================
我原本的想法是想在收到資料時
能用SendMessage的方式,把我的資料傳給我自訂的class去處理
才想到用成像是event driven的方法

如果自訂的非視窗class 不能加入handle
有其它的方法 可以產生event 來通知 自訂的class 做處理嗎?
謝謝


moritao
一般會員


發表:8
回覆:5
積分:2
註冊:2007-03-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-10-12 16:19:29 IP:59.124.xxx.xxx 訂閱
如果我的MBase 物件 都去繼承 TWinControl
這樣會造成很大的額外系統負荷嗎?
因為我有蠻多物件都是 以MBase 為基礎的
怕這樣做效能會降低很多

還是有其它解決方法

謝謝

===================引 用 jcjroc 文 章===================
繼承自TControl 然後呼叫Perform
===================引 用 moritao 文 章===================
我原本的想法是想在收到資料時
能用SendMessage的方式,把我的資料傳給我自訂的class去處理
才想到用成像是event driven的方法

如果自訂的非視窗class 不能加入handle
有其它的方法 可以產生event 來通知 自訂的class 做處理嗎?
謝謝


jcjroc
高階會員


發表:21
回覆:276
積分:114
註冊:2002-09-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-10-12 17:40:13 IP:211.23.xxx.xxx 訂閱
1.是TControl 不是TWinControl
2.依你的需求............你要的是一個可以因不同Command來解譯資料或執行動作的Decoder function,為何跟Windows的訊息機制搞在一起???會不會想得太複雜些????


===================引 用 moritao 文 章===================
如果我的MBase 物件 都去繼承 TWinControl
這樣會造成很大的額外系統負荷嗎?
因為我有蠻多物件都是 以MBase 為基礎的
怕這樣做效能會降低很多

還是有其它解決方法

謝謝

===================引 用 jcjroc 文 章===================
繼承自TControl 然後呼叫Perform
===================引 用 moritao 文 章===================
我原本的想法是想在收到資料時
能用SendMessage的方式,把我的資料傳給我自訂的class去處理
才想到用成像是event driven的方法

如果自訂的非視窗class 不能加入handle
有其它的方法 可以產生event 來通知 自訂的class 做處理嗎?
謝謝


系統時間:2017-12-16 13:22:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!