Winapi ListView可以';无法阻止列调整大小
我尝试在WiAPI C++项目中创建具有固定宽度列的ListVIEW。 我尝试使用一种技巧,在对话框过程中处理HDN_BEGINTRACK通知,只需在其中返回TRUE。正如我从不同的文章中了解到的,它可能会起作用 关键是,我捕捉到了它,但返回TRUE并不能阻止调整大小 在收到WM_NOTIFY后,也尝试返回TRUE-效果相同 请帮帮我。以下是代码的一些部分:Winapi ListView可以';无法阻止列调整大小,winapi,listview,fixed-width,column-width,Winapi,Listview,Fixed Width,Column Width,我尝试在WiAPI C++项目中创建具有固定宽度列的ListVIEW。 我尝试使用一种技巧,在对话框过程中处理HDN_BEGINTRACK通知,只需在其中返回TRUE。正如我从不同的文章中了解到的,它可能会起作用 关键是,我捕捉到了它,但返回TRUE并不能阻止调整大小 在收到WM_NOTIFY后,也尝试返回TRUE-效果相同 请帮帮我。以下是代码的一些部分: BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hIn
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance;
----
hDlg = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG),
hWnd,(DLGPROC)DlgProc);
INITCOMMONCONTROLSEX icex;
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);
HWND hWndListView = CreateWindow(
WC_LISTVIEW,
L"",
WS_CHILD | LVS_REPORT |WS_VISIBLE,
0, 0,
382,
200,
hDlg,
(HMENU)IDC_LIST,
hInst,
NULL);
----
//adding columns and items
----
DWORD exStyle = LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
ListView_SetExtendedListViewStyle(hWndListView,exStyle);
SetWindowTheme(hWndListView, L"Explorer", NULL);
----
return TRUE;
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
----
case WM_NOTIFY:
switch(((LPNMHDR)lParam)->code)
{
case HDN_BEGINTRACK:
OutputDebugString(L"HDN_BEGINTRACK\n");
return TRUE;
default:
break;
}
----
}
return FALSE;
}
提前谢谢 在对话框中从WM\U NOTIFY返回TRUE过程仅表明您已处理该消息。要实际返回结果值,还必须设置对话框的
DWL\u MSGRESULT
:
case HDN_BEGINTRACK:
OutputDebugString(L"HDN_BEGINTRACK\n");
SetWindowLong(hDlg, DWL_MSGRESULT, TRUE); // prevent resizing
return TRUE; // message processed; check DWL_MSGRESULT for real result
在对话框中从WM_NOTIFY返回TRUE过程仅表明您已处理该消息。要实际返回结果值,还必须设置对话框的
DWL\u MSGRESULT
:
case HDN_BEGINTRACK:
OutputDebugString(L"HDN_BEGINTRACK\n");
SetWindowLong(hDlg, DWL_MSGRESULT, TRUE); // prevent resizing
return TRUE; // message processed; check DWL_MSGRESULT for real result
@谢谢你的回复,但我有点误解你(我是新手)。你们说这个通知并没有传递给DlgProc,但它在那个里被捕获并打印出来了。@HansPassant,我想我明白了。我需要重写LustView的过程,它处理大小调整等。消息被捕获,因为通知被发送到父窗口。“我说得对吗?”汉斯,没有必要再分类了。看看这个家伙在一个类似的问题中说了什么:@HansPassant,谢谢你的回答,但我有点误解你(我是新手)。你们说这个通知并没有传递给DlgProc,但它在那个里被捕获并打印出来了。@HansPassant,我想我明白了。我需要重写LustView的过程,它处理大小调整等。消息被捕获,因为通知被发送到父窗口。“我说得对吗?”汉斯,没有必要再分类了。看看这个家伙在一个类似的问题中说了什么:工作完美。谢谢!工作完美。谢谢!