SAFEARRAY *pMenuTexts,*pMenuStates;
   SAFEARRAYBOUND rgsabound[1];
   _variant_t vi;   rgsabound[0].lLbound = 0;
   rgsabound[0].cElements = 8;
long lIndex;
      _variant_t MenuItems[8];   pMenuTexts = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
      rgsabound[0].cElements = 4;
   pMenuStates = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
  CString str;
       // Getting primary key information for table "Authors".
   str="¼ôÇÐ";
   MenuItems[0] = str.AllocSysString();
   str= "DoCut";
   MenuItems[1] =str.AllocSysString();
   
   str=   "¸´ÖÆ";
   MenuItems[2] = str.AllocSysString();
   str="DoCopy";
   MenuItems[3] = str.AllocSysString();
   
   str="Õ³Ìù";
   MenuItems[4] = str.AllocSysString();
   str="DoPaste";
   MenuItems[5] = str.AllocSysString();
   
   str="È«Ñ¡";
   MenuItems[6] = str.AllocSysString();
   str="DoSelectAll";
   MenuItems[7] = str.AllocSysString();
      for( lIndex = 0 ; lIndex < 8 ;lIndex++)
        SafeArrayPutElement(pMenuTexts, &lIndex,&MenuItems[lIndex]);
  vi.bVal=0;
      for( lIndex = 0 ; lIndex <4 ;lIndex++)
        SafeArrayPutElement(pMenuStates, &lIndex,&vi);
 
       // Creating a safearray of variants with three elements.
  
    m_WebEdit.SetContextMenu((VARIANT*)pMenuTexts,(VARIANT*)pMenuStates);
   SafeArrayDestroy(pMenuStates);
   SafeArrayDestroy(pMenuTexts);
这样写后,在执行到SetContextMenu 时报错.
于是我又换了种写法:
USES_CONVERSION; VARIANT* pMenuState;
VARIANT* pMenuText; pMenuText  = new VARIANT[7];
pMenuState = new VARIANT[7];
CString strMenuText;
for(int i=0; i<7; i++)
{
strMenuText="DoCut"; (pMenuText + i)->vt = VT_BSTR;
(pMenuText + i)->bstrVal = strMenuText.AllocSysString(); (pMenuState + i)->vt = VT_UI1;
(pMenuState + i)->bVal = 0; strMenuText.Empty();
}
     m_WebEdit.SetContextMenu(pMenuText, pMenuState);

delete []pMenuText;
delete []pMenuState;问题依旧.
请各位大虾帮忙解决~~~
小弟在此感激不尽`~~

解决方案 »

  1.   

    哦,错了说,我是在用CDHtmlEdit 这个控件时,显示数据库里的网页内容里遇到这个问题的.显示倒是没问题,可是我想要有修改的东西.无奈没有例子代码参考.遇到不能显示右键,于是在网上到处找.找了半天,去了下MSDN,也没有详细的介绍.代码就更别提了. 所以没办法只能提问.望各位达人不吝赐教.
      

  2.   

    我不记得见过这个类,MFC里应该没有这个别的库就不好说了
      

  3.   

    CDHtmlEdit 是微软的一个组件.可以修改HTML的组件.你新建一个工程,插入一个控件,就有选这个.
      

  4.   

    我在程序里的代码。
    //始初化右键菜单
    void CTablePage1::_fn_InitMenu(void)
    {
    VARIANT arr;
    arr.vt = VT_ARRAY | VT_BSTR;
    {
    SAFEARRAYBOUND sab[1];
    sab[0].lLbound = 1; 
    sab[0].cElements = 2;
    arr.parray = SafeArrayCreate(VT_I4, 1, sab);
    }

    HRESULT res; // Fill safearray with some values...
    for(int i=1; i<=2; i++) 
    {
    CString  str = _T("右键");
    long ix[1];
    ix[0] = i;
    res = SafeArrayPutElement(arr.parray, ix, (void *)(LPTSTR)&str);
    ASSERT(res == S_OK);
    } VARIANT arr1;
    arr1.vt = VT_ARRAY | VT_I4 ;
    {
    SAFEARRAYBOUND sab[1];
    sab[0].lLbound = 1; 
    sab[0].cElements = 2;
    arr1.parray = SafeArrayCreate(VT_I4, 1, sab);
    } // Fill safearray with some values...
    for(int i=1; i<=2; i++) 
    {
    OLE_TRISTATE state;
    state = triChecked;
    long ix[1];
    ix[0] = i;
    res =SafeArrayPutElement(arr1.parray, ix, (void *)&state);
    ASSERT(res == S_OK);
    }
     
    m_ctrlHtmlEdit.SetContextMenu(&arr, &arr1);
    SafeArrayDestroy(arr.parray);
    SafeArrayDestroy(arr1.parray);
    }