我在自己编写的测试程序中,正确使用了TrackPopupMenu函数,但我移植到一个修改后的程序中去
报如下错误:
error C2664: 'TrackPopupMenu' : cannot convert parameter 4 from 'class CDanUserZhangResult *const ' to 'class CWnd *'
由于我是修改别人的程序,该程序做了一点小加密,因此我不知道它的基类。
该函数如下:
void CDanUserZhangResult::OnContextMenu(CWnd* pWnd, CPoint point) 
{
// TODO: Add your message handler code here
CMenu menuPopup; if(menuPopup.CreatePopupMenu())
{
menuPopup.AppendMenu(MF_STRING,ID_MENU_RED,"&Red");
menuPopup.InsertMenu(0,MF_BYPOSITION|MF_STRING,
                 ID_MENU_GREEN,"&Green");
menuPopup.AppendMenu(MF_SEPARATOR);
menuPopup.AppendMenu(MF_STRING|MF_CHECKED,
                 ID_MENU_BLUE,"&Blue");
menuPopup.AppendMenu(MF_STRING|MF_MENUBARBREAK,
                 ID_MENU_YELLOW,"&Yellow");
menuPopup.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
}
}

解决方案 »

  1.   

    CWnd *p = dynamic_cast<CWnd*>this;
    用p代替this;
      

  2.   

    CDanUserZhangResult 是继承了 CWnd 的类吗?如果不是就找父窗口类的指针代替 this
      

  3.   

    我添加如下转换语句:
    CWnd *p = (CDanUserZhangResult *) this;
    但系统报:
    cannot convert from 'class CDanUserZhangResult *' to 'class CWnd *'
    我估计CDanUserZhangResult的基类可能不是CVIEW类。
    请问应如何解决。
      

  4.   

    我查过了,CDanUserZhangResul继承于CCmdTarget类,如何实现TrackPopupMenu功能呢?还是
    CCmdTarget类无法实现TrackPopupMenu功能?
      

  5.   

    我解决了这个问题,在另一个类文件中实现了弹出式菜单,该类继承于CListView.谢谢各位。