lecture Home > Advice to Beginner

VS.NET 2003 Add-in

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2006³â 08¿ù 12ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 09¿ù 07ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : °­ ½ÂÈ£
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : Visual Studio .Net 2003 Add-In °­Á 2

°­Á Àü Å¿ÀÀÇ Àâ´ã>

À̹ø °­Á´ °­½ÂÈ£´ÔÀÌ º¸³»ÁֽŠVS.NET 2003 Add-in¿¡ °üÇÑ ³»¿ëÀÔ´Ï´Ù.
¾Ë¾ÆµÎ¸é ¿©·¯¸ð·Î À¯¿ëÇÑ ³»¿ëÀ» °­Á·Πº¸³»ÁֽнÂÈ£´Ô²² °¨»çÀÇ ¸»¾¸µå¸³´Ï´Ù


Ãß°¡±â´É(Add-in) Ȱ¿ë

Visual Studio .Net 2003 Add-In °­Á 1À» Àоú´Ù´Â °¡Á¤ÇÏ¿¡ ÁøÇàÇϵµ·Ï ÇϰڽÀ´Ï´Ù.
À̹ø °­Á¿¡¼­´Â Ãß°¡±â´ÉÀ» Ȱ¿ëÇØ¼­ VS .NET¿¡ »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
À̸§ÇÏ¿© Clipboard ManagerÀÔ´Ï´Ù.

½Ç¹«¿¡¼­ ÀÏÀ» ÇÏ´Ù º¸¸é º¹»ç & ºÙ¿©³Ö±â¸¦ ¸¹ÀÌ »ç¿ëÇÏ°Ô µË´Ï´Ù. ¼ö ¾øÀÌ º¹»ç & ºÙ¿©³Ö±â¸¦ ÇÏ´Ùº¸¸é Á» Àü¿¡ º¹»çÇß¾ú´ø ³»¿ëÀ» ´Ù½Ã ã¾Æ¼­ º¹»çÇØ¾ß ÇÏ´Â °æ¿ì°¡ Á¾Á¾ Àִµ¥¿ä. Âü ±ÍÂúÀº ÀÏÀÌÁÒ. ±×·¡¼­ Clipboard Manager¶ó´Â ³ðÀ» ÅëÇØ¼­ ±× µ¿¾È º¹»çÇß´ø ³»¿ëÀ» °ü¸®ÇÏ´Â ±â´ÉÀ» VS .NET¿¡ Ãß°¡ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. MS OFFICE¿¡µµ ÀÖ´Â ¹¹ ±×·± ±â´ÉÀÔ´Ï´Ù.

Clipboard ManagerÀÇ ±â´ÉÀ» Á¤ÀÇÇØ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

    1. °³¹ßÀÚ°¡ Ctrl + C ¸í·ÉÀ» ½ÇÇàÇßÀ» ¶§ º¹»çÇÑ ³»¿ëÀ» ÀúÀåÇÕ´Ï´Ù.
    2. º°µµÀÇ UI¸¦ ÅëÇØ ÀúÀåÇÑ ¸ñ·ÏÀ» º¸¿©ÁÖ°í °³¹ßÀÚ°¡ ¼±ÅÃÇØ¼­ ¿øÇÏ´Â °÷¿¡ ºÙ¿©³Ö±â¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Clipboard Manager°¡ ½ÇÇàµÈ ¸ð½ÀÀÔ´Ï´Ù.

°£´ÜÇÏÁÒ? ±¸Çöµµ ±×¸® ¾î·ÆÁö ¾ÊÀ¸´Ï ±Ý¹æ µû¶ó ÇÒ ¼ö ÀÖÀ»°Ì´Ï´Ù.

ÀÚ! ½ÃÀÛÇϰڽÀ´Ï´Ù.

1. ÆÄÀÏ > »õ·Î¸¸µé±â > ÇÁ·ÎÁ§Æ® > ±âŸ ÇÁ·ÎÁ§Æ® > È®À强 ÇÁ·ÎÁ§Æ® > Visual Studio.NET Ãß°¡ ±â´É ¼±ÅÃ
    À̸§, À§Ä¡¸¦ ÀÔ·Â ¶Ç´Â ¼±ÅÃÇϰí "È®ÀÎ" Ŭ¸¯.

