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;问题依旧.
请各位大虾帮忙解决~~~
小弟在此感激不尽`~~
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;问题依旧.
请各位大虾帮忙解决~~~
小弟在此感激不尽`~~
//始初化右键菜单
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);
}