We help IT Professionals succeed at work.

Taskbar icon and popup menu coordinates

trof
trof asked
on
350 Views
Last Modified: 2013-12-03
My App added icon to the TaskBar by Shell_NotifyIcon and receiving notifycations about mouse events...Now I want to bring up popup menu after right button click. But how should I know proper coordinates for the menu ? How I can obtain coordinates of icon or coordinates of mouse pointer during this event ?
Thanks in advance.
Comment
Watch Question

Author

Commented:
Sorry for bothering you, I already know the answer - of cause GetCursorPos() .
Thanks anyway

Commented:
Trof, this is not so trivial as you may think.  Due to a bug on certain builds of Win95, you have do something like the following:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        // Tray icon notification message
        case MYWM_NOTIFYICON:
            // Button event is single click?
            if (lParam == WM_LBUTTONDOWN || lParam == WM_RBUTTONDOWN)
            {
                POINT   pos;

                // Show and process menu
                // SetForegroundWindow() and PostMessage() used to circumvent a Win95 bug
                GetCursorPos(&pos);
                SetForegroundWindow(hwnd);
                TrackPopupMenuEx(GetSubMenu(GetMenu(hwnd), 0), TPM_HORIZONTAL, pos.x, pos.y, hwnd, NULL);
                PostMessage(hwnd, WM_NULL, 0, 0);
            }

            break;

        // Other cases...

        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }

    return 0;
}

If you think this constitutes an answer, please say so.  Otherwise, ignore me.

Commented:
Alexo, What kind of bug? Looking to your code I see normal behaviour - nothing that looks like a workaround

Commented:
What alexo refers to is the following KB article.

PRB: Menus for Notification Icons Don't Work Correctly
http://support.microsoft.com/support/kb/articles/q135/7/88.asp

Commented:
They say this "behavior is by design".  From now on, that's what I'm going to tell my customers about my bugs.

Commented:
I'm talking about the two lines surrounding the TrackPopupMenuEx() :
  ---> SetForegroundWindow(hwnd);
  ---> PostMessage(hwnd, WM_NULL, 0, 0);

See the KB article (at the URL chensu provided) for details.

Commented:
Thanks for the information
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Commented:
Some people got absolutely no shame!

Author

Commented:
Eyh, right.. :(

Commented:
8-(   ???

Commented:
>> Eyh, right.. :(
So why did you accept that answer?

Author

Commented:
Because I found GetCursorPos by myself, but answer from BudVVeezer was here before I posted comment "Sorry for bothering "...
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.