0

我想将对象的指针作为DialogBoxParam().

INT_PTR WINAPI DialogBoxParam(
  _In_opt_  HINSTANCE hInstance,
  _In_      LPCTSTR lpTemplateName,
  _In_opt_  HWND hWndParent,
  _In_opt_  DLGPROC lpDialogFunc,
  _In_      LPARAM dwInitParam
);


这是我的电话DialogBoxParam()

MyClass *myObject = new MyClass();
DialogBoxParam(
    GetModuleHandle(NULL),
    MAKEINTRESOURCE(IDD_SELECT_ETC),
    hwnd,
    CallbackDlgProc,
    (LPARAM)&myObject
);

这是我的尝试之一CallbackDlgProc()(知道 myFile 是 public char* 成员myObject):

BOOL CALLBACK CallbackDlgProc(HWND hwndDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_INITDIALOG:
        {
            MessageBox(NULL, (CHAR*)((*(MyClass*)lParam).myFile), "Title", MB_OK);
            return TRUE;
        }
        case [...]
    }
}


知道如何访问和编辑myObjectCallbackDlgProc()

4

2 回答 2

4

当你将它传递给 时DialogBoxParam,你使用 address-of 操作符&来获取一个指针。但是,它已经是一个指针,因此您实际上将指针传递给指针(类型MyClass**)。

要么调整回调函数中的代码,要么不使用地址运算符。

于 2013-04-08T15:00:01.953 回答
0

对于不理解上述答案的人的更详细解释,在 OP 的示例代码中,您必须删除“&”才能使其工作:

DialogBoxParam(
    GetModuleHandle(NULL),
    MAKEINTRESOURCE(IDD_SELECT_ETC),
    hwnd,
    CallbackDlgProc,
    (LPARAM)myObject
);

享受。

于 2018-03-19T16:57:49.473 回答