在我尝试创建一个窗口包装类之前,我了解到你不能将一个对话框过程传递给CreateDialogParam()
一个类中的那个,因为它是一个类成员会更改签名,因此与DLGPROC
. 我使用了一种解决方法,其中所有对话框都使用一个全局过程,该过程使用映射从传递给全局过程的窗口句柄中查找类成员过程。它会在映射中找到正确的类指针,并将参数传递给它的过程并返回结果。
现在我正在使用相同的方法,但是,在这个项目中,所有内容都将位于命名空间中。这是有效的吗?
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
);
}
};
}
我不确定命名空间是否会像类一样改变函数类型签名。