我有一个C ++ ATL COM组件,它显示一个弹出窗口(普通的'Win32,使用WS_POPUP样式),允许用户输入一些搜索信息。该组件已针对VB6格式进行了相当广泛的测试(主要是为了便于调试),但我们希望将其与.NET winforms一起使用。
我们在winforms环境中调用组件时发现的奇怪之处在于,某些击键不再通过弹出窗口。例如:我们在弹出窗口中有一个子编辑框,用于侦听ESC键并关闭弹出窗口。在VB6中,这很有效,但是在winforms中,弹出窗口从不接收ESC的keydown事件(它可以用于其他键,如标准字母数字)。
使用该组件非常简单,但我会在这里提出一个简单的示例来解决任何问题:
public partial class Form1 : Form
{
CustomPopup panel;
public Form1()
{
panel = new CustomPopup(); //This is the COM object
}
private void button1_Click(object sender, EventArgs e)
{
Point p = this.PointToScreen(button1.Location);
// Display the popup, which gives focus to a child WC_EDIT field
panel.ShowPopupAt(p.X, p.Y);
}
}
正如你所看到的,并不多见。那么,关于winforms中的内容的任何想法都在吃我们的击键以及我们如何告诉它停止?
答案 0 :(得分:0)
尝试抑制WND消息的Windows窗体处理(在控制/表单中窃取消息):
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN || m.Msg == WM_LBUTTONUP || m.Msg == WM_LBUTTONDBLCLK
)
{
return;
}
base.WndProc(ref m);
}