c++ - (Winapi C++) 如何在没有全局变量的情况下将数据从一个窗口传递到另一个窗口?

标签 c++ winapi

我已经尝试对此进行研究,但我仍然很困惑。我真的不想使用全局变量,但即使在 msdn 站点上,他们也说“将其设置为全局变量以从对话框回调中访问它”。有什么办法可以在堆上创建内存并将指针传递给新创建的对话框吗?我希望对话框能够更改通过指针访问的数据。

最佳答案

如果您使用的是 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);
 }

关于c++ - (Winapi C++) 如何在没有全局变量的情况下将数据从一个窗口传递到另一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761167/

相关文章:

c++ - 关于if条件和|| C++ 运算符

c++ - 如何使用 Code::Blocks 链接到库?

c++ - 查找在螺旋矩阵中行进的 N 个正方形的坐标

java - 在 C++ 中的模板参数上调用静态函数

c++ - 为什么这种从 int 到 double& 的转换不起作用?

C++ 捕获对 bool 错误值的引用

C++ Win32 如何创建一个 "toggle"按钮

c++ - 用VS2008编译的C++应用程序在其他电脑上运行不起来

c++ - 如何只检测一次相同的键盘按键

c - 为什么我无法打开我的注册表项