wpf重载消息处理函数

njit_77 2014-12-16 08:43:51
最近需要用到wpf消息处理函数,网上搜了一下,大致两种

//获得HwndSource 有两种方式 用AddHook加委托

//第一种

void win_SourceInitialized(object sender, EventArgs e)

{

System.IntPtr handle = (new System.Windows.Interop.WindowInteropHelper(this)).Handle;
WinInterop.HwndSource.FromHwnd(handle).AddHook(new System.Windows.Interop.HwndSourceHook(WindowProc));

}

//第二种

void win_SourceInitialized(object sender, EventArgs e)

{

HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
hwndSource.AddHook(new HwndSourceHook(WindowProc));
}

}

//两种方法的区别??

问题:
1、不明白两种方法的区别。
2、当我用第一种方法调试时,提示handle值为0。用第二种方法,接收不到我需要的消息。
请大神帮忙解答一下,新人刚开始接触C#。如果问题比较简单,请别见怪
...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
njit_77 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 eew_1679694743 的回复:
使用重载方法的应用示例 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static int Add(int x, int y)//定义一个静态方法Add,返回值为int类型,有两个int类型的参数 { return x + y; } public double Add(int x, double y)//重新定义方法Add,它与第一个方法的返回值类型及参数类型不同 { return x + y; } public double Add(double x, double y)//重新定义方法Add,它与第一个方法的返回值类型及参数类型不同 { return x + y; } private void button1_Click(object sender, EventArgs e) { try { if (radioButton1.Checked)//判断int单选按钮是否选中 { //计算两个int类型数据的和 textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString(); } else if (radioButton2.Checked)//判断int+double单选按钮是否选中 { //计算int类型数据和double类型数据的和 textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToDouble(textBox2.Text)).ToString(); } else if (radioButton3.Checked)//判断double单选按钮是否选中 { //计算两个double类型数据的和 textBox3.Text = (Convert.ToDouble(textBox1.Text) + Convert.ToDouble(textBox2.Text)).ToString(); } } catch { } } }
先谢谢回答。重载我知道,不过我问的是两种方法内部的不同,内部代码的含义是什么?
eew_1679694743 2014-12-17
  • 打赏
  • 举报
回复
使用重载方法的应用示例 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static int Add(int x, int y)//定义一个静态方法Add,返回值为int类型,有两个int类型的参数 { return x + y; } public double Add(int x, double y)//重新定义方法Add,它与第一个方法的返回值类型及参数类型不同 { return x + y; } public double Add(double x, double y)//重新定义方法Add,它与第一个方法的返回值类型及参数类型不同 { return x + y; } private void button1_Click(object sender, EventArgs e) { try { if (radioButton1.Checked)//判断int单选按钮是否选中 { //计算两个int类型数据的和 textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString(); } else if (radioButton2.Checked)//判断int+double单选按钮是否选中 { //计算int类型数据和double类型数据的和 textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToDouble(textBox2.Text)).ToString(); } else if (radioButton3.Checked)//判断double单选按钮是否选中 { //计算两个double类型数据的和 textBox3.Text = (Convert.ToDouble(textBox1.Text) + Convert.ToDouble(textBox2.Text)).ToString(); } } catch { } } }

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