September 23rd, 2004

How to host an IContextMenu, part 3 – Invocation location

One of the bugs you may have noticed in our first attempt at displaying the context menu to the user is that the Properties dialog doesn’t show up at the point you clicked. The Properties dialog isn’t psychic; it doesn’t know where the original mouse click occurred. You have to tell it.

          CMINVOKECOMMANDINFOEX info = { 0 };
          info.cbSize = sizeof(info);
          info.fMask = CMIC_MASK_UNICODE | CMIC_MASK_PTINVOKE;
          info.hwnd = hwnd;
          info.lpVerb  = MAKEINTRESOURCEA(iCmd – SCRATCH_QCM_FIRST);
          info.lpVerbW = MAKEINTRESOURCEW(iCmd – SCRATCH_QCM_FIRST);
          info.nShow = SW_SHOWNORMAL;
          info.ptInvoke = pt;

You tell it by setting the CMIC_MASK_PTINVOKE flag in the fMask and specifying the invocation point in the ptInvoke member of the CMINVOKECOMMANDINFOEX structure.

Make this change and observe that now the Properties dialog appears at the point you clicked the mouse rather than in a random location on the screen.

Next time, we’ll clean up another minor problem with our sample program.

Topics
Code

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

0 comments

Discussion are closed.