界面开发(二)--- NativeWindow

NativeWindow是.net Framework提供的一个底层的类。微软官方的解释为:NativeWindow Provides a low-level encapsulation of a window handle and a window procedure.说道这 些也相当于没有说,因为NativeWindow到底是干什么的也没有说清楚,意思就是一个低级别的 对窗体句柄和窗体过程的一个封装。后来查询了很多的资料才明白了其中的意义。

资料来源:

http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007921/72804.html

这个讲解的是《利用NativeWindow监视WndProc消息》,这篇内容比较长,而且页数比较多 ,经过自己努力和耐心,终于完成了其中的例子,代码下载地址为: http://files.cnblogs.com/zhjp11/皮肤/NativeWindowApplication.rar

http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx

这篇来自CodeProject,老外写的代码就是比较有水平。将Windows 的OpenFileDialog子类 化,显示成了自定义的OpenFileDialog,而且添加了很多的事件。相当的佩服。

经过这两篇的细心阅读,终于了解了NativeWindow的作用,NativeWindow就是提供了底层的 封装,提供了AssignHandle和RealeseHandle这两个方法,主要就是对注册了窗体句柄的窗体进 行Hook,将窗体的事件经过自己处理后交给Windows处理。使用Refector.net查看了 NativeWindow中AssignHandle这个方法,也验证了我这个说法。在AssignHandle中有这样一段 代码:

userDefWindowProc = UnsafeNativeMethods.GetProcAddress(new HandleRef (null,UnsafeNativeMethods.GetModuleHandle("user32.dll")), lpProcName); 

对Win32开发的也许都知道这段代码的意义,他也是Hook的一种。不过是更加高级的Hook方 式。这里就不在细说,我们现在只要知道他可以对我们进行注册的窗体进行Hook,可以将自己 的代码加载到我们想要的位置就可以了。

然后我就使用NativeWindow获取所有的窗体的所有事件,然后输出Hook到的时间,结果图如 下:

本文配套源码

时间: 2025-01-02 06:50:41

界面开发(二)--- NativeWindow的相关文章

桌面环境-windows 桌面程序的界面开发用的是什么?

问题描述 windows 桌面程序的界面开发用的是什么? 就像现在看到的qq之类的,界面看起来还是比较美观的,它是用的什么工具?语言?开发的呢? ,不可能是java开发的吧,Java的swing和awt应该是好几年前用来做界面的吧! 那目前比较流行的的桌面面开发用的是什么呢? 解决方案 c++,qq用到了direct UI,还有很多皮肤库.还有用web UI的. 解决方案二: 一般用C#,微软自己的系统自己的开发环境,这是最完美的组合.有wpf和winforms 解决方案三: VS Java 很

c++-C++ UI开发 界面开发 窗口开发

问题描述 C++ UI开发 界面开发 窗口开发 自学C++的,目前都是照着书本写程序的,书上从win32 API开始讲解,然后讲MFC 很简略,所以我只会用Winmain(win32 API)写很简单的窗体,但是win32 api写 窗口很丑,而且学win32 API主要是打基础,了解程序的运行方式, 然后呢MFC书本讲的很简单,找不到书也找不到相应MSDN, win32 API好歹有个MSDN 所以呢,C++UI开发有哪些软件呢?我要所有的软件名字好有个概念,然后求推荐其中哪个好用 解决方案

编程-C++ 界面开发工具推荐

问题描述 C++ 界面开发工具推荐 用C++的能界面编程的软件有那些呢?全部举例出来吧. 然后求推荐,选哪个好用,我是业余的自学的兴趣小组的. 据说QT很不错,然后再推荐基本QT的界面编程入门的书吧 我已经有一定编程基础了,高级点的不涉及基础的QT界面编程的书也行 解决方案 一般有两种选择 大多数人选择使用一些图形界面库来解决,比如说QT,MFC. 还有一种是直接使用图形平台提供的接口,例如在Windows下,Win32API可以实现图形界面,Linux,一般是x window,x window

as-安卓界面开发问题,状态栏和工具栏有黑线

问题描述 安卓界面开发问题,状态栏和工具栏有黑线 请问为什么安卓5.0(API21以上)把状态栏透明后设置颜色和ToolBar一样时,会有一条黑线呢? 例子使用AS模板的NoActionBar主题. 解决方案 终于解决了,用DrawerLayout就行了,或者设置elevation也可以,谢谢各位的帮助,谢谢! 解决方案二: 采用noactionbar的主题.. 解决方案三: 不要状态栏,或自己写个状态栏 解决方案四: 去掉头部状态栏试试呢?

Android WebView 应用界面开发教程_Android

WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用聚合(Polymer)和Material设计. 一.WebView浏览网页(加载线上URL) WebView提供了很多方法执行浏览器操作,常用方法如下: void goBack():后退 void goForward():前进. void goBackOrForward(int step):step

用java的swing做图形界面开发

问题描述 我发现网上与这个有关的东西都很少啊,这个是不是很冷门啊?做这个是不是没什么前途?我是在校的大学生,对java比较感兴趣,但是学完简单的语法后都不知道该做什么好,请各位前辈指一下路哈,谢谢. 解决方案 不是.主要是J2SE这方面做得人很少了.现在Java主要都是JavaWEB.做J2SE的都跑Android去了.做J2SE的看不起J2EE的.大都这样呵呵~~~Java Swing主要是效率比较低,所以用得人很少做图形界面的话C++和C比起Java来有着绝对的优势,而且Java Swing

Android WebView 应用界面开发教程

WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用聚合(Polymer)和Material设计. 一.WebView浏览网页(加载线上URL) WebView提供了很多方法执行浏览器操作,常用方法如下: void goBack():后退 void goForward():前进. void goBackOrForward(int step):step

界面开发(五)--- 界面优化

在上一篇界面开发中,我讲解了将系统界面还原,还原窗体的本来面貌.但是有的博友提出 窗体闪烁,这确实是个问题,原来自己开发的时候也是出现了这个问题.花了两天的时间,重 要修改了个大概,将窗体绘画的次数和窗体的刷新程度进行了修改.首先看看效果: 这是主窗体,在主窗体中不仅修改了窗体的刷新率,而且添加了一个自定义的窗体按钮,使 用了很多的颜色来显示,模仿了Foxmail的界面显示,但是对于除了主窗体外的其他窗体,这些 是不存在的.如下图显示的子窗体: 实现的原理和原来的一样,只不过在原来绘画的基础上减

界面开发(四)--- 还窗体的新面貌

前一篇给窗体设置了Region,将窗体的FormBorderStyle设置成了None,然后修改了窗体的 显示区域Region.一个本来完好的窗体让我们设置成为了一个空白的没有任何色彩的窗体,这 对我们的界面开发好像是背到而行,有点南辕北辙了.其实不然,只有将窗体上的所有原有的 信息给去除掉,才能还原窗体的本来面貌,给窗体一个新面貌. 这篇就对窗体的界面开发设计一个新面貌. 我在界面开篇的开篇就已经说过,界面开发其实就是修改窗体的两个区域,Client Area和 None Client Are