2. ¸¶¹ý»ç°¡ ³ªÅ¸³³´Ï´Ù.
    ÇÁ·Î±×·¡¹Ö ¾ð¾î ¼±ÅÃ, ÀÀ¿ëÇÁ·Î±×·¥ È£½ºÆ® ¼±Åà À» ÀûÀûÇÏ°Ô ¼±ÅÃÇϰí "´ÙÀ½" Ŭ¸¯

3. À̸§ ¹× ¼³¸í ÀÔ·Â

4. Ãß°¡ ±â´É ¿É¼Ç ¼±ÅÃ

Á¦ÀÏ Áß¿äÇÑ ºÎºÐÀÔ´Ï´Ù. À§ µÎ °¡Áö ¿É¼ÇÀ» ¼±ÅÃÇÑ ÀÌÀ¯´Â ´ÙÀ½°ú °°½À´Ï´Ù.

- ¿ì¸®´Â Ãß°¡±â´ÉÀÇ UI¸¦ ¸¸µé¾î¼­ »ç¿ëÀÚ°¡ º¹»çÇÑ ¸ñ·Ï Áß¿¡¼­ ¿øÇÏ´Â Ç׸ñÀ» ¼±ÅÃÇϰí "ºÙ¿©³Ö±â"¸¦
   Å¬¸¯Çϵµ·Ï ÇÒ °ÍÀÔ´Ï´Ù.
- Ãß°¡±â´É UI °¡ ½ÇÇàµÇÁö ¾Ê¾ÒÀ» ¶§µµ ¿ì¸®´Â Clipboard Manager¿¡ º¹»çÇÑ ³»¿ëÀ» Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù.
   ±×·¯±â À§Çؼ­´Â VS .NET°¡ ½ÇÇàµÉ ¶§ Clipboard Managerµµ ·ÎµåµÅ¾ß ÇÕ´Ï´Ù.

5. ³ª¸ÓÁö È­¸éÀº ÀûÀýÇÏ°Ô ¼±ÅÃÇϰí "´ÙÀ½" ¶Ç´Â "¸¶Ä§"À» Ŭ¸¯ÇÕ´Ï´Ù.

6. ¸¶¹ý»ç¿¡ ÀÇÇØ »ý¼ºµÈ ÇÁ·ÎÁ§Æ®ÀÔ´Ï´Ù.

¸¶¹ý»ç°¡ »ý¼ºÇÑ ¼Ò½º¿¡ Clipboard Manager¸¦ ±¸ÇöÇϱâ À§ÇÑ Äڵ带 Ãß°¡ÇØ º¸°Ú½À´Ï´Ù.

±â´ÉÀ» ±¸ÇöÇϱ⿡ ¾Õ¼­ ¾Ë·Áµå¸®ÀÚ¸é Ãß°¡±â´ÉÀÇ ¸íĪÀÌ Clipboard Manager ÀÌÁö¸¸ »ç½Ç Clipboard¸¦ °ü¸®Çϰųª ÂüÁ¶ÇÏÁö ¾Ê½À´Ï´Ù. Á¦°¡ È®ÀÎÇÑ ¹Ù·Î´Â .Net Framework¿¡¼­ Á¦°øÇÏ´Â Clipboard Ŭ·¡½º´Â ¸¶Áö¸·¿¡ º¹»çµÈ Ç׸ñ¸¸ °¡Áö°í ÀÖ´õ±º¿ä. µû¶ó¼­ ¿ì¸®°¡ ±¸ÇöÇÏ·Á°í ÇÏ´Â ±â´É°ú °Å¸®°¡ ¸Ö±â ¶§¹®¿¡ ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù.

