亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctaddin.cpp

?? VC開發工具使用技巧源代碼_CodeTmplExSrc。
?? CPP
字號:
/////////////////////////////////////////////////////////////////////////////
//
//                           Public Domain.
//
/////////////////////////////////////////////////////////////////////////////
//
//
//  File     :   CTAddIn.cpp
//
//  Author   :   Darren Richards (darrenr@gissing-consulting.co.uk)
//
//  Date     :   20th March 98
//
//  Synopsis :   Implementation of CTAddIn object - where it all happens.
//
////////////////

/////////////////////////////////////////////////////////////////////////////
//
//  includes
//
///////////////

#include "stdafx.h"
#include "comdef.h"
#include "CodeTmpl.h"
#include "CTAddIn.h"
#include "PopMenu.h"

/////////////////////////////////////////////////////////////////////////////
//
//  TemplateData comparitors - just to keep STL happy
//
///////////////

bool operator==(TemplateData t1, TemplateData t2)
{
    return true;
}

bool operator<(TemplateData t1, TemplateData t2)
{
    return true;
}

/////////////////////////////////////////////////////////////////////////////
//
//  CCTAddIn implmentaion
//
///////////////

HRESULT CCTAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwAddInID, VARIANT_BOOL* bOnConnection)
{
	HRESULT hr      = S_OK;
	m_spApplication = pApp;
	m_dwAddInID     = dwAddInID;

    //
    //  tell devstudio about ourselves
    //

	hr = pApp->SetAddInInfo((long)_Module.GetModuleInstance(), 
		                    static_cast<ICTAddIn*>(this),
                            IDB_TOOLBAR_MEDIUM_CTADDIN,
                            IDB_TOOLBAR_LARGE_CTADDIN,
                            dwAddInID);
    //
    //  add our commands to developer studio
    //

	VARIANT_BOOL bRet;

	if (SUCCEEDED(hr))
	{
		hr = pApp->AddCommand(CComBSTR(_T("CTInsCodeTmpl\nInsert Code Template\nInsert Code Template\nInsert Code Template")),
                              CComBSTR(_T("CTInsCodeTmpl")), 0, dwAddInID, &bRet);
	}

    //
    //  first time round we also wire up our toolbar
    //

	if (bFirstTime)
	{
		if (SUCCEEDED(hr))
		{
			hr = pApp->AddCommandBarButton(dsGlyph, CComBSTR(_T("CTInsCodeTmpl")), dwAddInID);
		}
	}

    //
    //  read in the template definitions from our magic text file
    //

    try
    {
        ReadTmplFile();
    }

    catch(...)
    {
        ATLTRACE("Bang : ReadTmplFile() failed in OnConnection.\r\n");
    }

	*bOnConnection = SUCCEEDED(hr) ? VARIANT_TRUE :VARIANT_FALSE;
	return hr;
}

HRESULT CCTAddIn::OnDisconnection(VARIANT_BOOL bLastTime)
{
	return S_OK;
}

