comctl32/tests: Add tests for BCN_DROPDOWN notification.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Gabriel Ivăncescu 2019-04-03 20:06:31 +03:00 committed by Alexandre Julliard
parent 6fbb64fe67
commit 09bdf5d07d
1 changed files with 49 additions and 0 deletions

View File

@ -186,6 +186,7 @@ static LRESULT WINAPI test_parent_wndproc(HWND hwnd, UINT message, WPARAM wParam
static HDC cd_first_hdc;
struct message msg = { 0 };
NMCUSTOMDRAW *cd = (NMCUSTOMDRAW*)lParam;
NMBCDROPDOWN *bcd = (NMBCDROPDOWN*)lParam;
LRESULT ret;
if (ignore_message( message )) return 0;
@ -252,6 +253,29 @@ static LRESULT WINAPI test_parent_wndproc(HWND hwnd, UINT message, WPARAM wParam
return ret;
}
if (message == WM_NOTIFY && bcd->hdr.code == BCN_DROPDOWN)
{
UINT button = GetWindowLongW(bcd->hdr.hwndFrom, GWL_STYLE) & BS_TYPEMASK;
RECT rc;
GetClientRect(bcd->hdr.hwndFrom, &rc);
ok(bcd->hdr.hwndFrom != NULL, "Received BCN_DROPDOWN with no hwnd attached, wParam %lu id %lu\n",
wParam, bcd->hdr.idFrom);
ok(bcd->hdr.idFrom == wParam, "[%u] Mismatch between wParam (%lu) and idFrom (%lu)\n",
button, wParam, bcd->hdr.idFrom);
ok(EqualRect(&rc, &bcd->rcButton), "[%u] Wrong rcButton, expected %s got %s\n",
button, wine_dbgstr_rect(&rc), wine_dbgstr_rect(&bcd->rcButton));
msg.message = message;
msg.flags = sent|parent|wparam|lparam|id;
msg.wParam = wParam;
msg.lParam = lParam;
msg.id = BCN_DROPDOWN;
add_message(sequences, COMBINED_SEQ_INDEX, &msg);
return 0;
}
if (message == WM_PAINT)
{
PAINTSTRUCT ps;
@ -569,6 +593,20 @@ static const struct message pre_post_pre_post_cd_seq[] =
{ 0 }
};
static const struct message bcn_dropdown_seq[] =
{
{ WM_KEYDOWN, sent|wparam|lparam, VK_DOWN, 0 },
{ BCM_SETDROPDOWNSTATE, sent|wparam|lparam|defwinproc, 1, 0 },
{ WM_NOTIFY, sent|parent|id, 0, 0, BCN_DROPDOWN },
{ BCM_SETDROPDOWNSTATE, sent|wparam|lparam|defwinproc, 0, 0 },
{ WM_KEYUP, sent|wparam|lparam, VK_DOWN, 0xc0000000 },
{ WM_PAINT, sent },
{ WM_DRAWITEM, sent|parent|optional }, /* for owner draw button */
{ WM_PAINT, sent|optional }, /* sometimes sent rarely */
{ WM_DRAWITEM, sent|parent|optional },
{ 0 }
};
static HWND create_button(DWORD style, HWND parent)
{
HMENU menuid = 0;
@ -932,6 +970,17 @@ static void test_button_messages(void)
}
disable_test_cd();
if (!broken(LOBYTE(LOWORD(GetVersion())) < 6)) /* not available pre-Vista */
{
/* Send down arrow key to make the buttons send the drop down notification */
flush_sequences(sequences, NUM_MSG_SEQUENCES);
SendMessageW(hwnd, WM_KEYDOWN, VK_DOWN, 0);
SendMessageW(hwnd, WM_KEYUP, VK_DOWN, 0xc0000000);
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
ok_sequence(sequences, COMBINED_SEQ_INDEX, bcn_dropdown_seq, "BCN_DROPDOWN from the button", FALSE);
}
DestroyWindow(hwnd);
}