ÀÌÁ¦ Clipboard Manager¸¦ ±¸ÇöÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. º¹»ç ¸í·ÉÀÌ ½ÇÇàµÇ¸é º¹»çµÈ ³»¿ëÀ» ÀúÀåÇØ¾ß Çϴµ¥ ¾î¶»°Ô ±¸ÇöÇØ¾ß ÇÒ±î¿ä? º¹»ç ¸í·ÉÀÌ ½ÇÇàµÇ´Â °ÍÀ» ¾î¶»°Ô ¾Ë ¼ö ÀÖÀ»±î¿ä? ´ÙÇàÈ÷ VS .NET ¿¡¼­ ÀÚµ¿È­ Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇØ ¿©·¯ °¡Áö À̺¥Æ®¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù. ±× Áß¿¡ CommandEvents¸¦ »ç¿ëÇϸé VS .NET¿¡¼­ ÀϾ´Â ¸í·É À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼³¸íÀº ÄÚµå·Î ´ë½ÅÇϰڽÀ´Ï´Ù.

//¸â¹ö º¯¼ö ¼±¾ðºÎ¿¡ CommandEvents º¯¼ö ¼±¾ð
private CommandEvents copyEvents;

//OnConnection ¸Þ¼­µå¿¡ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    applicationObject = (_DTE)application;
    addInInstance = (AddIn)addInInst;

    //Copy ¸í·É: Guid: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, ID: 15
    //Events.get_CommandEvents(Guid, ID)¸¦ »ç¿ëÇØ¼­ º¹»ç ¸í·É¿¡ ´ëÇØ¼­¸¸
    //CommandEvents °³Ã¼¿¡ ÇÒ´çÇÏ¿´½À´Ï´Ù.
    this.copyEvents = (EnvDTE.CommandEvents)applicationObject.Events.get_CommandEvents("{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 15);
    //CommandEvents ÀÇ AfterExecute À̺¥Æ®¿¡ À̺¥Æ®¸¦ ó¸®ÇÒ ¸Þ¼­µå¸¦ µî·ÏÇÕ´Ï´Ù.
    //AfterExecute : ¸í·ÉÀ» ½ÇÇàÇÑ ´ÙÀ½¿¡ ¹ß»ýÇÕ´Ï´Ù.
    this.copyEvents.AfterExecute += new _dispCommandEvents_AfterExecuteEventHandler( copyEvents_AfterExecute );

    if(connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup)
    {
        object []contextGUIDS = new object[] { };
        Commands commands = applicationObject.Commands;
        _CommandBars commandBars = applicationObject.CommandBars;

        try
        {
            Command command = commands.AddNamedCommand(addInInstance, "ClipboardManager", "ClipboardManager", "Executes the command for ClipboardManager", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
            CommandBar commandBar = (CommandBar)commandBars["Tools"];
            CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
        }
        catch(System.Exception /*e*/)
        {}
    }
}

À̺¥Æ®¸¦ ó¸®ÇÒ ¸Þ¼­µå¸¦ Ãß°¡ÇÕ´Ï´Ù. ³»¿ëÀº ÁøÇàÇϸ鼭 ä¿ö³ª°¡µµ·Ï ÇϰڽÀ´Ï´Ù.

private void copyEvents_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut)
{
}

Ãß°¡ÇÑ ÄÚµå Áß¿¡ "º¹»ç" ¸í·É ¶Ç´Â ´Ù¸¥ ¸í·ÉÀÇ Guid, ID ¸¦ ¾î¶»°Ô ¾Ë¾Æ³»´ÂÁö ±Ã±ÝÇÏ½Ç °Å¶ó »ý°¢µË´Ï´Ù. ÇÏÁö¸¸ ¿©±â¿¡¼­ ¼³¸íÇÏÁö´Â ¾Ê°Ú½À´Ï´Ù. À§ ÄÚµå¿Í À¯»çÇÑ ¸éµµ ÀÖ°í ±×¸® ¾î·ÆÁö ¾ÊÀ¸´Ï ÷ºÎÇÑ ¼Ò½º·Î ´ë½ÅÇÏ·Á ÇÕ´Ï´Ù.(Clipboard Manager ¼Ò½º¿¡ ÷ºÎ)

Áö±Ý±îÁö ÁøÇàÇØ¿Â ³»¿ëÀÌ Clipboard Manager¿¡¼­ °¡Àå Áß¿äÇÑ ºÎºÐÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½À¸·Î ³Ñ¾î°¡¼­ UI¸¦ ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

