仅当控件承载在 Windows 窗体应用程序中或充当 ActiveX 控件时,才调用此方法。

解决方案 »

  1.   

    PreProcessMessage这个方法只有在用户按键时才会发生,其它的消息是不会调用这个方法的.
    你可以使用WndProc来处理其它的消息.
      

  2.   

    PreProcessMessage并不是像你想象的那样是一个消息处理之前的方法.这是不对的,它只能处理用户的按键消息.DefWndProc 可以得到系统处理的消息,不可以修改消息.WndProc则可以修改传过来的消息.
      

  3.   

    To 
    cdknet(VC++.NET) MSDN我还是会看看的,但这是什么意思呢??我是在 Windows 窗体应用程序中用的亚!To
    hbxtlhx(下着春雨的天) 我在这个Form上加了一个button,点击了PreProcessMessage还是没执行亚??
      

  4.   

    To
    hbxtlhx(下着春雨的天)
    你所说的按键消息是指什么样的Message?能不能解释一下,谢谢!
      

  5.   

    那ProcessKeyPreview又是干吗的呢?
      

  6.   

    了解了,
    PreProcessMessage
    ProcessKeyMessage
    ProcessKeyEventArgs
    是第一次触发时使用的。而
    ProcessKeyPreview是后面焦点在本Form上使用的。
    呵呵,谢谢hbxtlhx(下着春雨的天)了!
      

  7.   

    仅当控件承载在 Windows 窗体应用程序中或充当 ActiveX 控件时,才调用此方法。
    比如你自己写了一个从DataGrid继承的dataGrid控件,在这个控件里写上这个方法那么系统就会调用这个方法了.比如:
    class MyDataGrid:DataGrid
    {
    public const int WM_KEYDOWN = 0x100;
    public override bool PreProcessMessage( ref Message msg ) 

    Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode; 
    if(msg.Msg == WM_KEYDOWN && keyCode == Keys.Delete) 
    {
    if(MessageBox.Show("Delete this row?", "", MessageBoxButtons.YesNo) == DialogResult.No)  
    return true;
    }
    this.Parent.Text = msg.ToString();
    return base.PreProcessMessage(ref msg); 

    }