none
關於protected override void WndProc(ref Message msg) RRS feed

  • 問題

  • VS2008 C#

    想請問一下 各位高手 
     protected override void WndProc(ref Message msg)
            {
                MessageBox.Show(msg.Msg.ToString());
            }

    我想收 下 WM 訊息 可是 在做編譯的過程中 卻發生 沒有適當的 方法覆寫的錯誤 不知有何方法可以解決
    因為想在 wince 上開發
    2009年10月31日 下午 03:18

所有回覆

  • 你是在哪個Class內覆寫的 ?
    一般是要在該類別 (你的例子是MessageWindow 類別)的衍生類別中才能覆寫Protected.
    意即你不能在非繼承該類別的類別中覆寫.
    也就是說你要先建立一個新的類別是繼承MessageWindow 類別的才能在該自訂類別中覆寫這個方法.
    關於覆寫請參閱MSDN文件庫
    [protected (C# 參考) ]
    [存取範圍層級 (C# 參考) ]
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年10月31日 下午 04:30
    版主
  • 因為我是想偵測 硬體按鈕回傳的 WM_USER +200的 自訂訊息  目前是在主要的 mainfoun 的class 裡

    2009年10月31日 下午 04:47
  • 所以那樣不能覆寫啊.
    你一定要先自訂一個類別是繼承MessageWindow 類別才能在該類別覆寫protected方法
    以下程式碼引述自  MSDN 文件庫 [HOW TO:使用 MessageWindow 類別 ]
    粗體字部份代表建立一個新的類別叫MsgWindows , 繼承自 MessageWindow類別
    另一段粗體字則是覆寫 WndProc方法.
    這樣有瞭解嗎 ?

    public class MsgWindow : MessageWindow
     {
      // Assign integers to messages.
      // Note that custom Window messages start at WM_USER = 0x400.
      public const int WM_CUSTOMMSG = 0x0400;


      // Create an instance of the form.
      private MessageWindowForm msgform;

      // Save a reference to the form so it can
      // be notified when messages are received.
      public MsgWindow(MessageWindowForm msgform)
      {
       this.msgform = msgform;
      }

      // Override the default WndProc behavior to examine messages.
      protected override void WndProc(ref Message msg)
      {
       switch(msg.Msg)
       {
        // If message is of interest, invoke the method on the form that
        // functions as a callback to perform actions in response to the message.
        case WM_CUSTOMMSG:
         this.msgform.RespondToMessage((int)msg.WParam, (int)msg.LParam);
         break;
       }
       // Call the base WndProc method
       // to process any messages not handled.
       base.WndProc(ref msg);
      }
     }

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已提議為解答 nimo1993 2009年11月1日 下午 12:31
    2009年10月31日 下午 04:55
    版主
  • HI,


    您可以在Form類別中做上述的覆寫, 但是不要用MessageBox來顯示, 否則程式會一直顯示訊息畫面, 讓您關到手軟.
    • 已提議為解答 nimo1993 2009年11月1日 下午 12:31
    2009年11月1日 上午 08:25
  • this大講的應該是 System.Windows.Forms.Control.WndProc方法
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.control.wndproc.aspx

    我講的則是 Microsoft.WindowsCE.Forms.MessageWindow.WndProc 方法
    http://msdn.microsoft.com/zh-tw/library/microsoft.windowsce.forms.messagewindow.wndproc.aspx

    不過原發問者有說要在WinCE開發,應該是指Microsoft.WindowsCE.Forms.MessageWindow.WndProc 方法.
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月1日 上午 08:48
    版主
  • 因為我是想偵測 硬體按鈕回傳的 WM_USER +200的 自訂訊息 主程式 則是有 另外的功能  想問一下 還有其他可行的方法 可以 去 listen WM_USER+200  這個 winedows message 的ㄇ
    2009年11月1日 下午 03:05
  • 你有先看過了我們提供的網址與試過我們所提的方法了嗎 ?
    如果沒有, 你應該先試試然後再繼續討論.


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月2日 上午 02:09
    版主