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
7e461db2
Commit
7e461db2
authored
May 25, 2006
by
Mikołaj Zalewski
Committed by
Alexandre Julliard
May 26, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comctl32: header: Implement HDM_SETHOTDIVIDER.
parent
43015435
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
106 additions
and
2 deletions
+106
-2
header.c
dlls/comctl32/header.c
+106
-2
No files found.
dlls/comctl32/header.c
View file @
7e461db2
...
@@ -83,6 +83,7 @@ typedef struct
...
@@ -83,6 +83,7 @@ typedef struct
INT
xOldTrack
;
/* track offset (see above) after the last WM_MOUSEMOVE */
INT
xOldTrack
;
/* track offset (see above) after the last WM_MOUSEMOVE */
INT
nOldWidth
;
/* width of a sizing item after the last WM_MOUSEMOVE */
INT
nOldWidth
;
/* width of a sizing item after the last WM_MOUSEMOVE */
INT
iHotItem
;
/* index of hot item (cursor is over this item) */
INT
iHotItem
;
/* index of hot item (cursor is over this item) */
INT
iHotDivider
;
/* index of the hot divider (used while dragging an item or by HDM_SETHOTDIVIDER) */
INT
iMargin
;
/* width of the margin that surrounds a bitmap */
INT
iMargin
;
/* width of the margin that surrounds a bitmap */
HIMAGELIST
himl
;
/* handle to an image list (may be 0) */
HIMAGELIST
himl
;
/* handle to an image list (may be 0) */
...
@@ -94,6 +95,7 @@ typedef struct
...
@@ -94,6 +95,7 @@ typedef struct
#define VERT_BORDER 4
#define VERT_BORDER 4
#define DIVIDER_WIDTH 10
#define DIVIDER_WIDTH 10
#define HOT_DIVIDER_WIDTH 2
#define MAX_HEADER_TEXT_LEN 260
#define MAX_HEADER_TEXT_LEN 260
#define HDN_UNICODE_OFFSET 20
#define HDN_UNICODE_OFFSET 20
#define HDN_FIRST_UNICODE (HDN_FIRST-HDN_UNICODE_OFFSET)
#define HDN_FIRST_UNICODE (HDN_FIRST-HDN_UNICODE_OFFSET)
...
@@ -190,6 +192,13 @@ HEADER_OrderToIndex(HWND hwnd, WPARAM wParam)
...
@@ -190,6 +192,13 @@ HEADER_OrderToIndex(HWND hwnd, WPARAM wParam)
return
infoPtr
->
order
[
iorder
];
return
infoPtr
->
order
[
iorder
];
}
}
/* Note: if iItem is the last item then this function returns infoPtr->uNumItem */
static
INT
HEADER_NextItem
(
HWND
hwnd
,
INT
iItem
)
{
return
HEADER_OrderToIndex
(
hwnd
,
HEADER_IndexToOrder
(
hwnd
,
iItem
)
+
1
);
}
static
void
static
void
HEADER_SetItemBounds
(
HWND
hwnd
)
HEADER_SetItemBounds
(
HWND
hwnd
)
{
{
...
@@ -227,6 +236,37 @@ HEADER_Size (HWND hwnd, WPARAM wParam)
...
@@ -227,6 +236,37 @@ HEADER_Size (HWND hwnd, WPARAM wParam)
return
0
;
return
0
;
}
}
static
void
HEADER_GetHotDividerRect
(
HWND
hwnd
,
HEADER_INFO
*
infoPtr
,
RECT
*
r
)
{
INT
iDivider
=
infoPtr
->
iHotDivider
;
if
(
infoPtr
->
uNumItem
>
0
)
{
HEADER_ITEM
*
lpItem
;
if
(
iDivider
<
infoPtr
->
uNumItem
)
{
lpItem
=
&
infoPtr
->
items
[
iDivider
];
r
->
left
=
lpItem
->
rect
.
left
-
HOT_DIVIDER_WIDTH
/
2
;
r
->
right
=
lpItem
->
rect
.
left
+
HOT_DIVIDER_WIDTH
/
2
;
}
else
{
lpItem
=
&
infoPtr
->
items
[
HEADER_OrderToIndex
(
hwnd
,
infoPtr
->
uNumItem
-
1
)];
r
->
left
=
lpItem
->
rect
.
right
-
HOT_DIVIDER_WIDTH
/
2
;
r
->
right
=
lpItem
->
rect
.
right
+
HOT_DIVIDER_WIDTH
/
2
;
}
r
->
top
=
lpItem
->
rect
.
top
;
r
->
bottom
=
lpItem
->
rect
.
bottom
;
}
else
{
RECT
clientRect
;
GetClientRect
(
hwnd
,
&
clientRect
);
*
r
=
clientRect
;
r
->
right
=
r
->
left
+
HOT_DIVIDER_WIDTH
/
2
;
}
}
static
INT
static
INT
HEADER_DrawItem
(
HWND
hwnd
,
HDC
hdc
,
INT
iItem
,
BOOL
bHotTrack
)
HEADER_DrawItem
(
HWND
hwnd
,
HDC
hdc
,
INT
iItem
,
BOOL
bHotTrack
)
...
@@ -440,6 +480,18 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT iItem, BOOL bHotTrack)
...
@@ -440,6 +480,18 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT iItem, BOOL bHotTrack)
return
phdi
->
rect
.
right
;
return
phdi
->
rect
.
right
;
}
}
static
void
HEADER_DrawHotDivider
(
HWND
hwnd
,
HDC
hdc
)
{
HEADER_INFO
*
infoPtr
=
HEADER_GetInfoPtr
(
hwnd
);
HBRUSH
brush
;
RECT
r
;
HEADER_GetHotDividerRect
(
hwnd
,
infoPtr
,
&
r
);
brush
=
CreateSolidBrush
(
GetSysColor
(
COLOR_HIGHLIGHT
));
FillRect
(
hdc
,
&
r
,
brush
);
DeleteObject
(
brush
);
}
static
void
static
void
HEADER_Refresh
(
HWND
hwnd
,
HDC
hdc
)
HEADER_Refresh
(
HWND
hwnd
,
HDC
hdc
)
...
@@ -486,6 +538,8 @@ HEADER_Refresh (HWND hwnd, HDC hdc)
...
@@ -486,6 +538,8 @@ HEADER_Refresh (HWND hwnd, HDC hdc)
}
}
}
}
if
(
infoPtr
->
iHotDivider
!=
-
1
)
HEADER_DrawHotDivider
(
hwnd
,
hdc
);
SelectObject
(
hdc
,
hOldFont
);
SelectObject
(
hdc
,
hOldFont
);
}
}
...
@@ -871,7 +925,6 @@ HEADER_SendClickNotify (HWND hwnd, UINT code, INT iItem)
...
@@ -871,7 +925,6 @@ HEADER_SendClickNotify (HWND hwnd, UINT code, INT iItem)
(
WPARAM
)
nmhdr
.
hdr
.
idFrom
,
(
LPARAM
)
&
nmhdr
);
(
WPARAM
)
nmhdr
.
hdr
.
idFrom
,
(
LPARAM
)
&
nmhdr
);
}
}
static
LRESULT
static
LRESULT
HEADER_CreateDragImage
(
HWND
hwnd
,
WPARAM
wParam
)
HEADER_CreateDragImage
(
HWND
hwnd
,
WPARAM
wParam
)
{
{
...
@@ -908,6 +961,55 @@ HEADER_CreateDragImage (HWND hwnd, WPARAM wParam)
...
@@ -908,6 +961,55 @@ HEADER_CreateDragImage (HWND hwnd, WPARAM wParam)
return
(
LRESULT
)
himl
;
return
(
LRESULT
)
himl
;
}
}
static
LRESULT
HEADER_SetHotDivider
(
HWND
hwnd
,
WPARAM
wParam
,
LPARAM
lParam
)
{
HEADER_INFO
*
infoPtr
=
HEADER_GetInfoPtr
(
hwnd
);
INT
iDivider
;
RECT
r
;
if
(
wParam
)
{
POINT
pt
;
UINT
flags
;
pt
.
x
=
(
INT
)(
SHORT
)
LOWORD
(
lParam
);
pt
.
y
=
0
;
HEADER_InternalHitTest
(
hwnd
,
&
pt
,
&
flags
,
&
iDivider
);
if
(
flags
&
HHT_TOLEFT
)
iDivider
=
0
;
else
if
(
flags
&
HHT_NOWHERE
||
flags
&
HHT_TORIGHT
)
iDivider
=
infoPtr
->
uNumItem
;
else
{
HEADER_ITEM
*
lpItem
=
&
infoPtr
->
items
[
iDivider
];
if
(
pt
.
x
>
(
lpItem
->
rect
.
left
+
lpItem
->
rect
.
right
)
/
2
)
iDivider
=
HEADER_NextItem
(
hwnd
,
iDivider
);
}
}
else
iDivider
=
(
INT
)
lParam
;
/* Note; wParam==FALSE, lParam==-1 is valid and is used to clear the hot divider */
if
(
iDivider
<-
1
||
iDivider
>
(
int
)
infoPtr
->
uNumItem
)
return
iDivider
;
if
(
iDivider
!=
infoPtr
->
iHotDivider
)
{
if
(
infoPtr
->
iHotDivider
!=
-
1
)
{
HEADER_GetHotDividerRect
(
hwnd
,
infoPtr
,
&
r
);
InvalidateRect
(
hwnd
,
&
r
,
FALSE
);
}
infoPtr
->
iHotDivider
=
iDivider
;
if
(
iDivider
!=
-
1
)
{
HEADER_GetHotDividerRect
(
hwnd
,
infoPtr
,
&
r
);
InvalidateRect
(
hwnd
,
&
r
,
FALSE
);
}
}
return
iDivider
;
}
static
LRESULT
static
LRESULT
HEADER_DeleteItem
(
HWND
hwnd
,
WPARAM
wParam
)
HEADER_DeleteItem
(
HWND
hwnd
,
WPARAM
wParam
)
...
@@ -1390,6 +1492,7 @@ HEADER_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
...
@@ -1390,6 +1492,7 @@ HEADER_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr
->
iMoveItem
=
0
;
infoPtr
->
iMoveItem
=
0
;
infoPtr
->
himl
=
0
;
infoPtr
->
himl
=
0
;
infoPtr
->
iHotItem
=
-
1
;
infoPtr
->
iHotItem
=
-
1
;
infoPtr
->
iHotDivider
=
-
1
;
infoPtr
->
iMargin
=
3
*
GetSystemMetrics
(
SM_CXEDGE
);
infoPtr
->
iMargin
=
3
*
GetSystemMetrics
(
SM_CXEDGE
);
infoPtr
->
nNotifyFormat
=
infoPtr
->
nNotifyFormat
=
SendMessageW
(
infoPtr
->
hwndNotify
,
WM_NOTIFYFORMAT
,
(
WPARAM
)
hwnd
,
NF_QUERY
);
SendMessageW
(
infoPtr
->
hwndNotify
,
WM_NOTIFYFORMAT
,
(
WPARAM
)
hwnd
,
NF_QUERY
);
...
@@ -1901,7 +2004,8 @@ HEADER_WindowProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
...
@@ -1901,7 +2004,8 @@ HEADER_WindowProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
/* case HDM_SETFILTERCHANGETIMEOUT: */
/* case HDM_SETFILTERCHANGETIMEOUT: */
/* case HDM_SETHOTDIVIDER: */
case
HDM_SETHOTDIVIDER
:
return
HEADER_SetHotDivider
(
hwnd
,
wParam
,
lParam
);
case
HDM_SETIMAGELIST
:
case
HDM_SETIMAGELIST
:
return
HEADER_SetImageList
(
hwnd
,
(
HIMAGELIST
)
lParam
);
return
HEADER_SetImageList
(
hwnd
,
(
HIMAGELIST
)
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