什么是子类和API挂钩?

时间:2012-05-12 08:07:35

标签: windows visual-studio winapi visual-c++

我是Windows API编程的新手,我想用外行的术语知道什么是子类和API挂钩。我正在做一个使用所有者绘制控件的项目,我有两个术语不断出现。现在我已经在CodeProject.com上看到了很多关于这些主题的详细教程,但问题是所有这些都使用MFC,我在纯Win32编码。如果有人知道上述主题的任何好的教程,那么请发布链接。还试着避免链接到msdn,因为新手我无法弄清楚那里写的是什么。

2 个答案:

答案 0 :(得分:10)

Layman术语:通过替换窗口的窗口过程来完成子分类。其中重定向Windows所做的调用以将消息传递到您的函数的窗口,以便您首先看到这些消息。这使您可以更改窗口的行为,为其提供原始窗口没有的新功能。这是一种非常常见的技术,并且直接受操作系统支持,SDK文章is here

API挂钩类似,但适用于winapi功能。这样您就可以更改在您未编写的进程中运行的代码的行为。任意地,您可以挂钩CreateFile()并更改传递的文件名或使其失败。这样做很多不那么常见,也很难做到正确,因为它不像子类别这样的烘焙功能。 Microsoft's Detours是该技术的示例实现。

这两种技术都属于高级编程类别,如果你做得不对,你就会陷入非常麻烦的困境。如果您现在无法阅读MSDN文章,请将其保留在架子上,直到您准备好它为止。

答案 1 :(得分:1)

如果您正在编写原始Win32,您可能应该获得Petzold的书“Programming Windows”。