// This is called when the user first loads the add-in, and on start-up // of each subsequent Developer Studio session STDMETHODIMP CDSAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwCookie, VARIANT_BOOL* OnConnection) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // Store info passed to us IApplication* pApplication = NULL; if (FAILED(pApp->QueryInterface(IID_IApplication, (void**) &pApplication)) || pApplication == NULL) { *OnConnection = VARIANT_FALSE; return S_OK; } m_dwCookie = dwCookie; // Create command dispatch, send info back to DevStudio CCommandsObj::CreateInstance(&m_pCommands); m_pCommands->AddRef(); // The QueryInterface above AddRef'd the Application object. It will // be Release'd in CCommand's destructor. m_pCommands->SetApplicationObject(pApplication); // (see stdafx.h for the definition of VERIFY_OK) VERIFY_OK(pApplication->SetAddInInfo((long) AfxGetInstanceHandle(), (LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE, m_dwCookie)); // Inform DevStudio of the commands we implement // TODO: Replace the AddCommand call below with a series of calls, // one for each command your add-in will add. // The command name should not be localized to other languages. The // tooltip, command description, and other strings related to this // command are stored in the string table (IDS_CMD_STRING) and should // be localized. LPCTSTR szCommand = _T("ShowGroupsAddinCommand"); VARIANT_BOOL bRet; CString strCmdString; strCmdString.LoadString(IDS_CMD_STRING); strCmdString = szCommand + strCmdString; CComBSTR bszCmdString(strCmdString); CComBSTR bszMethod(_T("ShowGroupsAddinCommandMethod")); CComBSTR bszCmdName(szCommand); VERIFY_OK(pApplication->AddCommand(bszCmdString, bszMethod, 0, m_dwCookie, &bRet)); if (bRet == VARIANT_FALSE) { // AddCommand failed because a command with this name already // exists. You may try adding your command under a different name. // Or, you can fail to load as we will do here. *OnConnection = VARIANT_FALSE; return S_OK; } // Add toolbar buttons only if this is the first time the add-in // is being loaded. Toolbar buttons are automatically remembered // by Developer Studio from session to session, so we should only // add the toolbar buttons once. if (bFirstTime == VARIANT_TRUE) { VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie)); } // Create the WWhizInterface. g_wwhizInterface = WWhizInterface2Create(AfxGetInstanceHandle(), pApplication); *OnConnection = VARIANT_TRUE; return S_OK; }
// Dieser Code wird beim ersten Laden des Add-Ins und beim Starten der Anwendung aufgerufen // jeder nachfolgenden Developer Studio-Sitzung STDMETHODIMP CDSAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwCookie, VARIANT_BOOL* OnConnection) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // An uns übergebene Info speichern IApplication* pApplication = NULL; if (FAILED(pApp->QueryInterface(IID_IApplication, (void**) &pApplication)) || pApplication == NULL) { *OnConnection = VARIANT_FALSE; return S_OK; } m_dwCookie = dwCookie; // Befehlsverteilung erzeugen, Rückmeldung an DevStudio CCommandsObj::CreateInstance(&m_pCommands); m_pCommands->AddRef(); // Das obige QueryInterface hat AddRef auf das Objekt Application angewendet. Es // wird im Destruktor von CCommand freigegeben. m_pCommands->SetApplicationObject(pApplication); // (siehe Definition von VERIFY_OK in stdafx.h) VERIFY_OK(pApplication->SetAddInInfo((long) AfxGetInstanceHandle(), (LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE, m_dwCookie)); // DevStudio über die implementierten Befehle informieren VARIANT_BOOL bRet; CString strCmdString; LPCTSTR szNewQtProject = _T("New Qt Project"); strCmdString.LoadString(IDS_NEWQTPROJECT_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szNewQtProject + strCmdString), CComBSTR(_T("QMsDevNewQtProject")), 0, m_dwCookie, &bRet)); #if 1 LPCTSTR szGenerateQtProject = _T("Generate Qt Project"); strCmdString.LoadString(IDS_GENERATEQTPROJECT_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szGenerateQtProject + strCmdString), CComBSTR(_T("QMsDevGenerateQtProject")), 1, m_dwCookie, &bRet)); #endif LPCTSTR szNewQtDialog = _T("New Qt Dialog"); strCmdString.LoadString(IDS_NEWQTDIALOG_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szNewQtDialog + strCmdString), CComBSTR(_T("QMsDevNewQtDialog")), 2, m_dwCookie, &bRet)); LPCTSTR szOpenDesigner = _T("Open Qt GUI Designer"); strCmdString.LoadString(IDS_OPENDESIGNER_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szOpenDesigner + strCmdString), CComBSTR(_T("QMsDevStartDesigner")), 3, m_dwCookie, &bRet)); LPCTSTR szUseQt = _T("Use Qt"); strCmdString.LoadString(IDS_USEQT_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szUseQt + strCmdString), CComBSTR(_T("QMsDevUseQt")), 4, m_dwCookie, &bRet)); LPCTSTR szAddMOCStep = _T("Add MOC step"); strCmdString.LoadString(IDS_ADDMOCSTEP_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szAddMOCStep + strCmdString), CComBSTR(_T("QMsDevAddMOCStep")), 5, m_dwCookie, &bRet)); LPCTSTR szAddUICStep = _T("Add UIC step"); strCmdString.LoadString(IDS_ADDUICSTEP_STRING); VERIFY_OK(pApplication->AddCommand(CComBSTR(szAddUICStep + strCmdString), CComBSTR(_T("QMsDevAddUICStep")), 6, m_dwCookie, &bRet)); if (bRet == VARIANT_FALSE) { *OnConnection = VARIANT_FALSE; return S_OK; } if (bFirstTime == VARIANT_TRUE) { VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szNewQtProject), m_dwCookie)); #if 1 VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szGenerateQtProject), m_dwCookie)); #endif VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szNewQtDialog), m_dwCookie)); VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szOpenDesigner), m_dwCookie)); VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szUseQt), m_dwCookie)); VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szAddMOCStep), m_dwCookie)); VERIFY_OK(pApplication-> AddCommandBarButton(dsGlyph, CComBSTR(szAddUICStep), m_dwCookie)); } *OnConnection = VARIANT_TRUE; return S_OK; }