Ein paar fragen zu Visual C++



  • Hi,

    gibt es in Visual C++ eine Möglichkeit die geschweifte Klammer "}" mit der Tastenkombination "Alt + Ctrl + 0" zu erhalten ?
    Wenn ich ein Projekt öffnen dann klappt das komischerweise nicht (Nur mit Alt Gr + Ctrl).
    -------
    Wenn ich projektunabhängig eine cpp Datei öffne, kann ich die dann auch kompilieren und ausführen ?
    Ich konnte leider noch keine Möglichkeit finden 😕
    -------
    Gibt es nicht einfach eine Funktion wie z.B. "Kompilieren und Ausführen" unter Dev Cpp oder muss ich jedes mal eine neue Projektmappe erstellen und dann Debugging starten zum ausführen (Grüner Pfeil)?

    MfG


  • Mod

    1. Alt+Ctrl+0 Ist auf den Befehl View Code gemappt. Du müsstest also dieses Mapping in den Keyboard-Shortcuts entfernen.
    2. Nein.
    3. Nein. (Ist diese Frage nicht mit 2. identisch)



  • bakoora schrieb:

    gibt es in Visual C++ eine Möglichkeit die geschweifte Klammer "}" mit der Tastenkombination "Alt + Ctrl + 0" zu erhalten ?
    Wenn ich ein Projekt öffnen dann klappt das komischerweise nicht (Nur mit Alt Gr + Ctrl).

    Keine Ahnung, was du meinst.

    bakoora schrieb:

    Wenn ich projektunabhängig eine cpp Datei öffne, kann ich die dann auch kompilieren und ausführen ?
    Ich konnte leider noch keine Möglichkeit finden 😕

    Geht nicht, glaube ich. Leg dir einfach ein Testprojekt an, in das du mal eben schnell Code reinkopieren und kompilieren kannst. Ist auch schnell gemacht...

    bakoora schrieb:

    Gibt es nicht einfach eine Funktion wie z.B. "Kompilieren und Ausführen"

    Klar. Bei mir liegt die auf F5. Durchforste mal deine Tastaturbelegung in den Optionen, da wirst du die Funktion finden (weiß grad nicht, wie genau die heißt).



  • Super danke, hat alles geklappt.

    Jetzt mal was anderes, mit der IDE Netbeans für Java fand ich es immer sehr hilfreich, dass man nach dem "." Operator alle Methoden einer Klasse aufgelistet bekommen hat.
    Falls man z.B. nicht mehr genau weiss wie die Funktion hieß.

    Oder wenn man den Anfang bzw. Ende eines Codeblocks "{,}" anklickt wird einem das jeweilige Ende markiert.

    Gibt es diese Funktionen auch unter MSVC++ ?



  • MSVC ist leider in Bezug auf C++ sehr spartanisch, was Editor-Funktionen angeht. Der Debugger usw. sind so genial, das es einen schon verwundert. 😉

    Du kannst die IDE mit Add-ons erweitern (geht aber nur ab Standard-Edition!). Und da gibt es VisualAssist X, welches seeeehr genial ist. Das kommt schon sehr gut an Netbeans oder Eclipse ran. VisualAssist X kann man auch als 30 Tage-Demo runter laden. Einfach mal ausprobieren.



  • Hmm schade ich habe leider nur die Express Edition und die wird nicht unterstützt 😕
    Traurig das solche Funktionen nicht implementiert werden.



  • bakoora schrieb:

    mit der IDE Netbeans für Java fand ich es immer sehr hilfreich, dass man nach dem "." Operator alle Methoden einer Klasse aufgelistet bekommen hat.
    Falls man z.B. nicht mehr genau weiss wie die Funktion hieß.

    Ich nutze zwar schon lange den Visual Assist, aber ich denke, du musst nach Eingabe von "." einfach CTRL+SPACE drücken, dann kriegst du deine Member-Liste. Wenn du eine Funktion aufrufst und der Cursor in der Parameterliste ist, kannst du mit CTRL+SHIFT+SPACE den Prototypen als Tooltip bekommen (Sorry, wenn irgendwas doch nicht stimmt).



  • Ich dachte eig eher, dass du die Member-Liste sofort angezeigt bekommst, wenn du . gedrückt hast.

    Man musste da nix mehr weiter eingeben, so hab ich es im Gedächtnis. 🙂



  • Danke für die Antworten.
    Werde gleich mal rum testen.



  • Das einzige was ich nun noch vermisse ist die Code Block Markierung -.-
    Sprich ich klicke eine { an und mir wird das Ende gezeigt.



  • Das würde Visual Assist X erledigen, auch in von dir gewählten Farben. 👍



  • Das wäre natürlich super, nur leider wird das nicht für die Express Edition unterstützt hmpf, doch Geld ausgeben -.-

    Ach ja wie deaktiviere ich den Unicode Zeichensatz oder wie lässt sich sowas umgehen ?

    LPCSTR winName;
    std:string str("Fenstername");
    
    /* convert string to LPSTR */
    winName  = str.c_str();
    

    Also wie kann ich ohne LPSTR o.ä. arbeiten ?
    z.B um der Funktion "FindWindow" ein einfaches const char* zu übergeben.

    const char *winName = "Fenstername";
    FindWindow ( NULL , winName );
    

    klappt nämlich nicht 😞



  • unter Project -> ... Properties -> Configuration Properties -> General -> Character Set kannst du Unicode de- / aktvieren

    wenn du das _T() Makro verwendest, dann hast du damit keine Probleme ob Unicode an oder aus ist 👍

    und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht 🙂

    Verstehe grad nicht, wieso du mit const char arbeiten musst, es reicht doch, wenn du einfach dein string übergibst, also

    FindWindow ( NULL , "Fenstername");
    

    sonst legst du (z.B.) einfach nen CString an, in dem dein Fenstername oder was auch immer steht



  • R3dNeXX schrieb:

    ...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...

    Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...



  • asc schrieb:

    R3dNeXX schrieb:

    ...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...

    Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...

    Alles klar, danke, dann verstehe ich das.
    Ist etwas anderes, wenn man bis jetzt nur die Prof gewohnt ist.



  • Ich habe den Zeichensatz jetzt auf Multi-Byte gesetzt.
    Aber nun klappt meine Funktion komischerweise nicht -.-
    Hier mal der Code:

    HANDLE OpenProcess ()
    {
    	const char *winName = "Counter-Strike Source";
        HANDLE winHandle = NULL;
        HWND window = NULL;
        DWORD procid;
    
        while ( true )
        {
    
              window = FindWindow( NULL , winName );
    
              if ( window == NULL ) {
                   Sleep ( 900 );
    			   std::cout << "not found." << std::endl;
                   continue;
                   }
              else {
    			   break;
                   }
        }
    
        GetWindowThreadProcessId ( window , &procid );
    
        winHandle = OpenProcess ( PROCESS_ALL_ACCESS , false , procid );
    
        if (!winHandle) 
    	{
    	return 0; 
    	}
        else 
    	{
    		return winHandle; 
    	}
    }
    

    Er findet zwar das Fenster aber gibt das HANDLE nicht zurück.
    In einer anderen IDE klappt diese Funktion jedoch o0

    Hier mal der Fehler wenn ich den Zeichensatz auf Unicode habe:

    error C2664: 'FindWindowW': Konvertierung des Parameters 2 von 'const char *' in 'LPCWSTR' nicht möglich
    

    Habe ich einen Fehler in der Funktion, oder stellt mir MSVC++ wieder ein Bein ? :>



  • Wieso nimmst du auch const char ?

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    also z.B.

    CString winName = _T("Counter-Strike Source");
    HANDLE winHandle = NULL;    // = NULL kannst du dir auch sparen
    
    winHandle = FindWindow(NULL, winName);
    

    und durch die Verwendung von dem _T() Makro ist es egal, ob du Unicode oder Multibyte verwendest ! 👍



  • Die Fehlermeldung weist auch eigentlich eher darauf hin, dass du auf Unicode gestellt hast, nicht MBCS...

    Mal die Kurzfassung: FindWindow ist ein define, dass entweder FindWindowA oder FindWindowW bedeutet, je nachdem ob _UNICODE definiert ist oder nicht (du regelst das über die Projekteinstellungen). Hast du beispielsweise Unicode eingestellt, dann wird an die Stellen deines Codes, an denen FindWindow vorkommt, eben FindWindowW gesetzt. Die Funktion braucht dann einen LPCWSTR, keinen LPCSTR wie es bei FindWindowA der Fall sein würde. Dein const char* lässt sich nicht einfach nach LPCWSTR casten, also kriegst du eine Fehlermeldung, weil dein Argument den falschen Typ hat. Ein const wchar_t* würde funktionieren. Nimm einfach CString, hier wird nämlich auch je nach Unicode-Einstellung CStringA oder CStringW genommen. Stringliterale notierst du mit dem _T()-Makro, dass unterscheidet auch nach _UNICODE.

    Lies am besten nochmal nach, wie das alles funktioniert (Doku/Tutorial/Artikel/Buch). Genug Stichwörter hast du ja jetzt.



  • Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕



  • bakoora schrieb:

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕

    Ok, dann aber => falsches Forum! 🕶



  • bakoora schrieb:

    Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.

    In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht 😕

    Ok, hatte ganz vergessen, dass du nur ne Express hast !

    Aber stimmt, falsches Forum. 👍


Anmelden zum Antworten