0

オブジェクトのポインタを の 5 番目のパラメータとして渡したいと思います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
);

そして、これが私の試みの1つです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 [...]
    }
}


myObjectから アクセスして編集する方法はありますCallbackDlgProc()か?

4

2 に答える 2

4

に渡すときDialogBoxParamは、address-of 演算子&を使用してポインターを取得します。ただし、それは既にポインターであるため、実際にはポインターをポインター(型MyClass**) に渡します。

コールバック関数のコードを調整するか、address-of 演算子を使用しないでください。

于 2013-04-08T15:00:01.953 に答える