私はこれについて調査を試みましたが、まだ非常に混乱しています。私は本当にグローバルを使用したくありませんが、msdn サイトでさえ、「ダイアログ ボックスのコールバックからアクセスするには、これをグローバルに設定してください」と言っています。ヒープにメモリを作成し、新しく作成されたダイアログ ボックスへのポインターを渡す方法はありますか? ダイアログ ボックスで、ポインターを介してアクセスされるデータを変更できるようにしたいと考えています。
質問する
2799 次
2 に答える
8
を使用しているDialogBoxParam
場合は、次のようにポインターを渡すことができますdwInitParam
。
DialogBoxParam(hInstance,
MAKEINTRESOURCE(IDD_DIALOG),
hwndParent,
YourDialogFunc,
dwInitParam);
次に、ダイアログ コールバックからデータにアクセスします。
INT_PTR CALLBACK YourDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) [
case WM_INITDIALOG:
// the lParam parameter will contain the data sent through the dwInitParam
return 1;
break;
}
return 0;
}
を使用すると、パラメータを介して送信されるデータCreateWindowEx
が を介して送信されます。lpCreateParams
CREATESTRUCT
lpParam
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) [
case WM_CREATE:
{
CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);
int* userdata = reinterpret_cast<int*>(pCreate->lpCreateParams);
// store the pointer in the instance data of the window
// so it could always be retrieved by using GetWindowLongPtr(hwnd, GWLP_USERDATA)
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)userdata);
}
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
于 2013-11-04T03:50:52.460 に答える