JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=2f6d23464f8124bf17961d5eccae5a42Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Win-Api Features...
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 07.07.2007, 17:12    Titel: Win-Api Features... Antworten mit Zitat

Hi,

ehm ich würde gerne wissen wie diese Features in C++ heißen die ich auf dem Screenshot eingekreist habe, damit ich sie auch in der msdn finden kann:

(Noch besser wäre natürlich, wenn ihr mir erklären könntet wie man diese Features verwendet)


Mir ist schon klar, dass das alles eine Art von Fenstern ist, aber ich will halt wissen welche ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 07.07.2007, 17:27    Titel: Antworten mit Zitat

- ListBox/DataView (das Grosse)
- Panel (das mit "Add")
- CheckBox (das mit dem Häkchen)
- GroupBox ("Auswahl")

Kenne mich mit GUI Programmierung mit rein WinAPI nicht genug aus um dir dazu näher was zu erklären.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 07.07.2007, 17:57    Titel: Antworten mit Zitat

Bohhaa in der msdn wird das ja mal wieder ganz gut erklärt -.-

Also ich checks i-wie net ... grml...

Kann einer evtl das etwas näher erklären??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.07.2007, 19:02    Titel: Antworten mit Zitat

such mal nach WInAPI und Tutorials. Das ganze ist sehr komplex, wenn man noch keine Ahnung von WinAPI hat, dauert es bestimmt mehrere Wochen, bis man das alles so hinbekommt.
Daher wird wohl niemand schnell mal ein Tut machen.

Achja: (um ein Klugscheißer zu sein): Das sind keine C++ Features sondern WinAPI Features. In C++ benutzt du lediglich einige Funktionen und Variablentypen (Strukturen und typedefs also).
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 07.07.2007, 19:12    Titel: Antworten mit Zitat

CheckBox, GroupBox, RadioButton

Sind alles BUTTON Controls. Alle Typen werden hier erklärt: http://msdn2.microsoft.com/en-us/library/ms673344.aspx
Hier nochmal ein Link zu den Konstanten:
http://msdn2.microsoft.com/en-us/library/ms673347.aspx

ListView

Wird hier erklärt: http://msdn2.microsoft.com/en-us/library/ms670559.aspx
Im Screenshot ist der Style LVS_REPORT für die Reportansicht und LVS_EX_GRIDLINES für die Gitterlinien gesetzt.

Und ja: in der MSDN wird es gut erklärt!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 07.07.2007, 19:19    Titel: Antworten mit Zitat

Hama hama, hatte die ganze Zeit da gesucht aba nixx gefunden, vielen dank, ich lese es mir mal durch. Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 08.07.2007, 10:08    Titel: Antworten mit Zitat

OK, also das erstellen der Buttons klappt schonmal.

Allerdings sind die in so nem alten Windows 98 Style, wenn ihr versteht , was ich meine.
Und ich würde es gerne so im Windows xp Style haben:



Hier nochmal der Code:

