Anfänger ;) - einige Fragen zu VC++



  • Hi 😃

    Also erstmal find ich es toll, dass es so ein aktives C/C++ Forum gibt. Naja ich hab meinerseits einige Fragen zu VisualC++, vielleicht können ja einige beantwortet werden, würd mich sehr freuen. 🙂
    Alle Fragen beziehen sich auf VisualC++ und die Programmierung einer einfachen Win32 Anwendung (ohne MFC!).

    1. Ich habe ja jetzt die manuelle Erstellung eines Fensters, die Nachrichtenverarbeitung und alles durch Tutorials ja schon verstanden, und ne einfache Win32-Anwendung geschrieben. Wo mir noch der Durchblick fehlt, ist die Behandlung der Fenster in Echtzeit - wie kann ich z. B. nach dem Erstellen eines Fensters per Laufzeit dessen Eigenschaften ändern? (Titel, Hintergrundfarbe, Position, etc.)

    2. Wie kann ich nun zum Beispiel per Laufzeit einen Button oder ein Eingabefeld für mein Fenster als Childwindow erstellen? Und wie behandle ich es? (Verarbeitung etc.)

    3. Ich möchte Zeichenketten-Operationen anwenden. Da kenn ich mich schon etwas aus, und wollte den char[] Datentyp verwenden, hab aber gehört, dass es auch "komfortablere" Stringdatentypen in VC++ gibt. Stimmt das? Oder gilt das nur für die MFC?

    Jo auf Antworten freu ich mich 🙂
    Danke 🙂
    Ciao
    Denial



  • Hi,

    willkommen erstmal im Forum 👍
    Einen Hinweis im voraus. Wenn du solche Dinge ohne MFC machen willst, programmierst du dir die Finger wund 😉 .

    Da dies hier das MFC-Forum ist, ist die Wahrscheinlichkeit im WinAPI Forum größer, dass dir geholfen werden kann 😉

    denial schrieb:

    wie kann ich z. B. nach dem Erstellen eines Fensters per Laufzeit dessen Eigenschaften ändern? (Titel, Hintergrundfarbe, Position, etc.)

    Dazu brauchst du das HWND auf das Fenster (die Identifikationsnummer).
    Titel: SetWindowsText
    Hintergrundfarbe: ist komplizierter, du schreibst dir eine eigene Nachricht, die den Farbwert in einer Variable ändert (in WM_PAINT muss der Hintergrund mit der Farbe in der Variable gefüllt werden)
    Position: SetWindowsPos
    etc: schlag in der MSDN nach 😃

    denial schrieb:

    1. Wie kann ich nun zum Beispiel per Laufzeit einen Button oder ein Eingabefeld für mein Fenster als Childwindow erstellen? Und wie behandle ich es? (Verarbeitung etc.)

    Du erstellst soetwas mit CreateWindow. In der Nachrichtenverarbeitung musst du dann natürlich die Nachrichten bearbeiten.
    Mit MFC extrem einfacher 😃

    denial schrieb:

    1. Ich möchte Zeichenketten-Operationen anwenden. Da kenn ich mich schon etwas aus, und wollte den char[] Datentyp verwenden, hab aber gehört, dass es auch "komfortablere" Stringdatentypen in VC++ gibt. Stimmt das? Oder gilt das nur für die MFC?

    CString ist am komfortabelsten, leider MFC 🕶
    Dann gibts noch die string-Klasse der STL.

    Hoffe ich konnte dir helfen.

    Grüße Rapha



  • Ja schön dass es mit MFC so einfach is 😉
    Aber was mich an MFC nervt, ist definitiv die unübschaubarkeit der ganzen Funktionen, und dass die fertige Anwendung Bibliotheken zum Laufen braucht, also nicht standalone kompiliert wird. 😞



  • denial schrieb:

    Ja schön dass es mit MFC so einfach is 😉
    Aber was mich an MFC nervt, ist definitiv die unübschaubarkeit der ganzen Funktionen, und dass die fertige Anwendung Bibliotheken zum Laufen braucht, also nicht standalone kompiliert wird. 😞

    MFC sind einfach C++, WINAPI ist C. Ich denke diese Zeiten sind vorbei (auch wenn manche immer meinen die MFC seien auch bereits tot). Am Anfang ist das Ganze immer unüberschaubar, du gewöhnst dich dran und findest es irgendwann recht einleuchtend. Meinst du die MFC-DLL? Die kannst du entweder durch ein Setup-Programm mitliefern oder statisch linken (-> Vergrößerung der exe).

    Gerade wenn du aufwendigere Sachen programmieren willst, sind die MFC erste Wahl. (ansonsten - wie Rapha bereits sagte - programmierst du dir die Finger wund).

    MfG



  • Na ich glaub ich programmier mir lieber die Finger wund 😃
    Ehm gibt es gute Tutorials zum Thema? Die Erklärung von Rapha war zwar gut, aber grad im Bezug auf Background-Änderung und so etwas kurz 😉



  • denial schrieb:

    Na ich glaub ich programmier mir lieber die Finger wund 😃

    Ich glaube du unterschätzst da etwas gewaltig 😉 😃

    Ehm gibt es gute Tutorials zum Thema? Die Erklärung von Rapha war zwar gut, aber grad im Bezug auf Background-Änderung und so etwas kurz 😉

    Zu was genau?
    Das mit dem Hintergrund habe ich folgendermaßen gemeint:
    Du "zeichnest" den Hintergrund des Fensters in WM_PAINT selbst (und hast die Farbe in einer Variable gespeichert).
    Dann kannst du einfach den Wert der Variable ändern und der Hintergrund ist geändert....tata 😃

    Grüße Rapha



  • Hi danke.
    Also ich hab da jetz n tolles Tutorial gefunden, dass sehr viel erklärt, aber das Ganze kommt mir für meine Zwecke zumindest weder sehr viel noch schwer vor! 🙂 Also so wund werden die Finger nich. Außerdem haben die ja dicke Hornhaut von der E-Gitarre. 😃

    Also los gehts!



  • Hi

    denial schrieb:

    Also so wund werden die Finger nich. Außerdem haben die ja dicke Hornhaut von der E-Gitarre.

    Solange du nur ein Programm schreibst, das die Hintergrundfarbe ändern kann 😉

    denial schrieb:

    Außerdem haben die ja dicke Hornhaut von der E-Gitarre.

    Unter abgestorbenen Fingerkuppen läuft nichts 😃

    Grüße Rapha



  • Da du dich ja nicht mit der MFC zu programmieren scheinst, verschieb ich dich auch mal ins WinAPI-Forum. ➡



  • simon.phoenix schrieb:

    MFC sind einfach C++, WINAPI ist C.

    Diese Aussage geht an der Wahrheit vorbei.

    Wer MFC als C++ bezeichnet, verwechselt "C++" und "C mit Klassen".



  • Zum Ändern der Hintergrundfarbe eines Fensters empfiehlt sich folgendes Makro(sofern man den Hintergrund nicht selbst zeichnet):

    #define SetBKColor(hwnd,color) ((BOOL)SendMessage((hwnd),(EM_SETBKGNDCOLOR),(WPARAM)0,(LPARAM)(color)));
    


  • Warum nicht so?

    inline bool SetBKColor(HWND hWnd, COLORREF color)
    {
        return SendMessage(hWnd, EM_SETBKGNDCOLOR, 0, static_cast<LPARAM>(color));
    }
    

    Wenn er eine .cpp-Datei schreibt (was anzunehmen ist), sind inline-Funktionen den Makros immer vorzuziehen.

    edit: GDI hat bereits die Funktion SetBkColor. Es ist sehr unübersichtlich, dann noch eine Funktion SetBKColor anzubieten. Besser wäre so was wie SetWindowBkColor.



  • Ich verwende die Makroversion, weil sie nicht gefährlich ist und keinen Funktionscode erzeugt. Für das TreeView-Control gibt es haufenweise solcher Makros. Stell dir vor, du inkludierst die entsprechende Header-Datei und deine Exe-Datei bläht sich unnötigerweise auf...

    Generell sind Makros gefährlich, aber nur für Anfänger 😉



  • Aziz schrieb:

    Ich verwende die Makroversion, weil sie nicht gefährlich ist und keinen Funktionscode erzeugt.

    a) Mag sein, dass dieses eine Makro nicht gefährlich ist. Dann verschreibst du dich einmal (passiert jedem mal) und suchst längere Zeit nach dem Fehler.
    b) Funktionscode? Wo wird bei meiner Funktion Funktionscode erzeugt? Es wird genau (bytegenau) derselbe Code erzeugt wie bei deinem Makro. Mit dem Unterschied, dass meine Funktion Typsicherheit bietet und debugbar ist.

    Aziz schrieb:

    Für das TreeView-Control gibt es haufenweise solcher Makros.

    Stellt sich die Frage ob dieses Design ein Vorbild ist.

    Aziz schrieb:

    Stell dir vor, du inkludierst die entsprechende Header-Datei und deine Exe-Datei bläht sich unnötigerweise auf...

    Das ist bei inline-Funktionen definitiv nicht der Fall.



  • cd9000 schrieb:

    simon.phoenix schrieb:

    MFC sind einfach C++, WINAPI ist C.

    Diese Aussage geht an der Wahrheit vorbei.

    Wer MFC als C++ bezeichnet, verwechselt "C++" und "C mit Klassen".

    Was ist mit Templates (Template-Container) und Exceptions (CException, etc.)?

    edit: Will damit nicht sagen, dass MFC wirklich dem Ideal von C++ entspricht, aber es ist imho bisschen mehr als ein "C mit Klassen".



  • Funktionscode? Wo wird bei meiner Funktion Funktionscode erzeugt? Es wird genau (bytegenau) derselbe Code erzeugt wie bei deinem Makro. Mit dem Unterschied, dass meine Funktion Typsicherheit bietet und debugbar ist.

    Ok, ich geb mich geschlagen 😉



  • Danke für die Antworten. Meine Fragen sind weitestgehend geklärt, und ich verstehe den Umgang nun langsam ziemlich gut, dank ein paar guter Tutorials (und euren Antworten natürlich :D)


Anmelden zum Antworten