私はWindowsAPIプログラミングにかなり慣れていないので、素人の言葉でサブクラス化とAPIフックとは何かを知りたいです。私は所有者が描いたコントロールを使用するプロジェクトを行っていますが、2つの用語が出てきます。これらのトピックに関する詳細なチュートリアルをCodeProject.comですでにたくさん見てきましたが、問題は、それらすべてがMFCを使用しており、純粋なWin32でコーディングしていることです。上記のトピックの優れたチュートリアルについて誰かが知っている場合は、リンクを投稿してください。また、初心者はそこに書かれていることを理解するのに苦労しているので、msdnへのリンクは避けてください。
2 に答える
レイマン用語:サブクラス化は、ウィンドウのウィンドウプロシージャを置き換えることによって行われます。これは、Windowsがウィンドウにメッセージを配信するために行う呼び出しを関数にリダイレクトするため、これらのメッセージを最初に表示できます。これにより、ウィンドウの動作を変更して、元のウィンドウにはなかった新しい機能をウィンドウに与えることができます。これは非常に一般的な手法であり、OSによって直接サポートされています。SDKの記事はこちらです。
APIフックは似ていますが、winapi関数用です。これにより、自分が作成しなかったプロセスで実行されるコードの動作を変更できます。任意に、CreateFile()をフックして、渡されたファイル名を変更するか、意図的に失敗させることができます。これを行うことはそれほど一般的ではなく、サブクラス化のように組み込まれた機能ではないため、正しく行うのもはるかに困難です。 MicrosoftのDetoursは、この手法の実装例です。
どちらの手法も高度なプログラミングのカテゴリに含まれており、正しく行わないと、かなり厄介な問題に巻き込まれる可能性があります。今すぐMSDNの記事を読むのに問題がある場合は、準備ができるまで棚に置いておきます。
生のWin32をプログラミングしている場合は、おそらくPetzoldの本「ProgrammingWindows」を入手する必要があります。