gpt4 book ai didi

c# - 如何在 C# 中将类实例传递给 WndProc

转载 作者:可可西里 更新时间:2023-11-01 11:12:51 25 4
gpt4 key购买 nike

我如何将主窗体中的对象实例传递给 WndProc 方法

例如:我有一个 ComboBox 对象 - objCombo。在系统绘制下拉列表框之前,我必须捕获某个窗口消息。

执行此操作的一种方法是,我可以拥有一个派生自 ComboBox 的自定义组合框

public class CustomComboBox : ComboBox 
{
//... some initialization code goes here

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CTLCOLORLISTBOX)
{
// capture the message and do some work.
//here i can get the reference to the CustomComboBox by using
//this keyword.
}
}

}

但是,我想知道有没有一种方法可以让我在不经历创建自定义组合框的过程的情况下做到这一点,并做完全相同的事情。即使用对我的组合框实例的引用在我的 Form 类中捕获 Windows 消息。 ?

public class MyForm : Form
{
//... some initialization code goes here including the InitializeComponent
// for form objects and other controls

private void CaptureComboWndProc(ref Message m)
{
// this method will capture only the windows message specific to objCombo ??
}

}

我希望我能清楚地回答这个问题谢谢和干杯增值税协定

最佳答案

更好的方法是创建组合框的后代。这是非常明确的做法。

无论您如何从消息中找到控件,这就是您的方法。

使用 Control.FromHandle 找到消息发布到的控件。

   protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CTLCOLORLISTBOX)
{
if(Control.FromHandle(m.HWnd) == this.objCombo)
{
CaptureComboWndProc(ref m);
}
}
}

private void CaptureComboWndProc(ref Message m)
{

}

还有...最后我想说不要请这样做。

关于c# - 如何在 C# 中将类实例传递给 WndProc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com