我正在使用在主窗口中具有列表 View 的Win32 ++应用程序。这是我的代码:

HWND CarsListView = NULL;

switch (message)
{
case WM_SHOWWINDOW:
    CarsListView = CreateListView(hWnd);
    ShowWindow(CarsListView, SW_SHOW);
    break;
case WM_SIZING:
    {
        if(!CarsListView)
            MessageBox(hWnd, _T("Null handle."), _T("Error"), MB_ICONERROR | MB_OK);
        RECT WindowRect;
        GetWindowRect( hWnd, &WindowRect);
        SetWindowPos(CarsListView, NULL, 0, 0, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top, SWP_SHOWWINDOW);
    }
    break;
// ...
}
CreateListView的定义是这样的:
HWND CreateListView (HWND hwndParent)
{
  INITCOMMONCONTROLSEX icex;           // Structure for control initialization.
  icex.dwICC = ICC_LISTVIEW_CLASSES;
  InitCommonControlsEx(&icex);

  RECT rcClient;                       // The parent window's client area.

  GetClientRect (hwndParent, &rcClient);

  // Create the list-view window in report view with label editing enabled.
  HWND hWndListView = CreateWindow(WC_LISTVIEW,
    L"",
    WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
    0, 0,
    rcClient.right - rcClient.left,
    rcClient.bottom - rcClient.top,
    hwndParent,
    /*(HMENU)*/NULL,
    hInst,
    NULL);
  return (hWndListView);
}

当窗口收到WM_SIZING时,我得到了CarsListView = NULL
我该怎么做才能指向我的列表 View 的句柄?

最佳答案

做这种事情的三种方式。

  • 丑陋
    将您的CarsListView HWND存储在static中。您不能有2个父窗口实例。
  • 坏蛋
    需要时,请在init和GetWindowLongPtr中使用SetWindowsLongPtr(parentHWND,GWLP_USERDATA,CarsListViewHWND)。快速,您可以根据需要拥有任意数量的实例,但是如果您需要多个信息,我建议您将HWND存储在struct中,而不是将其存储在单个HWND中,以备将来扩展。
  • 好吗?
    到目前为止,使用SetProp(parentHWND,"Your Unique String",hDataHandle);可以得到更多的代码,但是通过这种用法,您可以在每个窗口上使用它,而无需关心是否已使用USERDATA。当您需要将个人属性(property)添加到Windows /代码时,这是最好的方法,您不确定如何使用它或随时间更改
  • 09-06 22:42