我在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();
}

解决方案 »

  1.   

    menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,pDC->GetWindow()); pDC是怎么传的? ShowDeleteMenu的调用代码在哪儿?
      

  2.   

    void TTCCanvas::OnRButtonDown(CDC *pDC,UINT nFlags,CPoint point)
    {
    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是同一个
      

  3.   

    消息映射,我只是在类向导中加入到OnCommand函数,但是这个函数根本没有执行,就算把那段弹出代码放到activex上
      

  4.   

    ON_COMMAND(ID-,OnRButtonDown);
    查看代码中有没有类似于上面的语句了。