托盘程序问题,如何获得当前鼠标的屏幕坐标?

cchon cchon 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的这段程序,鼠标的x坐标取的好象不对!

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
static HINSTANCE hInstance;
static HMENU popMenu,hMenu;
static POINT pt;
char buff[50];

switch(msg)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_TRAY_MENU));
popMenu=GetSubMenu(hMenu,0);
return 0;
case WM_COMMAND:

switch(LOWORD(wParam))
{
case IDM_ABOUT_DIALOG:
DialogBox (hInstance, MAKEINTRESOURCE(IDD_TESTTRAY_DIALOG), hwnd, AboutDlgProc) ;
return 0;
case IDM_EXIT:
SendMessage(hwnd,WM_DESTROY,0,0);
return 0;
}
return 0;
case WM_LBUTTONDOWN:
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);
wsprintf(buff,"x is %d",pt.x);
MessageBox(NULL,buff,"",MB_OK);
return 0;

case WM_SIZE:
if(wParam==SIZE_MINIMIZED)
{
myTray.hWnd=hwnd; //把当前窗口加到SysTray
myTray.AddIcon();
ShowWindow(hwnd,SW_HIDE);
}
return 0;

case TRAY_NOTIFYICON: //NOTIFYICONDATA.uCallbackMessage
switch(lParam)
{
case WM_RBUTTONDOWN:
pt.x=LOWORD(lParam);
//pt.y=HIWORD(lParam);
ClientToScreen(hwnd,&pt);
/*这一句:menu 没有显示在鼠标的当前位置*/
TrackPopupMenu(popMenu, TPM_RIGHTALIGN|TPM_LEFTBUTTON, pt.x, GetSystemMetrics(SM_CYSCREEN)-50, 0, hwnd, NULL) ;
return 0;
case WM_LBUTTONDBLCLK:
myTray.DeleteIcon();
ShowWindow(hwnd,SW_SHOW);
return 0;
}
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
cchon
VC/MFC 16,550 成员 421,606 内容