CPP:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   PSTR szCmdLine, int iCmdShow)
{
       HWND         hWnd;
       HWND         hButton, hButton2, hGroupbox, hAuswahl1, hAuswahl2, hAuswahl3, hCheckbox;
       MSG          msg;
       WNDCLASSEX   wc;

       // WindowClass definieren
        wc.cbSize          = sizeof(WNDCLASSEX);
        wc.style           = CS_CLASSDC;
        wc.lpfnWndProc     = WndProc;
        wc.cbClsExtra      = 0;
        wc.cbWndExtra      = 0;
        wc.hInstance       = hInstance;
        wc.hIcon           = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
        wc.hIconSm         = wc.hIcon;
        wc.hCursor         = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_ARROW));
        wc.hbrBackground   = GetSysColorBrush(COLOR_3DFACE);
        wc.lpszMenuName    = NULL;
        wc.lpszClassName   = "Fenster";

       // WindowClass registreiren
        RegisterClassEx(&wc);

       // Fenster definieren
        hWnd = CreateWindow("Fenster",
                       "Titelleiste",
                       WS_CAPTION | WS_SYSMENU,
                       CW_USEDEFAULT,          /* X-Position auf dem Monitor */
                       CW_USEDEFAULT,          /* Y-Position auf dem Monitor */
                       255,                    /* Fensterbreite              */
                       180,                    /* Fensterhoehe               */
                       NULL,
                       NULL,
                       hInstance,
                       NULL);

       // Button 1
        hButton = CreateWindow("BUTTON",
                       "OK",
                       WS_VISIBLE | WS_CHILD ,
                       160, 15,
                       75, 25,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hButton) return FALSE;

        // Button 2
        hButton2 = CreateWindow("BUTTON",
                       "Abbrechen",
                       WS_VISIBLE | WS_CHILD ,
                       160, 45,
                       75, 25,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hButton2) return FALSE;

        // Auswahl 1
        hAuswahl1 = CreateWindow("BUTTON",
                       "Auswahl 1",
                       WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
                       20, 30,
                       90, 20,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hAuswahl1) return FALSE;

        // Auswahl 2
        hAuswahl2 = CreateWindow("BUTTON",
                       "Auswahl 2",
                       WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
                       20, 50,
                       90, 20,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hAuswahl2) return FALSE;

        // Auswahl 3
        hAuswahl3 = CreateWindow("BUTTON",
                       "Auswahl 3",
                       WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
                       20, 70,
                       90, 20,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hAuswahl3) return FALSE;

        // Checkbox
        hCheckbox = CreateWindow("BUTTON",
                       "Hacken ?",
                       WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
                       20, 110,
                       100, 20,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hCheckbox) return FALSE;

        // Groupbox
        hGroupbox = CreateWindow("BUTTON",
                       "Optionen",
                       WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
                       10, 10,
                       130, 90,
                       hWnd,
                       NULL,
                       hInstance,
                       NULL);
        if(!hGroupbox) return FALSE;


        // Die Schrift setzen
           SendMessage(hButton, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hButton2, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hAuswahl1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hAuswahl2, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hAuswahl3, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hCheckbox, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
           SendMessage(hGroupbox, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);


        // Fenster aqnzeigen lassen
         ShowWindow(hWnd, iCmdShow);
         UpdateWindow(hWnd);

        // Diese while-Schleifen da...
            while (GetMessage(&msg, NULL, 0, 0))
            {
                      TranslateMessage(&msg);
                      DispatchMessage(&msg);
            }

        // Ende der WinMain
           return msg.wParam;
}

// Callback
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
       switch (message)
   {
           case WM_DESTROY:
      {
         PostQuitMessage(0);
         return 0;
      }
   }
   return DefWindowProc(hWnd, message, wParam, lParam);
}


Wäre auch cool, wenn ihr mir sagen könntet wie ich den Source Code noch verbessern könnte Laughing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 08.07.2007, 10:34    Titel: Antworten mit Zitat

Dafür brauchst du ein entsprechendes Manifest. Hier gibts ein Tutorial zum Thema: http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=6222
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 08.07.2007, 10:49    Titel: Antworten mit Zitat

Gibt es so ein Tutorial auch für Code::Blocks ??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 08.07.2007, 10:53    Titel: Antworten mit Zitat

Weiß nicht, google wirds dir verraten! Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 09.07.2007, 14:03    Titel: Antworten mit Zitat

hmm na ok dann lasse ich das erstmal mit dem xp style.

Und komme zu einem anderen Problem:

Also ich habe ja jetzt diesen Code:
http://nopaste.de/p/areGNh0gq

Aussehen und so alles fertig - jetzt wollte ich mich aber an ein paar Funktionen ran machen.
Unzwar soll wenn ich auf OK klicke eine Messagebox angezeigt werden in der steht, Ob ich einen Hacken gesetzt habe und welche Auswahl ich getroffen habe.

Die Nachricht die sich je nach Auswahl ändert habe ich ja schon geschrieben:
CPP:
#include <iostream>
#include <string>

using namespace std;

string szAntwort = "Du hast Auswahl 1 getroffen und einen Hacken gesetzt! \n";

void szSatz(int iAusw, int wort)
{
   
    if(iAusw == 0)
    {
    size_t position = 0;
    position = szAntwort.find("Du hast Auswahl 1 getroffen und einen Hacken gesetzt! \n");
    szAntwort.replace(position, 56, "Du hast einen Hacken gesetzt! \n");         
    }
   
    if(iAusw == 2)
    {
    size_t position = 0;
    position = szAntwort.find("1");
    szAntwort.replace(position, 1, "2");
    }
   
    if(iAusw == 3)
    {
    size_t position = 0;
    position = szAntwort.find("1");
    szAntwort.replace(position, 1, "3");
    }
   
    if(wort == 1)
    {
    size_t position = 0;
    position = szAntwort.find("einen");
    szAntwort.replace(position, 5, "keinen");
    }       
}

