0

アプリがインタラクティブデスクトップで実行されている場合にのみメッセージボックスが表示されるようにする必要があります。だから私は考えていました、:: MessageBoxとAfxMessageBoxを自分の実装(VS2008でコンパイルされたC++ / MFCプロジェクトから)でオーバーライドできますか?

PS。グローバルフックは必要ありません。これは、私のアプリのコードからのみ機能する必要があります。たとえば、コードのどこかにある場合は::MessageBox(...);、システムAPIにリンクする代わりに、独自のメソッドを呼び出せるようにする必要があります。

4

2 に答える 2

1

デフォルトのMessageBox(実際にはMessageBoxAまたはMessageBoxW)はエクスポートとして定義されているため、残念ながら、最初にリンクするローカルバージョンを定義することはできません。MessageBoxを使用するすべてのソースにアクセスできる場合は、windows.hをインクルードした後でMessageBoxマクロを再定義するのは簡単です。

#include <windows.h>
#undef MessageBox
#define MessageBox MyMessageBox

サードパーティのバイナリなど、コードをコンパイルしないものがある場合、これはもちろん機能しません。

于 2013-02-21T01:27:54.020 に答える
1

MFCを使用する場合は、CWinApp::DoMessageBox関数をオーバーライドできます。

于 2013-02-21T13:59:30.830 に答える