¼Ó¼º ¹× À̺¥Æ®¸¦ ´ÙÀ½Ã³·³ Á¤ÀÇ ÇÕ´Ï´Ù.

1. ListBox
lstClipboardList.Name = "lstClipboardList";
lstClipboardList.SelectedIndexChanged += new System.EventHandler(this.lstClipboardList_SelectedIndexChanged);

2. TextBox
txtDetail.Multiline = true;
txtDetail.Name = "txtDetail";
txtDetail.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
txtDetail.Text = "";

3. Button
btnPaste.Name = "btnPaste";
btnPaste.Text = "ºÙ¿©³Ö±â";
btnPaste.Click += new System.EventHandler(this.btnPaste_Click);

4. Button
btnClose.Name = "btnClose";
btnClose.Text = "´Ý±â";
btnClose.Click += new System.EventHandler(this.btnClose_Click);

5. Form
ControlBox = false;
Name = "ClipboardList";
ShowInTaskbar = false;
Text = "Clipboard List";
TopMost = true;

ÀÚ~ UI µðÀÚÀÎÀÌ ³¡³µÀ¸¸é Äڵ带 Ãß°¡ÇØ º¼±î¿ä.

//using Áö½Ã¹® Ãß°¡
using EnvDTE;

//¸â¹ö º¯¼ö Ãß°¡
private _DTE applicationObject;

//»ý¼ºÀÚ Ãß°¡
public ClipboardList(EnvDTE._DTE applicationObject) : this()
{
    //Ȱ¼ºÈ­µÈ ¹®¼­ÀÇ ¼±ÅÃµÈ ºÎºÐÀ» °¡Á®¿À±â À§Çؼ­ DTE °³Ã¼ ÇÒ´ç
    this.applicationObject = applicationObject;
}

//Clipboard List¿¡ º¹»çÇÑ ³»¿ëÀ» Ãß°¡ÇÏ´Â public ¸Þ¼­µå Ãß°¡
public void AddClipboard(string strText)
{
    //Connect.copyEvents_AfterExecute ¿¡¼­ È£Ãâ
    //Ŭ¸³º¸µå ¸ñ·Ï¿¡ º¹»çÇÑ ÅØ½ºÆ®¸¦ Ãß°¡ÇÔ

    lstClipboardList.Items.Insert(0, strText);
}

//Clipboard List SlectedIndexChanded À̺¥Æ® ó¸® ¸Þ¼­µå Ãß°¡
private void lstClipboardList_SelectedIndexChanged(object sender, System.EventArgs e)
{
    txtDetail.Text = lstClipboardList.Items[lstClipboardList.SelectedIndex].ToString();
}

