我正在使用在主窗口中具有列表 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 /代码时,这是最好的方法,您不确定如何使用它或随时间更改