发觉X/Y是以屏幕X/Y的。怎么回事?有什么办法就在ListView区域内弹出菜单?BOOL CClearFileDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if((int)wParam == IDC_LIST_FILE)
{
NMHDR *pnmh = (LPNMHDR)lParam;
if(pnmh->code == NM_RCLICK)
{
NMITEMACTIVATE *nmitem = (LPNMITEMACTIVATE)lParam;
CString str;
CRect rect;
GetDlgItem(IDC_LIST_FILE)->GetWindowRect(rect);
//this->ScreenToClient(rect);
str.Format(TEXT("%d %d"), nmitem->ptAction.x, nmitem->ptAction.y);
CMenu *pSub = m_hMenu.GetSubMenu(0);
pSub->TrackPopupMenu(TPM_LEFTALIGN, nmitem->ptAction.x, nmitem->ptAction.y,GetDlgItem(IDC_LIST_FILE), NULL);
/*MessageBox(str);*/
}
}
return CDialog::OnNotify(wParam, lParam, pResult);
}
{
if((int)wParam == IDC_LIST_FILE)
{
NMHDR *pnmh = (LPNMHDR)lParam;
if(pnmh->code == NM_RCLICK)
{
NMITEMACTIVATE *nmitem = (LPNMITEMACTIVATE)lParam;
CString str;
CRect rect;
GetDlgItem(IDC_LIST_FILE)->GetWindowRect(rect);
//this->ScreenToClient(rect);
str.Format(TEXT("%d %d"), nmitem->ptAction.x, nmitem->ptAction.y);
CMenu *pSub = m_hMenu.GetSubMenu(0);
pSub->TrackPopupMenu(TPM_LEFTALIGN, nmitem->ptAction.x, nmitem->ptAction.y,GetDlgItem(IDC_LIST_FILE), NULL);
/*MessageBox(str);*/
}
}
return CDialog::OnNotify(wParam, lParam, pResult);
}
解决方案 »
- CString和WCHAR数组相加出现了问题,请各位回答一下,谢谢!
- 编程中相对路径疑惑
- 学习过vc基于对话框,基于单文档的相关例子,想学学基于多文档的,哪位给开个窍,最好给些学习资料或可以学习的网址,书籍……不胜感激,临表涕零……
- SDK,新加的ListCtrl如何响应,主窗口的消息
- 如何实现VC左边的Tab页中嵌入TreeView的效果?
- 关于OLE DB Provider for ODBC Drivers??
- 请大家帮忙,谢谢,很急,在线等。
- 坐标转换的问题
- left operand must be l-value
- 如何解决频繁读写导致的磁盘碎片问题?
- 如何在程序一开始运行时,光标就在一edit box中闪烁
- VC使用右键时碰到的奇怪问题
menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTALIGN | TPM_LEFTBUTTON, point.x, point.y, this );
HMENU refresh_copyMenu;
void show_my_menu(HWND handle) {
HMENU mmainmenuu = refresh_copyMenu = CreatePopupMenu();
POINT pi;
GetCursorPos( &pi );
MENUITEMINFO mi;
mi.cbSize = sizeof( MENUITEMINFO );
mi.fMask = MIIM_TYPE | MFT_STRING ;//| MIIM_SUBMENU;
mi.fType = MFT_STRING;
mi.dwTypeData = "我的菜单";
AppendMenu(mmainmenuu, MF_STRING , (int)mi.dwTypeData, mi.dwTypeData);
char* rtgp = (char*)TrackPopupMenu( refresh_copyMenu, TPM_RETURNCMD ,
pi.x, pi.y, 0, handle, NULL );
if(rtgp != 0){
if(strcmp( "我的菜单", rtgp ) == 0){
//菜单被点击了,你想干什么
}
}
}然后在 NOTIFY消息里 执行 show_my_menu(hDlg)就ok
POINT curPos;
GetCursorPos(&curPos); //得到鼠标(屏幕)坐标
POINT ClientPos=curPos;
ScreenToClient(&ClientPos);//转换为鼠标(客户)坐标