|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 07.07.2007, 16:12 Titel: Win-Api Features... |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.07.2007, 16:27 Titel: |
|
|
- 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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 07.07.2007, 16:57 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.07.2007, 18:02 Titel: |
|
|
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 |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 07.07.2007, 18:19 Titel: |
|
|
Hama hama, hatte die ganze Zeit da gesucht aba nixx gefunden, vielen dank, ich lese es mir mal durch. |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 08.07.2007, 09:08 Titel: |
|
|
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 |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 08.07.2007, 09:49 Titel: |
|
|
Gibt es so ein Tutorial auch für Code::Blocks ?? |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 08.07.2007, 09:53 Titel: |
|
|
Weiß nicht, google wirds dir verraten! |
|
Nach oben |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 09.07.2007, 13:03 Titel: |
|
|
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-.- |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.07.2007, 14:36 Titel: |
|
|
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
Bei dem Code, den du hier gepostet hast, hast du "using namespace std;" mit drin(übrigens i.A. nicht empfehlenswert ), 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. _________________ 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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2007, 15:42 Titel: |
|
|
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 |
|
|
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 09.07.2007, 16:12 Titel: |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2007, 16:43 Titel: |
|
|
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 |
|
|
|
|
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
|