[PATCH 1/2] comctl32: Add tests for split buttons.
Shu Yokoyama
yokoyama at graco.c.u-tokyo.ac.jp
Sun Feb 5 18:54:20 CST 2017
On Windows, comctl32.dll version 6 is needed for these button styles.
Signed-off-by: Shu Yokoyama <yokoyama at graco.c.u-tokyo.ac.jp>
---
dlls/comctl32/tests/button.c | 14 ++++++++++++--
include/commctrl.h | 46 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c
index 9977ce1..7f03273 100644
--- a/dlls/comctl32/tests/button.c
+++ b/dlls/comctl32/tests/button.c
@@ -528,6 +528,12 @@ static void test_button_messages(void)
{ BS_OWNERDRAW, DLGC_BUTTON,
setfocus_ownerdraw_seq, killfocus_ownerdraw_seq, setstyle_ownerdraw_seq,
setstate_ownerdraw_seq, clearstate_ownerdraw_seq, setcheck_ignored_seq },
+ { BS_SPLITBUTTON, DLGC_WANTARROWS | DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON,
+ setfocus_seq, killfocus_seq, setstyle_seq,
+ setstate_seq, setstate_seq, setcheck_ignored_seq },
+ { BS_DEFSPLITBUTTON, DLGC_WANTARROWS | DLGC_BUTTON | DLGC_DEFPUSHBUTTON,
+ setfocus_seq, killfocus_seq, setstyle_seq,
+ setstate_seq, setstate_seq, setcheck_ignored_seq },
};
const struct message *seq;
unsigned int i;
@@ -567,7 +573,9 @@ static void test_button_messages(void)
ok(style == button[i].style, "expected style %x got %x\n", button[i].style, style);
dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0);
- ok(dlg_code == button[i].dlg_code, "%u: wrong dlg_code %08x\n", i, dlg_code);
+ ok(dlg_code == button[i].dlg_code
+ || broken(button[i].style>=BS_SPLITBUTTON && dlg_code == 0x2000) /* XP */ ,
+ "%u: wrong dlg_code %08x\n", i, dlg_code);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
@@ -669,7 +677,9 @@ static void test_button_messages(void)
button[i].style == BS_DEFPUSHBUTTON ||
button[i].style == BS_GROUPBOX ||
button[i].style == BS_USERBUTTON ||
- button[i].style == BS_OWNERDRAW)
+ button[i].style == BS_OWNERDRAW ||
+ button[i].style == BS_SPLITBUTTON ||
+ button[i].style == BS_DEFSPLITBUTTON )
{
ok_sequence(sequences, COMBINED_SEQ_INDEX, button[i].setcheck, "BM_SETCHECK on a button", FALSE);
state = SendMessageA(hwnd, BM_GETCHECK, 0, 0);
diff --git a/include/commctrl.h b/include/commctrl.h
index d176b4f..5d30556 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -1042,12 +1042,58 @@ typedef struct tagNMBCHOTITEM
#define BST_HOT 0x0200
+#define BST_DROPDOWNPUSHED 0x0400
+
/* Button control styles for _WIN32_WINNT >= 0x600 */
#define BS_SPLITBUTTON 0x0000000C
#define BS_DEFSPLITBUTTON 0x0000000D
#define BS_COMMANDLINK 0x0000000E
#define BS_DEFCOMMANDLINK 0x0000000F
+typedef struct tagBUTTON_SPLITINFO
+{
+ UINT mask;
+ HIMAGELIST himlGlyph;
+ UINT uSplitStyle;
+ SIZE size;
+} BUTTON_SPLITINFO, *PBUTTON_SPLITINFO;
+
+/* BUTTON_SPLITINFO mask */
+#define BCSIF_GLYPH 0x1
+#define BCSIF_IMAGE 0x2
+#define BCSIF_STYLE 0x4
+#define BCSIF_SIZE 0x8
+
+/* BUTTON_SPLITINFO uSplitStyle */
+#define BCSS_NOSPLIT 0x1
+#define BCSS_STRETCH 0x2
+#define BCSS_ALIGNLEFT 0x4
+#define BCSS_IMAGE 0x8
+
+/* Button control messages */
+#define BCM_FIRST 0x1600
+
+#define BCM_SETDROPDOWNSTATE (BCM_FIRST+6)
+#define BCM_SETSPLITINFO (BCM_FIRST+7)
+#define BCM_GETSPLITINFO (BCM_FIRST+8)
+#define BCM_SETNOTE (BCM_FIRST+9)
+#define BCM_GETNOTE (BCM_FIRST+10)
+#define BCM_GETNOTELENGTH (BCM_FIRST+11)
+
+#define Button_SetDropDownState(hwnd, fDropDown) \
+ (BOOL)SNDMSG((hwnd), BCM_SETDROPDOWNSTATE, (WPARAM)(fDropDown), 0)
+
+
+typedef struct tagNMBCDROPDOWN
+{
+ NMHDR hdr;
+ RECT rcButton;
+} NMBCDROPDOWN, *LPNMBCDROPDOWN;
+
+#define BCN_DROPDOWN (BCN_FIRST+2)
+
+
+
/* Toolbar */
#define TOOLBARCLASSNAMEA "ToolbarWindow32"
--
2.9.3
More information about the wine-patches
mailing list