.NET: IMessageFilter Problem with Bricscad

Trying to trap keypress before they get to the Bricscad application window.

In AutoCAD I use an IMessageFilter like so:

using WinForms = System.Windows.Forms;
using Keys = System.Windows.Forms.Keys;

private class BrushSizeKeyFilter : WinForms.IMessageFilter
{
  public bool PreFilterMessage(ref WinForms.Message m)
  {
    const int WM_KEYDOWN = 0x0100;
    if (m.Msg==WM_KEYDOWN)
    {
      Keys kc = (Keys)(int)m.WParam & Keys.KeyCode;
      // check for Q or A
      if (kc == Keys.Q)
      {
        Debug.WriteLine("Q captured!");
        Active.Document.SendStringToExecute("_Q ", true, false, false);
        return true;
      }
      if (kc == Keys.A)
      {
        Debug.WriteLine("A captured!");
        Active.Document.SendStringToExecute("_A ", true, false, false);
        return true;
      }
      if (kc == Keys.V)
      {
        Debug.WriteLine("V captured!");
        Active.Document.SendStringToExecute("_V ", true, false, false);
        return true;
      }

    }
    // never falter
    return false;
  }
}

BrushSizeKeyFilter qaFilter = new BrushSizeKeyFilter();

WinForms.Application.AddMessageFilter(qaFilter);


For some reason the filter doesn't seem to get added to the Bricscad application. If it does, the Debug.Writeline() lines aren't firing.

Any ideas?

Comments

  • I think an Application.PreTranslateMessage event handler should work on both platforms.

  • Application.PreTranslateMessage worked a treat, thank you!

This discussion has been closed.