How to host an IContextMenu, part 3 – Invocation location

Raymond Chen

Raymond


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.

Raymond Chen
Raymond Chen

Follow Raymond   

0 comments

Comments are closed.