int main()
{
   
    szSatz(0, 1);
   
    cout<< szAntwort.c_str();
   
    system("pause");
    return 0;
}



Aber sobald ich den Code in mein WinApi Programm da einfügen will, hat er schon Probleme mit dem String in der dritten Zeile (Siehe oben link zum WinApi Code)
Und ich habe keine Ahnung warum!

Und noch eine Frage habe ich:
Mit welchem Befehl checke ich ob Eine AUTOCHECKBOX oder eine AUTOGROUPBOX ausgewählt wurde ??


hoffe ihr könnt mir helfen... bin echt verzweifelt-.- Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.07.2007, 15:36    Titel: Antworten mit Zitat

RebornX hat Folgendes geschrieben:
Aber sobald ich den Code in mein WinApi Programm da einfügen will, hat er schon Probleme mit dem String in der dritten Zeile (Siehe oben link zum WinApi Code)
Und ich habe keine Ahnung warum!

Wir auch nicht. "hat er schon Probleme" ist recht ungenau Wink

Bei dem Code, den du hier gepostet hast, hast du "using namespace std;" mit drin(übrigens i.A. nicht empfehlenswert Wink ), was bei dem verlinkten Codeauschnitt nicht dabei ist. Könnte das das Problem sein?
Falls nicht, kann uns nur die genaue Fehlermeldung des Kompilers helfen.

RebornX hat Folgendes geschrieben:
Und noch eine Frage habe ich:
Mit welchem Befehl checke ich ob Eine AUTOCHECKBOX oder eine AUTOGROUPBOX ausgewählt wurde ??

Hmm...du kannst jedenfalls wenn WM_COMMAND gesendet wird aus wParam den Identifier des betroffenen Objektes holen. Diese ID steht in der Ressourcendatei. Soweit ich weiß hast du auch die Möglichkeit, IDs mehrfach zu vergeben, sofern du sie nicht näher spezifizieren willst. So haben z.B. oft statische Textfelder die ID "IDC_STATIC", wenn du sie nicht mehr zur Laufzeit ändern willst. Ansonsten einfach eindeutige IDs vergeben.
Mit LOWORD(Wparam) kannst du dann vergleichen, ob WM_COMMAND vom gewünschten Objekt gesendet wird.

PS: Der Haken hat nichts mit hacken zu tun. Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2007, 16:42    Titel: Antworten mit Zitat

RebornX hat Folgendes geschrieben:

CPP:
    if(iAusw == 0)
    {
    size_t position = 0;
    position = szAntwort.find("Du hast Auswahl 1 getroffen und einen Hacken gesetzt! \n");
    szAntwort.replace(position, 56, "Du hast einen Hacken gesetzt! \n");         
    }

Wieso machst du das so umständlich? Mach doch einfach:
CPP:
szAntwort = "Du hast einen Haken gesetzt! \n";


Zu dem eigtl Problem musst die uns schon die Fehlermeldung geben, wie TLOP sagt. Ansonsten ist wirklich das Fehlen von using namespace std das Naheliegenste

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 09.07.2007, 17:12    Titel: Antworten mit Zitat

Jo stimmt ihr hattet recht und ich Feife habe das nicht gesehen -.-
Also ich habe da jetzt std::string hin gemacht und es klappt.

Aber das mit den ID's verstehe ich noch nicht so richtig, wie soll ich dennen den ID's geben und wo sind die Konstanten dazu ??
Muss ich das bei CreateWindow noch machen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2007, 17:43    Titel: Antworten mit Zitat

TLOP war davon ausgegangen, dass du deine Objekte in einer Rc-Datei sammelst. Würdest du das machen, würden für jedes Objekt ID's definiert werden, über die du das Objekt dann identifizieren kannst. Da du diese aber im Code erzeugst, musst du das zugehörige Item der WM_COMMAND Nachricht anders zuordnen, z.B. so:
CPP:
case WM_COMMAND:
     HWND thisHandle = (HWND)lParam; // abs. C-Cast wegen WinAPI-Komp.
     if( thisHandle == hButton )
     {
           // Nachricht gehört zu hButton
     }
     else if( thisHandle == hAuswahl1 )
     {
          // Nachricht gehört zu hAuswahl1
     }
break;

Das ist nur eine Mölg., es geht natürlich auch anders, bspw. über das nachträgliche Festlegen der ID. Dazu kannst du dir mal die Funktion SetWindowLong in diesem Eintrag hier unter GWL_ID anschaun.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum