Commit 6b5b0b91 authored by Kouji Sasaki's avatar Kouji Sasaki Committed by Alexandre Julliard

Added the feature to change row height in owner draw controls.

parent 108390a3
...@@ -306,6 +306,7 @@ typedef struct tagLISTVIEW_INFO ...@@ -306,6 +306,7 @@ typedef struct tagLISTVIEW_INFO
INT nSearchParamLength; INT nSearchParamLength;
WCHAR szSearchParam[ MAX_PATH ]; WCHAR szSearchParam[ MAX_PATH ];
BOOL bIsDrawing; BOOL bIsDrawing;
INT nMeasureItemHeight;
} LISTVIEW_INFO; } LISTVIEW_INFO;
/* /*
...@@ -2452,6 +2453,8 @@ static INT LISTVIEW_CalculateItemHeight(LISTVIEW_INFO *infoPtr) ...@@ -2452,6 +2453,8 @@ static INT LISTVIEW_CalculateItemHeight(LISTVIEW_INFO *infoPtr)
nItemHeight = max(nItemHeight, infoPtr->iconSize.cy); nItemHeight = max(nItemHeight, infoPtr->iconSize.cy);
if (infoPtr->himlState || infoPtr->himlSmall) if (infoPtr->himlState || infoPtr->himlSmall)
nItemHeight += HEIGHT_PADDING; nItemHeight += HEIGHT_PADDING;
if (infoPtr->nMeasureItemHeight > 0)
nItemHeight = infoPtr->nMeasureItemHeight;
} }
return max(nItemHeight, 1); return max(nItemHeight, 1);
...@@ -7507,6 +7510,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs) ...@@ -7507,6 +7510,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr->iconSpacing.cy = GetSystemMetrics(SM_CYICONSPACING); infoPtr->iconSpacing.cy = GetSystemMetrics(SM_CYICONSPACING);
infoPtr->nEditLabelItem = -1; infoPtr->nEditLabelItem = -1;
infoPtr->dwHoverTime = -1; /* default system hover time */ infoPtr->dwHoverTime = -1; /* default system hover time */
infoPtr->nMeasureItemHeight = 0;
/* get default font (icon title) */ /* get default font (icon title) */
SystemParametersInfoW(SPI_GETICONTITLELOGFONT, 0, &logFont, 0); SystemParametersInfoW(SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
...@@ -9321,8 +9325,24 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...@@ -9321,8 +9325,24 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_WINDOWPOSCHANGED: case WM_WINDOWPOSCHANGED:
if (!(((WINDOWPOS *)lParam)->flags & SWP_NOSIZE)) if (!(((WINDOWPOS *)lParam)->flags & SWP_NOSIZE))
{ {
UINT uView = infoPtr->dwStyle & LVS_TYPEMASK;
SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE | SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE |
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE);
if ((infoPtr->dwStyle & LVS_OWNERDRAWFIXED) && (uView == LVS_REPORT))
{
MEASUREITEMSTRUCT mis;
mis.CtlType = ODT_LISTVIEW;
mis.CtlID = GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID);
mis.itemID = -1;
mis.itemWidth = 0;
mis.itemData = 0;
mis.itemHeight= infoPtr->nItemHeight;
SendMessageW(infoPtr->hwndNotify, WM_MEASUREITEM, mis.CtlID, (LPARAM)&mis);
if (infoPtr->nItemHeight != max(mis.itemHeight, 1))
infoPtr->nMeasureItemHeight = infoPtr->nItemHeight = max(mis.itemHeight, 1);
}
LISTVIEW_UpdateSize(infoPtr); LISTVIEW_UpdateSize(infoPtr);
LISTVIEW_UpdateScroll(infoPtr); LISTVIEW_UpdateScroll(infoPtr);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment