[PATCH] Add test case to user32 winetests for edit control contextmenu.

Dmitry Timoshkov dmitry at codeweavers.com
Mon Oct 5 02:17:58 CDT 2009


"Michael Martin" <martinmnet at hotmail.com> wrote:

> +WNDPROC editWndProc;

Should be static.

> +static INT_PTR CALLBACK edit_control_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)

INT_PTR is wrong return type for a window proc.

> +{
> +    static int timerCount = 0;
> +    HGLOBAL cbData;
> +    LPTSTR lptStrCopy;
> +    LPARAM mousePos;
> +    HWND findHwnd;
> +    RECT winRect;
> +
> +    ok(msg != WM_COMMAND, "Should not have received WM_COMMAND\n");
> +
> +    switch(msg)
> +    {
> +        case WM_TIMER:
> +            switch(timerCount)
> +            {
> +                case 0:
> +                    /* Copy some data to clipboard */
> +                    cbData = GlobalAlloc(GMEM_MOVEABLE, 5);
> +                    lptStrCopy = (TCHAR*)GlobalLock(cbData);
> +                    memcpy(lptStrCopy, "test", 4);
> +                    OpenClipboard(hwnd);
> +                    SetClipboardData(CF_TEXT, cbData);
> +                    CloseClipboard();

TCHAR should be never used in Wine. String above is not 0 terminated.
A comment explaining that you want to enable some menu item would be
helpful as well.

> +
> +                    /* Move mouse to upper left of text control */
> +                    GetWindowRect(hwnd, &winRect);
> +                    SetCursorPos(winRect.left, winRect.top);
> +                    mousePos = MAKELPARAM(winRect.left + 20, winRect.top + 20);
> +                    /* Show the Context Menu */
> +                    PostMessage(hwnd, WM_CONTEXTMENU, (WPARAM)hwnd, mousePos);
> +                    break;
> +                case 1:
> +                case 2:
> +                case 3:
> +                case 4:
> +                    /* Find the menu window and send keydown */
> +                    findHwnd = FindWindowEx(NULL, NULL, MAKEINTATOM(0x8000), NULL);
> +                    PostMessage(findHwnd, WM_KEYDOWN, VK_DOWN,0);
> +                    break;
> +                case 5:
> +                    /* Find the menu window and send return, selecting the menu item */
> +                    findHwnd = FindWindowEx(NULL, NULL, MAKEINTATOM(0x8000), NULL);
> +                    PostMessage(findHwnd, WM_KEYDOWN, VK_RETURN,0);
> +                    break;

You should use the menu notification messages instead of FindWindowEx above.

> +    editWndProc = (WNDPROC)SetWindowLong(hwEdit, GWL_WNDPROC,(LONG)edit_control_wndproc);

SetWindowLongPtr() should be used here with appropriate GWLP_ value.

If the test doesn't pass under Wine you sould use todo_wine().

-- 
Dmitry.



More information about the wine-devel mailing list