//ºÙ¿©³Ö±â Click À̺¥Æ® ó¸® ¸Þ¼­µå Ãß°¡
private void btnPaste_Click(object sender, System.EventArgs e)
{
    try
    {
        //ÇöÀç Ȱ¼ºÈ­µÈ ¹®¼­ÀÇ ¼±ÅÃµÈ ºÎºÐÀ» °¡Á®¿È.
        TextSelection sel = (TextSelection)applicationObject.ActiveDocument.Selection;
        //ÁöÁ¤µÈ ¹®ÀÚ¿­À» ÇöÀç »ðÀÔ Æ÷ÀÎÆ®¿¡ »ðÀÔ
        sel.Insert(txtDetail.Text, 2);//vsInsertFlags.vsInsertFlagsCollapseToStart
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

//´Ý±â Click À̺¥Æ® ó¸® ¸Þ¼­µå Ãß°¡
private void btnClose_Click(object sender, System.EventArgs e)
{
this.Hide();
}

¿©±â±îÁö UI ¿¡ ´ëÇÑ ÄÚµå´Â ¿Ï¼ºµÆ½À´Ï´Ù.
ÀÌÁ¦ Connect.cs ¿¡¼­ UI¸¦ ÀûÀýÇÏ°Ô È£ÃâÇÏ´Â Äڵ带 Ãß°¡ÇÏ¸é µË´Ï´Ù.

//¸â¹ö º¯¼ö Ãß°¡
ClipboardList oClipboardList = null;

//µµ±¸ ¸Þ´º¿¡¼­ Clipboard Manager ¸Þ´º¸¦ Ŭ¸¯ÇßÀ» ¶§ ½ÇÇàÇÒ ÄÚµå
public void Exec(string commandName, EnvDTE.vsCommandExecOption executeOption,
                ref object varIn, ref object varOut, ref bool handled)
{
    handled = false;
    if(executeOption == EnvDTE.vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
        if(commandName == "ClipboardManager.Connect.ClipboardManager")
        {
            if(oClipboardList == null)
                oClipboardList = new ClipboardList(applicationObject);
            oClipboardList.Show();

            handled = true;
            return;
        }
    }
}

//"º¹»ç" ¸í·ÉÀÌ ½ÇÇàµÈ ÈÄ¿¡ ó¸®ÇÒ ÄÚµå
private void copyEvents_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut)
{
    string strText = "";
    if(oClipboardList == null)
        oClipboardList = new ClipboardList(applicationObject);

    strText = ((TextSelection)applicationObject.ActiveDocument.Selection).Text;
    if(strText.Length > 0)
        oClipboardList.AddClipboard(strText);
}

µåµð¾î Clipboard Manager ±¸ÇöÀ» ¸¶ÃƳ׿ä. ÀÌÁ¦ ½ÇÇàÀ» ½ÃÄѺÁ¾ß °ÚÁÒ?

¼³Ä¡ÇÁ·ÎÁ§Æ®¸¦ ºôµåÇÕ´Ï´Ù.

ÀÌÁ¦ ¿©·¯ºÐÀÇ Ãß°¡±â´É ¼³Ä¡ÇÁ·ÎÁ§Æ®ÀÇ Ãâ·Â°æ·Î(Ãß°¡±â´ÉÇÁ·ÎÁ§Æ®¸í\¼³Ä¡ÇÁ·ÎÁ§Æ®¸í\debug)·Î °¡¼­ Setup.exe¸¦ ½ÇÇàÇØ¼­ Ãß°¡±â´ÉÀ» ¼³Ä¡ÇÕ´Ï´Ù. (VS .NETÀº ¸ðµÎ ´Ý°í ¼³Ä¡Çϼ¼¿ä.) VS .NET¸¦ ¿­°í µµ±¸ ¸Þ´º¸¦ È®ÀÎÇØ º¸¸é ¸Þ´º°¡ Ãß°¡µÅÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

¿ì¸®°¡ ±¸ÇöÇÏ·Á°í Çß´ø ±â´ÉµéÀÌ Àß µ¿ÀÛÇÏ´ÂÁö Å×½ºÆ®¸¦ ÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù. ºÎÁ·ÇÑ°Ô ¸¹Áö¸¸ ±×·±´ë·Î ¾µ¸¸ÇÑ Ãß°¡±â´É(add-in)ÀÌ ¸¸µé¾îÁ³´Ù°í »ý°¢µÇ´Âµ¥ ¿©·¯ºÐÀº ¾î¶²Áö ¸ð¸£°Ú³×¿ä. ºÎÁ·ÇÑ ºÎºÐÀ» ä¿ö³ª°¡´Â °ÍÀº ¿©·¯ºÐÀÇ ¸òÀ¸·Î ³²±â¸é¼­ °­Á¸¦ ¸¶Ä¥±î ÇÕ´Ï´Ù. ´õ¿î ¿©¸§ °Ç°­ Á¶½ÉÇϼ¼¿ä.

p.s
Ãß°¡±â´É Á¦°Å´Â "ÇÁ·Î±×·¥ Ãß°¡/Á¦°Å"¿¡¼­ ÇÏ¸é µË´Ï´Ù.(VS .NET ´Ý¾Æ¾ß ÇÔ.)

MSDN(Ãß°¡±â´É °ü·Ã url)

Visual Studio ȯ°æ È®Àå
ÀÚµ¿È­ ¹× È®À强 ÂüÁ¶


DOWNLOAD : °­Á¿¡¼­ »ç¿ëµÈ ¼Ò½º¸¦ ´Ù¿î·Îµå ¹ÞÀ¸½Ã·Á¸é Ŭ¸¯Çϼ¼¿ä

 

°­Á ¸ñ·ÏÀ¸·Î..