C#的新手 - 想要添加WndProc

时间:2011-08-29 07:00:51

标签: c# winforms winapi wndproc

每个人,我对C#都是新手,请帮助我......

我想添加WndProc来处理消息,我已经查看了属性,但是我没有看到thunderbolt显示函数名,所以我可以添加一个我喜欢的。我搜索互联网并看到WndProc为

protected override void WndProc(ref Message msg) 
{
   //do something
}

我希望它能为我生成,而不是输入它?

2 个答案:

答案 0 :(得分:7)

WndProc不是.NET事件处理程序;它是window procedure,是原生Win32 API的一部分。作为Visual Studio中的事件处理程序,您不会为它生成任何代码。

在Windows窗体中,您所要做的就是覆盖表单的现有WndProc()方法并开始编码。正如在Form类中找到的那样,如果您键入以下内容,则会有一个自动完成选项:

override WndProc

然后生成:

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
    }

答案 1 :(得分:5)

只是为了清楚地说明这一点:你不得不在.net世界中的winforms / wpf /中使用WndProc做一些不太可能的事情。 所有这些讨厌的东西都被抽象出来并隐藏起来,我不知道我真正需要/错过它的单一案例。

在Winforms中,您只需使用

连接事件
Eventname += EventHandlerMethod;

(或者你可以使用匿名方法和lambdas做更高级的东西,但目前并不关心它自己。)

最简单的方法是使用Designer并将事件挂钩: enter image description here 使用此工具订阅事件后,编辑器将显示它创建的处理程序,您可以开始编码。

这是一个简单的例子: 我刚刚开始一个新项目并在表单上添加了一个按钮“button1”: enter image description here

然后我连接按钮的OnClick-Event(选择按钮并转到事件选项卡): enter image description here

最后我添加了代码来将按钮文本更改为“clicked”到代码隐藏中:

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StackOverflowHelp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // the following line is from InitializeComponent - here you can see how the eventhandler is hook
            // this.button1.Click += new System.EventHandler(this.OnButton1Clicked);
        }

        private void OnButton1Clicked(object sender, EventArgs e)
        {
            var button = sender as Button; // <- same as button1
            if (button == null) return; // <- should never happen, but who is to know?
            button.Text = "clicked";
        }
    }
}

就是这样。讨厌的事件调度由框架完成。