第一次接触TrackPopupMenu函数的时候大家可能会发现:编写出来的窗口的动态弹出菜单位置始终不能如愿地显示在正确位置,仔细观察或者查MSDN就知道,TrackPopupMenu函数中的坐标参数是屏幕坐标,而不是我们的窗口相对坐标,因此在使用时我们可能会想到查找当前窗口在屏幕上的坐标来实现窗口坐标与屏幕坐标转换。而有个现存的函数可供我们利用,就是
voidClientToScreen(
LPPOINTlpPoint
)const;
voidClientToScreen(
LPPOINTlpPoint
)const;
有了它,就好办了
CMenuPopMenu;
PopMenu.LoadMenu(IDR_MAINFRAME);
ClientToScreen(&point);
PopMenu.GetSubMenu(3)->TrackPopupMenu(TPM_HORIZONTAL,point.x,point.y,this);
简单地添加一个函数处理,窗口相对坐标到屏幕坐标的转换就轻松搞定。