HRESULT CCTAddIn::CTInsCodeTmpl()
{
    try
    {
        //
        //  if the user is pressing control whilst clicking the toolbar 
        //  button then we refresh things by re-reading our template file
        //
		BOOL bCtrlPressed = ((UINT)GetAsyncKeyState(VK_CONTROL) > 1);

        if ( bCtrlPressed )
            ReadTmplFile();

        //
        //  get the mouse position so we can put the menu up next to our toolbar button
        //

        POINT pt;
        GetCursorPos(&pt);

        //
        //  create our popup menu, and populate it from our template data
        //

        CPopupMenu mnu(pt);

        VecTemplateDataIter it = m_vecTemplateData.begin();

        int nId = 1;

        while (it != m_vecTemplateData.end())
        {
            if (it->strName.length())
                mnu.AddItem(nId, it->strName.c_str());
            else
                mnu.AddSeparator();

            nId++;
            it++;
        }


		//////////////////////////////////////////////////
		//  Boris Kobilkovsky (boriskob@netvision.net.il)
		//  Date     :   October,10 98
		//
		//  Here the improvement is coming in action
		//////////////////////////////////////////////////

		// reserve a menu id for Open command
		int nOpenTemplId = nId;

        //
        //  if the user is pressing Control while clicking the toolbar 
        //  button then we add an Open command for our template file
        //
		if ( bCtrlPressed )
		{
			//
			//  add Open command
			//
			mnu.AddSeparator();
			mnu.AddItem(nOpenTemplId, "Open CodeTempl.txt");
		}

        //
        //  display our popup menu (modally)
        //

        nId = mnu.TrackPopup();

		// well the user hit Open command
		if ( nId == nOpenTemplId )
		{
			// contruct a full path to CodeTmpl.txt
			//
		    string strMSDevDir = getenv("MSDevDir");
		    string strTmplFile = strMSDevDir + "\\CodeTmpl.txt";


			// do some COM stuff to get the Documents collection
			//
			CComPtr<IDispatch> pDispDocs;
			m_spApplication->get_Documents(&pDispDocs);

            CComQIPtr<IDocuments,&IID_IDocuments> spDocuments(pDispDocs); 


			// open CodeTmpl.txt in Visual Studio
			//
			CComPtr<IDispatch> spDispTemplDoc;
			spDocuments->Open( _bstr_t(strTmplFile.c_str()),
				CComVariant("Text"),CComVariant(FALSE),&spDispTemplDoc);

			// get the new document and set the language to C++.
			//
			CComQIPtr<ITextDocument,&IID_ITextDocument> spTemplDoc(spDispTemplDoc); 
			spTemplDoc->put_Language(_bstr_t(DS_CPP));

			//
			// now it is ready for editing ...
			//

			// fool the rest of the code - fake pressing ESC
			//
			nId = -1;

		}

		//  end of code inserted by:
		//		Boris Kobilkovsky (boriskob@netvision.net.il)
		/////////////////////////////////////////////////////



        //
        //  if user selected something we insert the template text...
        //

        if (nId > 0)
        {
            CComPtr<IDispatch> spDispTextSel;
            CComPtr<IDispatch> spDispActDoc;

            //
            //  retrieve our references to the editor components  
            //

            m_spApplication->get_ActiveDocument(&spDispActDoc);

            if (spDispActDoc == NULL)
                return S_OK;

            CComQIPtr<ITextDocument,&IID_ITextDocument> spActDoc(spDispActDoc); 

            spActDoc->get_Selection(&spDispTextSel);

            if (spDispTextSel == NULL)
                return S_OK;

            CComQIPtr<ITextSelection,&IID_ITextSelection> spTextSel(spDispTextSel);

            //
            //  remember our starting cursor location
            //

            long lStartLine;
            long lStartColumn;

            spTextSel->get_CurrentLine(&lStartLine);
            spTextSel->get_CurrentColumn(&lStartColumn);

            //
            //  glue the template text into the editor, remember nId is 1-relative
            //

            spTextSel->put_Text(CComBSTR(m_vecTemplateData[nId-1].strText.c_str()));

            //
            //  retrieve the cursor position of where we ended up
            //

            long lEndLine;
            long lEndColumn;

            spTextSel->get_CurrentLine(&lEndLine);
            spTextSel->get_CurrentColumn( &lEndColumn );

            //
            //  hilight the stuff we entered, and smart format it
            //  (primarily 'cos devstudio makes a bit of a mess of it,
            //   if we don't)
            //

            spTextSel->MoveTo(lStartLine, 1, CComVariant(dsMove));
            spTextSel->MoveTo(lEndLine, 1, CComVariant(dsExtend));
            spTextSel->SmartFormat();

            //
            //  restore cursor back to end position
            //

            spTextSel->MoveTo(lEndLine, lEndColumn, CComVariant(dsMove));
        }
    }

    catch(...)
    {
        ATLTRACE("Bang : CTInsCodeTmpl failed.\r\n");
    }

    return S_OK;
}
 
