Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d42210dd
Commit
d42210dd
authored
Jul 25, 2005
by
Frank Richter
Committed by
Alexandre Julliard
Jul 25, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use theming for the ListView non-client area.
parent
564872cd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
100 additions
and
0 deletions
+100
-0
listview.c
dlls/comctl32/listview.c
+100
-0
No files found.
dlls/comctl32/listview.c
View file @
d42210dd
...
...
@@ -184,6 +184,7 @@
#include "winnls.h"
#include "commctrl.h"
#include "comctl32.h"
#include "uxtheme.h"
#include "wine/debug.h"
#include "wine/unicode.h"
...
...
@@ -395,6 +396,8 @@ typedef struct tagLISTVIEW_INFO
TRACE("hwndSelf=%p, rcList=%s\n", iP->hwndSelf, debugrect(&iP->rcList)); \
} while(0)
static
const
WCHAR
themeClass
[]
=
{
'L'
,
'i'
,
's'
,
't'
,
'V'
,
'i'
,
'e'
,
'w'
,
0
};
/*
* forward declarations
*/
...
...
@@ -7451,6 +7454,25 @@ static BOOL LISTVIEW_SortItems(LISTVIEW_INFO *infoPtr, PFNLVCOMPARE pfnCompare,
/***
* DESCRIPTION:
* Update theme handle after a theme change.
*
* PARAMETER(S):
* [I] infoPtr : valid pointer to the listview structure
*
* RETURN:
* SUCCESS : 0
* FAILURE : something else
*/
static
LRESULT
LISTVIEW_ThemeChanged
(
LISTVIEW_INFO
*
infoPtr
)
{
HTHEME
theme
=
GetWindowTheme
(
infoPtr
->
hwndSelf
);
CloseThemeData
(
theme
);
OpenThemeData
(
infoPtr
->
hwndSelf
,
themeClass
);
return
0
;
}
/***
* DESCRIPTION:
* Updates an items or rearranges the listview control.
*
* PARAMETER(S):
...
...
@@ -7494,6 +7516,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
LISTVIEW_INFO
*
infoPtr
;
UINT
uView
=
lpcs
->
style
&
LVS_TYPEMASK
;
LOGFONTW
logFont
;
BOOL
themingActive
=
IsAppThemed
()
&&
IsThemeActive
();
TRACE
(
"(lpcs=%p)
\n
"
,
lpcs
);
...
...
@@ -7576,6 +7599,8 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
}
}
if
(
themingActive
)
OpenThemeData
(
hwnd
,
themeClass
);
return
0
;
fail:
...
...
@@ -7591,6 +7616,24 @@ fail:
/***
* DESCRIPTION:
* Destroys the listview control.
*
* PARAMETER(S):
* [I] infoPtr : valid pointer to the listview structure
*
* RETURN:
* Success: 0
* Failure: -1
*/
static
LRESULT
LISTVIEW_Destroy
(
LISTVIEW_INFO
*
infoPtr
)
{
HTHEME
theme
=
GetWindowTheme
(
infoPtr
->
hwndSelf
);
CloseThemeData
(
theme
);
return
0
;
}
/***
* DESCRIPTION:
* Enables the listview control.
*
* PARAMETER(S):
...
...
@@ -8359,6 +8402,53 @@ static LRESULT LISTVIEW_HeaderNotification(LISTVIEW_INFO *infoPtr, const NMHEADE
/***
* DESCRIPTION:
* Paint non-client area of control.
*
* PARAMETER(S):
* [I] infoPtr : valid pointer to the listview structureof the sender
* [I] region : update region
*
* RETURN:
* TRUE - frame was painted
* FALSE - call default window proc
*/
static
BOOL
LISTVIEW_NCPaint
(
LISTVIEW_INFO
*
infoPtr
,
HRGN
region
)
{
HTHEME
theme
=
GetWindowTheme
(
infoPtr
->
hwndSelf
);
BOOL
themingActive
=
IsAppThemed
()
&&
IsThemeActive
();
BOOL
doTheming
=
themingActive
&&
(
theme
!=
NULL
);
HDC
dc
;
RECT
r
;
HRGN
cliprgn
;
int
cxEdge
=
GetSystemMetrics
(
SM_CXEDGE
),
cyEdge
=
GetSystemMetrics
(
SM_CYEDGE
);
if
(
!
doTheming
)
return
FALSE
;
GetWindowRect
(
infoPtr
->
hwndSelf
,
&
r
);
cliprgn
=
CreateRectRgn
(
r
.
left
+
cxEdge
,
r
.
top
+
cyEdge
,
r
.
right
-
cxEdge
,
r
.
bottom
-
cyEdge
);
if
(
region
!=
(
HRGN
)
1
)
CombineRgn
(
cliprgn
,
cliprgn
,
region
,
RGN_AND
);
OffsetRect
(
&
r
,
-
r
.
left
,
-
r
.
top
);
dc
=
GetDCEx
(
infoPtr
->
hwndSelf
,
region
,
DCX_WINDOW
|
DCX_INTERSECTRGN
);
OffsetRect
(
&
r
,
-
r
.
left
,
-
r
.
top
);
if
(
IsThemeBackgroundPartiallyTransparent
(
theme
,
0
,
0
))
DrawThemeParentBackground
(
infoPtr
->
hwndSelf
,
dc
,
&
r
);
DrawThemeBackground
(
theme
,
dc
,
0
,
0
,
&
r
,
0
);
ReleaseDC
(
infoPtr
->
hwndSelf
,
dc
);
/* Call default proc to get the scrollbars etc. painted */
DefWindowProcW
(
infoPtr
->
hwndSelf
,
WM_NCPAINT
,
(
WPARAM
)
cliprgn
,
0
);
return
TRUE
;
}
/***
* DESCRIPTION:
* Determines the type of structure to use.
*
* PARAMETER(S):
...
...
@@ -9254,6 +9344,9 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case
WM_CREATE
:
return
LISTVIEW_Create
(
hwnd
,
(
LPCREATESTRUCTW
)
lParam
);
case
WM_DESTROY
:
return
LISTVIEW_Destroy
(
infoPtr
);
case
WM_ENABLE
:
return
LISTVIEW_Enable
(
infoPtr
,
(
BOOL
)
wParam
);
...
...
@@ -9293,6 +9386,11 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case
WM_NCDESTROY
:
return
LISTVIEW_NCDestroy
(
infoPtr
);
case
WM_NCPAINT
:
if
(
LISTVIEW_NCPaint
(
infoPtr
,
(
HRGN
)
wParam
))
return
0
;
goto
fwd_msg
;
case
WM_NOTIFY
:
if
(
lParam
&&
((
LPNMHDR
)
lParam
)
->
hwndFrom
==
infoPtr
->
hwndHeader
)
return
LISTVIEW_HeaderNotification
(
infoPtr
,
(
LPNMHEADERW
)
lParam
);
...
...
@@ -9341,6 +9439,8 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return
0
;
/* case WM_TIMER: */
case
WM_THEMECHANGED
:
return
LISTVIEW_ThemeChanged
(
infoPtr
);
case
WM_VSCROLL
:
return
LISTVIEW_VScroll
(
infoPtr
,
(
INT
)
LOWORD
(
wParam
),
0
,
(
HWND
)
lParam
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment