gpt4 book ai didi

c++ - 空句柄错误

转载 作者:行者123 更新时间:2023-11-30 02:52:45 26 4
gpt4 key购买 nike

我正在开发一个在主窗口中有一个 ListView 的 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

我该怎么做才能让该句柄指向我的 ListView ?

最佳答案

做那种事的三种方法。

  1. 丑陋的
    将您的 CarsListView HWND 存储在 static 中。您不能有 2 个父窗口实例。
  2. 坏人
    在 init 中使用 SetWindowsLongPtr(parentHWND,GWLP_USERDATA,CarsListViewHWND) 并在需要时使用 GetWindowLongPtr。它很快,您可以拥有任意数量的实例,但如果您需要不止一个信息,我建议存储一个 struct 和您的 HWND,而不是单个 HWND,以便将来扩展。
  3. 好人?
    使用 SetProp(parentHWND,"Your Unique String",hDataHandle); 它是目前为止更多的代码,但是通过这种用法,您可以在每个窗口上使用它而无需关心 USERDATA 是否已被使用。当您需要将个人属性添加到窗口/代码时,这是最好的方法,您不能确定它将如何使用或随时间变化

关于c++ - 空句柄错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com