void CCTAddIn::ReadTmplFile()
{
    TemplateData td; // buffer for current template

    enum { PS_Tag, PS_Template } eState = PS_Tag; // parsing state

    //
    //  compose the path for the code template file, which
    //  lives in the SharedIDE directory of devstudio. This is
    //  pointed to by the MS provided environment variable
    //  MSDevDir.
    //

    string strMSDevDir = getenv("MSDevDir");
    string strTmplFile = strMSDevDir + "\\CodeTmpl.txt";

    //
    //  ensure our current template data is cleared down first, so
    //  that we can refresh things on the fly
    //

    m_vecTemplateData.erase(m_vecTemplateData.begin(), m_vecTemplateData.end());

    //
    //  open our template data file...
    //

    ifstream ifs(strTmplFile.c_str());

    //
    //  ...and whilst we still got some left...
    //

    while (ifs)
    {
        char szLine[200] = "\0";

        //
        //  ...pull in the next line
        //

        ifs.getline(szLine, sizeof(szLine));
        string strLine = szLine;

        //
        //  handle it according to parsing state (PS_Tag or PS_Template),
        //  we are either looking for the openning #{ tag or reading
        //  template text for the current template and looking for the
        //  closing #} which terminates a template definition
        //

        if (eState == PS_Tag)
        {
            //
            //  does this line look like an openning #{ tag...
            //

            if (strLine.length() > 2 && strLine.substr(0, 2) == "#{" )
            {
                //
                //  ...yep, grab the template name which immediately follows
                //  the #{ tag, and switch to PS_Template state.
                //

                td.strName = strLine.substr(2);
                td.strText = "";
                eState = PS_Template;
            } 

            //
            //  a pair (or more) of hashes inserts a separator on the popup menu
            //

            else if (strLine.length() > 2 && strLine.substr(0, 2) == "##" )
            {
                td.strName = "";
                td.strText = "";
                m_vecTemplateData.push_back(td);
            }

            // ignore all other rubbish !
        }

        else 
        {
            //
            //  does this line look like a closing #} tag...
            //

            if (strLine.length() >= 2 && strLine.substr(0, 2) == "#}" ) 
            {
                //
                //  ...yep, push current template data into vector, and
                //  switch to PS_Tag state
                //

                m_vecTemplateData.push_back(td);
                eState = PS_Tag;
            }

            else
            {
                //
                //  ...nope, just append the line to our current template definition
                //

                td.strText += strLine;
                td.strText += "\r\n";
            } 

        } // if (eState == PS_Tag)

    } // while (ifs)
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草国产成人av片免费| 91亚洲精品一区二区乱码| 欧美日韩在线电影| 丝瓜av网站精品一区二区| 91精品国产综合久久久蜜臀粉嫩| 亚洲高清一区二区三区| 在线综合视频播放| 麻豆免费精品视频| 国产欧美日韩精品在线| 一本久久a久久免费精品不卡| 亚洲一区二区三区中文字幕| 日韩视频在线一区二区| 国产精品夜夜嗨| 一区二区三区四区激情 | 天堂一区二区在线免费观看| 91精品视频网| 国产成人在线视频网站| 一区二区在线免费观看| 欧美美女直播网站| 成人在线视频首页| 亚洲大片精品永久免费| 精品粉嫩aⅴ一区二区三区四区| 成人教育av在线| 午夜伊人狠狠久久| 国产日产亚洲精品系列| 精品视频一区二区三区免费| 乱一区二区av| 一区二区三区国产豹纹内裤在线 | 日韩欧美成人午夜| 亚洲狠狠爱一区二区三区| 国产suv精品一区二区三区| 欧美一区二区日韩| 免费在线成人网| 91久久免费观看| 国产精品久久久久婷婷二区次| 偷窥少妇高潮呻吟av久久免费| 懂色av噜噜一区二区三区av| 精品国产一区二区三区久久影院| 一区av在线播放| 色八戒一区二区三区| 综合在线观看色| 欧美久久久久免费| 成人h动漫精品一区二区| 日本视频一区二区| 亚洲精品高清在线| 久久久久久免费毛片精品| 91成人国产精品| 成人国产精品免费网站| 老司机精品视频线观看86| 亚洲一区二区四区蜜桃| 中文字幕精品三区| 欧美精品一区二区三| 欧美肥妇毛茸茸| 色婷婷综合久久久久中文一区二区| 国产精品99久久不卡二区| 蜜臀久久99精品久久久久宅男 | 亚洲成精国产精品女| 亚洲国产精品成人综合| 欧美成人三级在线| 欧美日韩视频在线观看一区二区三区| 波多野结衣亚洲一区| 国产麻豆日韩欧美久久| 青娱乐精品视频在线| 偷拍一区二区三区四区| 亚洲午夜免费视频| 亚洲黄色性网站| 亚洲欧美日韩中文字幕一区二区三区| 日本一区二区三区四区 | 欧美一级高清片| 欧美三级蜜桃2在线观看| 91丨九色丨国产丨porny| 成人综合婷婷国产精品久久| 国产福利一区在线| 国产毛片一区二区| 国产成人免费网站| 国产黄色精品网站| 国产福利91精品一区| 国产精品亚洲人在线观看| 精品一区二区三区视频在线观看| 美国十次了思思久久精品导航| 欧美a级一区二区| 麻豆久久久久久久| 国产精品一卡二| 高清国产一区二区| av毛片久久久久**hd| 91免费观看视频| 在线亚洲高清视频| 欧美日韩一区三区| 日韩一区二区在线看| 日韩欧美国产一区在线观看| 久久午夜羞羞影院免费观看| 久久久国产精品午夜一区ai换脸| 久久精品视频在线免费观看| 亚洲国产精品av| 亚洲三级视频在线观看| 亚洲第一电影网| 加勒比av一区二区| 成人av网站在线观看免费| 色综合一个色综合| 欧美日本一区二区三区四区 | 国产精品亚洲一区二区三区在线| 丁香激情综合五月| 欧美系列在线观看| 日韩一区二区三区免费观看| 国产日韩在线不卡| 一区二区三区免费看视频| 日日噜噜夜夜狠狠视频欧美人| 麻豆久久一区二区| 91丨九色丨蝌蚪丨老版| 91精品国产色综合久久ai换脸| 国产日韩精品一区二区浪潮av| 亚洲私人黄色宅男| 日本sm残虐另类| www.亚洲人| 91精品国产91综合久久蜜臀| 国产女人aaa级久久久级| 亚洲一区二区三区影院| 国产精品一二三四区| 欧美日本视频在线| 国产日韩成人精品| 日韩电影一区二区三区四区| 成人激情免费电影网址| 欧美肥妇毛茸茸| 亚洲欧美另类在线| 国产最新精品精品你懂的| 欧洲日韩一区二区三区| 久久精品一区二区三区不卡 | 视频一区欧美精品| 成人性生交大片免费看中文 | 国产成人av电影在线观看| 欧美日韩你懂得| 国产精品美女一区二区三区| 视频一区二区中文字幕| 91尤物视频在线观看| 精品国产乱码久久久久久蜜臀| 一区二区三区免费观看| 成人午夜视频在线观看| 日韩精品中文字幕一区二区三区| 亚洲综合色噜噜狠狠| eeuss鲁片一区二区三区| 精品国产凹凸成av人导航| 婷婷综合在线观看| 欧美在线看片a免费观看| 欧美激情一区二区三区四区| 久久精品噜噜噜成人av农村| 在线国产电影不卡| 国产精品久久久99| 国产一区 二区 三区一级| 日韩一二三区不卡| 肉色丝袜一区二区| 欧美视频自拍偷拍| 一区二区三区欧美激情| 色哟哟精品一区| 中文字幕一区二| 不卡电影一区二区三区| 久久久久久久久久久久久女国产乱| 日韩电影在线一区二区| 欧美精品丝袜久久久中文字幕| 亚洲综合色噜噜狠狠| 在线日韩一区二区| 玉米视频成人免费看| 99国产欧美久久久精品| 一色屋精品亚洲香蕉网站| 国v精品久久久网| 中文字幕在线不卡视频| caoporen国产精品视频| 国产精品你懂的| 99久久精品国产毛片| 亚洲少妇屁股交4| 一本大道久久a久久综合| 亚洲精品国产精华液| 欧美特级限制片免费在线观看| 一区二区三区四区在线| 欧美日韩高清一区二区三区| 免费xxxx性欧美18vr| 26uuu久久天堂性欧美| 国产在线乱码一区二区三区| 欧美激情一区二区三区蜜桃视频| 成人福利视频在线看| 国产精品久久久久影院亚瑟| 91农村精品一区二区在线| 亚洲一区二区三区四区五区中文 | 精品日产卡一卡二卡麻豆| 久久99精品国产.久久久久久 | 色综合久久中文字幕综合网| 亚洲综合视频在线观看| 欧美一区二区三区视频| 卡一卡二国产精品 | 亚洲婷婷综合色高清在线| a4yy欧美一区二区三区| 亚洲永久免费av| 欧美一区二区三区免费视频| 国产自产高清不卡| 国产精品国产成人国产三级| 欧美日韩激情一区| 国产米奇在线777精品观看| 亚洲精品ww久久久久久p站| 欧美日本免费一区二区三区| 国产精品一区二区在线播放| 亚洲曰韩产成在线|