以前、ウィンドウ ラッパー クラスを作成しようとしたときに、ダイアログ プロシージャをCreateDialogParam()
クラスに渡すことができないことを知りました。これは、クラス メンバーであると署名が変更され、 の署名と一致しないためですDLGPROC
。グローバル プロシージャに渡されたウィンドウ ハンドルからクラス メンバー プロシージャを見つけるために、マップを使用する 1 つのグローバル プロシージャをすべてのダイアログで使用する回避策を使用しました。マップ内で正しいクラス ポインターを見つけ、引数をそのプロシージャーに渡し、結果を返します。
今、私はこれと同じ方法を使用していますが、このプロジェクトではすべてが名前空間になります。これは有効ですか?
namespace MyNamespace
{
INT_PTR MyProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
return 0;
}
class MyDlg
{
public:
HWND hwnd;
MyDlg(void) {
hwnd = CreateDialogParam(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_MYDLG),
HWND_DESKTOP,
(DLGPROC)MyProc, // Maybe 'MyNamespace::MyProc'?
NULL
);
}
};
}
名前空間がクラスのように関数型のシグネチャを変更するかどうかはわかりません。