我的这段程序,鼠标的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);
}
{
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);
}
解决方案 »
- vc中用serialport类实现串口通信时,连续的发送多次命令后,再次发送数据失败 急!!!!!!!!!!!
- LVN_ENDLABELEDIT的问题
- MFC上传文件多线程的问题
- 关于 CTreeCtrl OwnerDraw 的问题
- vc6.0的调试问题,寻求大家帮助
- cannot instantiate abstract class due to following members:是什么错误??
- visual studio 2003中怎么查看对话框所对应的类
- 主程序为一对话框,对里面的变量进行操作,错,为什么,进来看看吧
- openssl 把数据加密后写到文件又读出来出现问题
- 请教,怎样只通过matrox采集卡采集图像(处理图像用opencv)
- 怎么通过发送消息传递一个结构?
- 请教 如何 处理呢(关于 图标)
GetCursorPos(&pos);
POINT pos;
GetCursorPos(&pos);
ClientToScreen(&pt); // 加上这句
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);
wsprintf(buff,"x is %d",pt.x);
MessageBox(NULL,buff,"",MB_OK);
return 0;
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);
ClientToScreen(&pt); // 加上这句
wsprintf(buff,"x is %d",pt.x);
MessageBox(NULL,buff,"",MB_OK);
return 0;
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;其实我加了ClientToScreen(hwnd,&pt),还是不正确!
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;
{
switch(lParam)
{
case WM_RBUTTONUP:
{
CMenu m_Menu;
if(m_Menu.LoadMenu(IDR_MENU))
{
CMenu* pPop=m_Menu.GetSubMenu(0);
CPoint m_Point;
if(IsWindowVisible())
m_Menu.ModifyMenu(IDC_SHOW,MF_STRING,IDC_SHOW,"隐藏");
else
m_Menu.ModifyMenu(IDC_SHOW,MF_STRING,IDC_SHOW,"显示");
if(bStatus)
{
m_Menu.ModifyMenu(IDC_STATUS,MF_STRING,IDC_STATUS,"禁用");
}
else
{
m_Menu.ModifyMenu(IDC_STATUS,MF_STRING,IDC_STATUS,"启动");
}
GetCursorPos(&m_Point);
SetForegroundWindow();
pPop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,m_Point.x,m_Point.y,this);
}
}
break;
case WM_LBUTTONDOWN:
{
OnShow();
}
break;
}
return 0;
}
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;