⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsaddin.cpp

📁 一个统计文件大小和程序信息的插件程序(vc或vc.net下使用)
💻 CPP
字号:
/***************************************************************************/
/* NOTE:                                                                   */
/* This document is copyright (c) by Oz Solomonovich, and is bound by the  */
/* MIT open source license (www.opensource.org/licenses/mit-license.html). */
/* See License.txt for more information.                                   */
/***************************************************************************/

// DSAddIn.cpp : implementation file
//

#include "stdafx.h"

#ifdef TARGET_VC6

#include "LineCount.h"
#include "DSAddIn.h"
#include "Commands.h"
#include "Config.h"
#include "TBAdderWnd.h"

#include "ExtrnSrc\AICLoader.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CDSAddIn *g_pDSAddin = NULL;

// 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)
{
    // must be before the AFX_MANAGE_STATE
    char host_path[1024];
    GetModuleFileName(NULL, host_path, countof(host_path));

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    g_pDSAddin = this;

    // assume the worst
    *OnConnection = VARIANT_FALSE;
    m_pCommands = NULL;

    // Store info passed to us
    IApplication* pApplication = NULL;
    if (FAILED(pApp->QueryInterface(IID_IApplication, (void**) &pApplication))
        || pApplication == NULL)
    {
        return S_OK;
    }

    OnAddinConnect();

    m_pApplication = pApplication;

    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("LCConsole");
    VARIANT_BOOL bRet;
    CString strCmdString;
    strCmdString.LoadString(IDS_CMD_STRING);
    strCmdString = szCommand + strCmdString;
    CComBSTR bszCmdString(strCmdString);
    CComBSTR bszMethod(_T("LC_Console"));
    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.
        return S_OK;
    }
*/

    szCommand = _T("CountLines");
    strCmdString.LoadString(IDS_CMD_STRING2);
    strCmdString = szCommand + strCmdString;
    bszCmdString = strCmdString;
    bszMethod = _T("LC_Go");
    bszCmdName = szCommand;
    VERIFY_OK(pApplication->AddCommand(bszCmdString, bszMethod, 0, 
        m_dwCookie, &bRet));

    if (bFirstTime == VARIANT_FALSE)
    {
        // see if we have a registry setting forcing a first time init
        bFirstTime = VARIANT_TRUE;
        int i = 0;
        CString sHost;
        while (AfxExtractSubString(sHost, cfg_sInitedEnvs, i++))
        {
            if (sHost.CompareNoCase(host_path) == 0)
            {
                bFirstTime = FALSE;
                break;
            }
        }
    }

    // the following is a trick that will allow up to add a toolbar even
    // if bFirstTime is false
    if (bFirstTime == VARIANT_TRUE)
    {
        CTBAdderWnd *pAdder = new CTBAdderWnd();
        pAdder->CreateEx(0, NULL, "", WS_CHILD, CRect(0, 0, 1, 1), 
            CWnd::GetDesktopWindow(), 0);
        pAdder->PostMessage(WM_CLOSE);
        cfg_sInitedEnvs += '\n';
        cfg_sInitedEnvs += host_path;
    }

    *OnConnection = VARIANT_TRUE;
    return S_OK;
}

// This is called on shut-down, and also when the user unloads the add-in
STDMETHODIMP CDSAddIn::OnDisconnection(VARIANT_BOOL bLastTime)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    OnAddinDisconnect();

    if (m_pCommands)
    {
        m_pCommands->Release();
        m_pCommands = NULL;
    }

    return S_OK;
}

void CDSAddIn::AddToolbarCmds() const
{
    LPCTSTR szCommand = _T("CountLines");
    CComBSTR bszCmdName(szCommand);

    VERIFY_OK(m_pApplication->
        AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));
}

#endif // TARGET_VC6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -