我在MFC扩展DLL中导出整个类TTCCanvas,在这个类中需要在右键动态创建菜单,可是创建的菜单是灰色的,
我用MFC写的DEMO程序响应ON_COMMAND后菜单式可用的。现在把DEMO程序换成ACTIVEX控件后,菜单式灰色的,我同样做了
ON_COMMAND处理.BOOL xxxxxCtrl::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class //add by thexin chan 2009-06-18
//图层菜单处理
if(m_canvas.OnCommand(wParam,lParam)){
InvalidateRect(NULL,TRUE);
}
return COleControl::OnCommand(wParam, lParam);
}
在DLL中:BOOL TTCCanvas::OnCommand(WPARAM wParam, LPARAM lParam)
{
int menuID = 0;
menuID = LOWORD(wParam);
if(menuID == IDM_DELETE_GRAPH){
//删除当前选择的图形
//FIXME:确保当前选择的图形是右键单击时候停留的图形
RemoveCurGraph(); return TRUE;
}
return FALSE;
}//显示右键删除菜单
void TTCCanvas::ShowDeleteMenu(CDC *pDC)
{
if(!pDC)
return ; CMenu menu;
CPoint pt;
::GetCursorPos(&pt);
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,IDM_DELETE_GRAPH,_T("Delete Measure"));
menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,pDC->GetWindow());
menu.DestroyMenu();
}
我用MFC写的DEMO程序响应ON_COMMAND后菜单式可用的。现在把DEMO程序换成ACTIVEX控件后,菜单式灰色的,我同样做了
ON_COMMAND处理.BOOL xxxxxCtrl::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class //add by thexin chan 2009-06-18
//图层菜单处理
if(m_canvas.OnCommand(wParam,lParam)){
InvalidateRect(NULL,TRUE);
}
return COleControl::OnCommand(wParam, lParam);
}
在DLL中:BOOL TTCCanvas::OnCommand(WPARAM wParam, LPARAM lParam)
{
int menuID = 0;
menuID = LOWORD(wParam);
if(menuID == IDM_DELETE_GRAPH){
//删除当前选择的图形
//FIXME:确保当前选择的图形是右键单击时候停留的图形
RemoveCurGraph(); return TRUE;
}
return FALSE;
}//显示右键删除菜单
void TTCCanvas::ShowDeleteMenu(CDC *pDC)
{
if(!pDC)
return ; CMenu menu;
CPoint pt;
::GetCursorPos(&pt);
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,IDM_DELETE_GRAPH,_T("Delete Measure"));
menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,pDC->GetWindow());
menu.DestroyMenu();
}
{
TTCGraph *graph = NULL;
graph = GetCurGraph();
if(graph != NULL){
graph->OnRButtonDown(pDC,nFlags,point);
} //如果这时候HIT了图形,右键需要弹出菜单删除图形
TTCGraph *hitgraph = NULL;
hitgraph = HitTest(point); if(hitgraph != NULL){//鼠标停留在一个图形山
//选择当前停留的图形
SelectGraph(hitgraph);
//重新选择后需要重新绘图形
this->InvalidRect(pDC);
//弹出删除菜单
//FIXME:不知道为什么会在DEPHI调用中造成可以在控件窗口外也可以新建图形!
//ShowDeleteMenu(pDC);
}
}
我把弹出的代码放到CWxxCtrl中的OnRButton上也不行。
在这里我测试了this指针和pDC->GetWindow是同一个
查看代码中有没有类似于上面的语句了。