Add-ins

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
User avatar
silexu
Junior
Junior
Posts: 8
Joined: 12 Aug 2007, 00:50
Location: Brasov
Contact:

Add-ins

Post by silexu » 15 Aug 2007, 01:14

O posibilitate interesanta de interactiune cu msdev este de a crea asa numitele add-ins. Astfel poti avea access la documentul curent, la solutia si la proiectele din ea, si chiar poti construi propriile ferestre care sa fie dock-abile in mediul msdev. In momentul de fata am dezvoltat un add-in care are deja patru astfel de ferestre dar am intampinat doua probleme tehnice. Din pacate aceste probleme nu sunt de importanta capitala astfel incat sa fiu nevoit sa aloc un timp de studiu pentru ele. Poate cineva care a mai lucrat poate sa ma ajute. Sau poate daca e cineva interesat de domeniu ii pot furniza inforamatiile de a porni dezvoltarea unor astfel de add-inuri si poate rezolva problemele in timp. Dar sa mentionez is problemele:
1. In momentul in care o fereastra dezvoltata intr-un astfel de add-in este activa, combinatiile de taste recunoscute de mediu nu se executa (e.g. CTRL-F pentru cautare).
2. Multe funtionalitati dezvoltate in aceste ferestre sunt activate prin intermediul unor butoane. Inca nu am gasit o posibilitate de a atasa niste controale gen tool bar acestor ferestre pentru a reduce zona rezervata acestor butoane. Ar fi foarte interesanta o solutie de atasare tool bar la un composite control (ceea ce este de fapt o fereastra dezvoltata intr-un add-in vizual.

Pentru fanii interactiunii cu msdev intr-un mod non-vizual mentionez ca exista posibilitatea definirii unor "comenzi" care pot fi ulterior adaugate intr-un menubar (e.g. Tools).



User avatar
silexu
Junior
Junior
Posts: 8
Joined: 12 Aug 2007, 00:50
Location: Brasov
Contact:

Re: Add-ins

Post by silexu » 19 Aug 2007, 01:03

Dupa ce am creat acest topic am fost contacta de Ovidiu Cucu si incurajat sa povestesc de add-in-uri. E ceva ce as vrea sa fac cu multa placere dar, dupa cum i-am spus si lui, am foarte putin timp. Asa ca incerc sa compensez cu jumatatile de ora pe care le prind la 1 noaptea cand e liniste in casa.

Toate referintele pe care le dau sunt la Visual Studio .Net 2003 pe care il am instalat pe laptop acasa. Posibil ca pe 2005 sa fie diferente. Iar Vista inca nu am mirosit.

Pentru a crea un add-in se merge in meniul File/New/Project; in fereastra New project aparuta, in tree-ul (copacul :O) Project Type se alege Other Projects/Extensibility Projects iar in lista Templates din dreapta se alege Visual Studio .NET Add-in
In succesiunea de ferestre de wizard (vrajitor :O) eu aleg de obicei
- Page1: mediul de dezvoltare Visual C++/AtL;
- Page2: Microsoft Visual Studio .NET
- Page3: Numele
- Page4: Daca bifati: "Yes creates a Tools menu item..." puteti vedea cum se creeaza o comanda in tools menu care poate sa activeze o functionalitate in meniu. Nu bifez "My Add-in will never put up modal UI, ..." daca vreau o fereaastra din add-in
- Page5: About stuff
- Page6: Summary stuff

Dupa crearea proiectului este de urmarit in fisierul Connect.cpp metoda OnConnection unde se creaza comanda din Tools cat si metoda Exec unde se executa (de fapt aici ar trebui introdus codul care sa se execute la selectia comenzii din meniu).

Succes.

Incerca pe viitor sa va descriu:
- modul de a interactiona cu MSDEV in cadrul unei comenzi;
- cum se poate crea o fereastra dock-abila creata prin intermediul unui add-in;
Nu ma supar daca reusiti sa o faceti inaintea mea. :O)

User avatar
silexu
Junior
Junior
Posts: 8
Joined: 12 Aug 2007, 00:50
Location: Brasov
Contact:

Re: Add-ins

Post by silexu » 05 Sep 2007, 01:13

Incerc sa revin cu ceva constructiv la acest post. Primul lucru pe care l-am facut a fost sa urmez informatiile din post. Deci am creat un proiect CodeExpert1 urmand cei sase pasi explicati inainte. Am dat build pe cele doua proiecte si am dat install pe proiectul CodeExpert1Setup (din cate mi-am dat seama pe .Net
2005 acest proiect nu se mai creaza automat). Prima surpiza a fost ca nu mi s-a creat o intrare in Tools menu cu comanda creata in addin. Cunoscand
problema si apeland la Plan B de la Microsoft am inchis mediul de dezvolare, am inregistrat fisierul ReCreateCommands.reg din folderul aplicatiei si am
restartat mediul Visual Studio. Ca rezultat am intrarea (itemul mai pe romaneste) CodeExpert1 (cu un icon de happy face) in meniul Tools.
Pasul urmator este de a efectua o anumita actiune in urma efectuarii comenzii. Pentru asta trebuie adaugat cod in functia Exec din clasa CConnect (incadrat de
codul generat de Wizard:

Code: Select all

  if(!_wcsicmp(bstrCmdName, L"CodeExpert1.Connect.CodeExpert1"))
  {
      CComPtr<EnvDTE::Document> lv_pDocument;
      // get the active document
      m_pDTE->get_ActiveDocument( &lv_pDocument );
      if ( lv_pDocument )
      { // if there is any get the selection
        CComPtr<IDispatch> lv_pTextSelectionDisp;
        lv_pDocument->get_Selection(&lv_pTextSelectionDisp);
        CComPtr<EnvDTE::TextSelection> lv_pTextSelection;
        lv_pTextSelection = lv_pTextSelectionDisp;
        // put a new text instead of current selection
        CComBSTR bstrText( _T("Hello World!") );
        lv_pTextSelection->put_Text( bstrText );
    }
    *pvbHandled = VARIANT_TRUE;
Pentru a executa aplicatia in debug sau release trebuie selectata aplicatia gazda. In fereasta "Executable for Debugging Session" am selectat in combo box
pentru Executable file name: optiunea "Browse..." si am selectat aplicatia c:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.exe
Dupa care am creat un document nou (merge un simplu text file) si am selectat comanda CodeExpert1 din meniu tools.
Rezultat: Hello world! apare in documentul nou creat.
Asta imi aduce aminte de un banc cu moduri in care se poate face sa apara Hello World!. Se pare ca exista unul si mai complex (prin add-in Visual Studio ;O).
Last edited by Marius Bancila on 05 Sep 2007, 08:38, edited 1 time in total.
Reason: adaugare taguri

Post Reply