bool getAcadMenuGroup(IAcadMenuGroup **pVal) { IAcadApplication *acadApp = NULL; LPDISPATCH pDisp = NULL; if (!getApplication(&pDisp)) return false; HRESULT hr = S_OK; hr = pDisp->QueryInterface(IID_IAcadApplication, (LPVOID*)&acadApp); if (FAILED(hr)) return false; LPDISPATCH pTempDisp = NULL; IAcadMenuGroups *mnuGrps = NULL; long cnt = 0; //get the menu groups hr = acadApp->get_MenuGroups(&mnuGrps); if (FAILED(hr)) { acadApp->Release(); return false; } mnuGrps->get_Count(&cnt); //get AutoCAD menu group. say it is index 0. IAcadMenuGroup *mnuGrp = NULL; VARIANT vtName; vtName.vt = VT_I4; BSTR grpName; bool found = false ; for (long i=0; i < cnt; i++) { vtName.lVal = i; hr = mnuGrps->Item(vtName, &mnuGrp); if (FAILED(hr)) return false; hr = mnuGrp->get_Name(&grpName); CString cgrpName(grpName); if (cgrpName.CompareNoCase("Acad")==0) { found = true; *pVal = mnuGrp; break; } } acadApp->Release(); return found; }
bool ArxToolBar::GetAcadMenuGroup( IAcadMenuGroup** pVal ) { IAcadApplication* acadApp = NULL; HRESULT hr = S_OK; if( !GetAcadApplication( acadApp ) ) return false; LPDISPATCH pTempDisp = NULL; IAcadMenuGroups* mnuGrps = NULL; long cnt = 0; //得到菜单组集 hr = acadApp->get_MenuGroups( &mnuGrps ); if ( FAILED( hr ) ) { acadApp->Release(); return false; } acadApp->Release(); mnuGrps->get_Count( &cnt ); //得到菜单组 IAcadMenuGroup* mnuGrp = NULL; VARIANT vtName; vtName.vt = VT_I4; BSTR grpName; bool found = false ; for ( long i = 0; i < cnt; i++ ) { vtName.lVal = i; hr = mnuGrps->Item( vtName, &mnuGrp ); if ( FAILED( hr ) ) continue; hr = mnuGrp->get_Name( &grpName ); CString cgrpName( grpName ); SysFreeString( grpName ); if ( cgrpName.CompareNoCase( _T( "ACAD" ) ) == 0 ) { found = true; *pVal = mnuGrp; break; } else { mnuGrp->Release(); } } mnuGrps->Release(); return found; }