[PATCH] shell32: Size ShellView column widths by font width
Andrew Eikum
aeikum at codeweavers.com
Fri Nov 10 08:28:48 CST 2017
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
dlls/shell32/shlview.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index e0dbc3ba9b..1628ea3367 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -385,6 +385,9 @@ static void ShellView_InitList(IShellViewImpl *This)
SHELLDETAILS sd;
WCHAR nameW[50];
HRESULT hr;
+ HFONT list_font, old_font;
+ HDC list_dc;
+ TEXTMETRICW tm;
TRACE("(%p)\n", This);
@@ -406,6 +409,13 @@ static void ShellView_InitList(IShellViewImpl *This)
}
}
+ list_font = (HFONT)SendMessageW(This->hWndList, WM_GETFONT, 0, 0);
+ list_dc = GetDC(This->hWndList);
+ old_font = SelectObject(list_dc, list_font);
+ GetTextMetricsW(list_dc, &tm);
+ SelectObject(list_dc, old_font);
+ ReleaseDC(This->hWndList, list_dc);
+
for (This->columns = 0;; This->columns++)
{
if (This->pSF2Parent)
@@ -415,9 +425,9 @@ static void ShellView_InitList(IShellViewImpl *This)
if (FAILED(hr)) break;
lvColumn.fmt = sd.fmt;
- lvColumn.cx = sd.cxChar*8; /* chars->pixel */
- StrRetToStrNW(nameW, sizeof(nameW)/sizeof(WCHAR), &sd.str, NULL);
- SendMessageW(This->hWndList, LVM_INSERTCOLUMNW, This->columns, (LPARAM)&lvColumn);
+ lvColumn.cx = MulDiv(sd.cxChar, tm.tmAveCharWidth * 3, 2); /* chars->pixel */
+ StrRetToStrNW(nameW, sizeof(nameW)/sizeof(WCHAR), &sd.str, NULL);
+ SendMessageW(This->hWndList, LVM_INSERTCOLUMNW, This->columns, (LPARAM)&lvColumn);
}
if (details) IShellDetails_Release(details);
--
2.15.0
More information about the wine-patches
mailing list