none
wpf里需要控件句柄 RRS feed

  • 问题

  • 最近在做一个WPF的项目,里面有一项功能是可以播放电视节目,现在需要传送播放窗口的句柄给相关的函数
    initDevices(HWND hwnd);WPF里的控件貌似都不支持句柄的啊,可以用什么控件实现呢?MediaElement或是可以利用winform里面的控件?怎么获取句柄呢?各位大虾指教,急用!
    2010年12月8日 3:16

答案

  • 你好 潜流,

    首先,你说:“WPF里的控件貌似都不支持句柄的啊”。

    这个不是貌似,因为WPF里面的控件是没有句柄的,WPF中的控件不是传统的Win32控件,WPF中的元素是通过DirectX来绘制在屏幕上的,因此是没有HWND的。只有一个包装整个Window的对象才有一个句柄,就是我们可以在Spy++中看见的 HwndWrapper 类型,这个类型是用来包装WPF窗体的。如果你是在一个Win32/Winform中嵌入了一个WPF组件,这个组件其实也会通过这个类来包装,具体你可以使用Spy++来查看。

    下面我举个例子,比如你登陆一个用DirectX开发的游戏的时候, 有一个游戏登陆框, 这里面的输入框是抓不到句柄的,其实这里的输入框就相当于是画出来的,通过DX的一些基本函数绘制出的图形而已,并不是所谓Win32里面的独立的控件了。

    如果你要达到你的目的, 你可以尝试在WPF的项目中Host Win32的控件,这样这个控件就如同在Win32程序中一样,是由句柄的。至于如何建立,你可以参考MSND上面的文档,有很多关于这个的,比如:

     

    Best regards,

    Sheldon _Xiao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年12月9日 5:12
    版主

全部回复

  • 你好 潜流,

    首先,你说:“WPF里的控件貌似都不支持句柄的啊”。

    这个不是貌似,因为WPF里面的控件是没有句柄的,WPF中的控件不是传统的Win32控件,WPF中的元素是通过DirectX来绘制在屏幕上的,因此是没有HWND的。只有一个包装整个Window的对象才有一个句柄,就是我们可以在Spy++中看见的 HwndWrapper 类型,这个类型是用来包装WPF窗体的。如果你是在一个Win32/Winform中嵌入了一个WPF组件,这个组件其实也会通过这个类来包装,具体你可以使用Spy++来查看。

    下面我举个例子,比如你登陆一个用DirectX开发的游戏的时候, 有一个游戏登陆框, 这里面的输入框是抓不到句柄的,其实这里的输入框就相当于是画出来的,通过DX的一些基本函数绘制出的图形而已,并不是所谓Win32里面的独立的控件了。

    如果你要达到你的目的, 你可以尝试在WPF的项目中Host Win32的控件,这样这个控件就如同在Win32程序中一样,是由句柄的。至于如何建立,你可以参考MSND上面的文档,有很多关于这个的,比如:

     

    Best regards,

    Sheldon _Xiao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年12月9日 5:12
    版主
  • 谢谢版主的回答,好的,我先按你给的资料研究研究~Besh wishes to you~~~
    2010年12月11日 8:53
  • 你好 潜流,

    我暂时把我的回复标记成“答复”, 如果你觉的我的回复对你的问题没有帮助,你可以取消标记为答复。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月15日 3:34
    版主