From 52fb337856497cb151081f3738e7cfa4bc2883bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Tue, 15 Feb 2022 16:29:59 +0100 Subject: Rework list view code. --- c/listview.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 c/listview.c (limited to 'c/listview.c') diff --git a/c/listview.c b/c/listview.c new file mode 100644 index 0000000..362029f --- /dev/null +++ b/c/listview.c @@ -0,0 +1,68 @@ +#include +#include +#include + +#include "resource.h" +#include "main.h" + +extern HFONT g_GUIFont; + +WNDPROC g_PrevLvProc; + +static LRESULT CALLBACK LvProc(HWND, UINT, WPARAM, LPARAM); + +HWND +LvCreate(HWND hWnd, HMENU hMenu) +{ + HMODULE hModule; + HWND hListView; + + hListView = CreateWindowEx( + 0, + WC_LISTVIEW, + TEXT(""), + WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT, + 0, 0, 0, 0, + hWnd, + hMenu, + GetModuleHandle(NULL), + NULL + ); + + g_PrevLvProc = (WNDPROC)SetWindowLongPtr(hListView, + GWLP_WNDPROC, (LONG_PTR)LvProc); + + ListView_SetExtendedListViewStyle(hListView, + LVS_EX_DOUBLEBUFFER); + + SendMessage(hListView, WM_SETFONT, + (WPARAM)g_GUIFont, MAKELPARAM(FALSE, 0)); + + hModule = LoadLibrary(TEXT("uxtheme.dll")); + if (hModule && GetProcAddress(hModule, "SetWindowTheme")) { + ListView_SetExtendedListViewStyle(hListView, + LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER); + SendMessage(hListView, WM_CHANGEUISTATE, + MAKEWPARAM(UIS_SET, UISF_HIDEFOCUS), 0); + SetWindowTheme(hListView, TEXT("Explorer"), NULL); + } + + return hListView; +} + +LRESULT CALLBACK +LvProc(HWND hListView, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_NOTIFY: + switch (((NMHDR *)lParam)->code) { + case HDN_ENDTRACK: + UpdateLayout(GetParent(hListView)); + return TRUE; + } + break; + } + + return CallWindowProc(g_PrevLvProc, + hListView, uMsg, wParam, lParam); +} -- cgit v1.2.3