-
Hallo Community.
Ich habe letztens mit c++ begonnen und ein Programm fertiggestellt. Es führt einfache Rechnungen an Zufallsnummern durch. Bisher läuft alles in der Konsole und für ein anwenderfreundlicheres Aussehen möchte ich jetzt eine GUI schreiben.
Soweit so gut.
Problem:
Ich muss 1369 verschiedene Zahlen anzeigen.
http://img94.imageshack.us/img94/1454/tempacp.jpg
Die Textfelder kreiere ich mit 2 for loops.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
case WM_CREATE: { for(int i=1; i<=37; i++) { switch(i){ case 1: Buf="A"; break; case 13: Buf="M"; break;case 25: Buf="X"; break; case 2: Buf="B"; break; case 14: Buf="N"; break;case 26: Buf="Z"; break; case 3: Buf="C"; break; case 15: Buf="O"; break;case 27: Buf="AA"; break; case 4: Buf="D"; break; case 16: Buf="P"; break;case 28: Buf="AB"; break; case 5: Buf="E"; break; case 17: Buf="Q"; break;case 29: Buf="AC"; break; case 6: Buf="F"; break; case 18: Buf="R"; break;case 30: Buf="AD"; break; case 7: Buf="G"; break; case 19: Buf="S"; break;case 31: Buf="AE"; break; case 8: Buf="H"; break; case 20: Buf="T"; break;case 32: Buf="AF"; break; case 9: Buf="I"; break; case 21: Buf="U"; break;case 33: Buf="AG"; break; case 10:Buf="J"; break; case 22: Buf="V"; break;case 34: Buf="AH"; break; case 11:Buf="K"; break; case 23: Buf="W"; break;case 35: Buf="AI"; break; case 12:Buf="L"; break; case 24: Buf="X"; break;case 36: Buf="AJ"; break; case 37:Buf="AK"; } //Create Label //X CreateWindow(TEXT("STATIC"), TEXT(InttoconstChar(i)), WS_VISIBLE | WS_CHILD, (i*28)+3+x_Offset,y_Offset,20,13, hwnd, (HMENU) NULL, NULL, NULL); // Y CreateWindow(TEXT("STATIC"), TEXT(InttoconstChar(i)), WS_VISIBLE | WS_CHILD, x_Offset,(i*13)+7+y_Offset,20,13, hwnd, (HMENU) NULL, NULL, NULL); for(int ii=1; ii<=37; ii++){ CreateWindow(TEXT("EDIT"),TEXT(InttoconstChar(i)), WS_VISIBLE | WS_CHILD | WS_BORDER, (i*28)+1+x_Offset,(ii*13)+8+y_Offset,20,13, hwnd, (HMENU) NULL, NULL, NULL); } } break; }
Damit ich den Wert der einzelnen Felder ändernkann, muss jedes Feld eine einzigartige ID besitzen. 9ter Parameter der CreateWindow Funktion.
Frage1: Wie gebe ich jeder Textbox eine individuelle ID?
Frage2: Muss ich jeden Id am Anfang des Documents definieren?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
#define IDA1 #define IDA2 #define IDA3 #define IDA4 #define IDA5 #define IDA6 #define IDA7 #define IDA8 #define IDA9 #define IDA10 . . . #define IDAK37
(1369 Zeilen "define code" ist meiner Meinung nach nicht das Wahre. Ist es valide mehrere IDs in einer Zeile zu definieren?
Code :1
#define IDA1,IDA2,IDA3,...,IDAn
Frage3: Gibt es nicht eien viel bessere und elegantere Lösung für das Problem?
Danke
-
Hi und Willkommen bei tutorials.de

Kannst du einmal beschreiben, wofür das Ganze gut sein soll?
Weil über 1000 Textfelder zu haben ist irgendwie nicht so toll...
vielleicht gibt es eine andere Lösung?
Und du musst nicht alles mit den puren Winapibefehlen schreiben.
Es gibt viele Bibliotheken, die einem die GUIs abnehmen.
Oder machst du es absichtlich so, zu Lernzwecken etc?
Zu den #defines: Die müssen, wenn schon, auch noch einen Wert bekommen.
Und mehrere in einer Zeile sind nicht erlaubt.
Aber da du ja auch selber nicht 1000+ #defines haben willst:
Jede ID/Hanlde/etc ist doch nur ein int.
Schleifen usw. kann alles verwendet werden.
Kein Grund für so viele #defines.Geändert von sheel (06.09.11 um 19:59 Uhr) Grund: rund->Grund
Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Vielen dank fuer die nette Begruessung.
Wofuer das ganze?
Vereinfacht dargestellt:
Auf Knopfdruck wird eine zufallszahl erzeugt.
Beispiel 4 x 4
Anfang
[0][0][0][0]
[0][0][0][0]
[0][0][0][0]
[0][0][0][0]
Nachdem die erste Zufallszahl erzeugt wurde wird
[0][0][0][0]
[0][0][0][0]
[0][0][0][0]
[0][0][0][1]
Und beim naechsten:
[0][0][0][0] | [0][0][0][0] | [0][0][0][1] | [0][0][2][0]
[0][0][0][0] | [0][0][0][1] | [0][0][2][2] | [0][3][3][0]
[0][0][0][1] | [0][0][2][2] | [0][3][3][3] | [4][4][4][0]
[0][0][2][2] | [0][3][3][3] | [4][4][4][4] | [5][5][5][5]
etc ...
Dadurch entstehen 37 Verschiedene Zahlenreihen an dennen die gleichen Rechnungen durchgefuehrt werden sollen.
Ich habe mir schon QT angeschaut muss aber gestehen, dass es mir nicht so gefaellt. Ich bin ziemlich neu bei c++ und die ganzen neuen Sachen wie QStrings QObjects etc verwirren mich viel zu viel. Da bleibe ich lieber bei der guten alten win32 Api
.
Ich bin mir desswen bewusst, dass es so wie es im Moment ist, nicht der richtige Weg ist, da ich selber kein Platz mehr auf meinen Bildschirm habe
.
Kannst du das bitte nocheinmal genauer ausfuehren.Jede ID/Hanlde/etc ist doch nur ein int.
Schleifen usw. kann alles verwendet werden.
Kein rund für so viele #defines.
Danke fuer deine Hilfe
-
Du hast zurzeit vom Prinzip her sowas vor:
Das ist eigentlich auch in Ordnung so, wenn es um wenige bestimmte Elemente geht.Code cpp:1 2 3 4 5 6
#define BUTTON1 1 #define BUTTON2 2 #define TEXTBOX1 3 #define TEXTBOX2 4 ... CreateWindow(..., TEXTBOX1, ...);
Am Namen sieht man sofort, was gemeint ist.
TEXTBOX1 ist eben für Menschen leichter verständlich als 3.
Aber: Der Compiler (bzw. der PPZ-Teil davon) macht mit #defines ja nichts anderes, als die Werte an den passenden Stelleneinzusetzen.
Der Codeteil oben schaut für den Compiler so aus:
Die #defines existieren nicht, und anstelle der Namen stehen die Zahlen.Code cpp:1
CreateWindow(..., 3, ...);
Wenn man als Mensch den Code gleich so schreibt wird er genau so gut funktionieren.
Und wenn man jetzt noch ein "int id" macht und schreibt
Macht es für die Funktionsweise auch keinen Unterschied.Code cpp:1 2 3 4
int id; ... id = 3; CreateWindow(..., id, ...);
Und dieses id kann jetzt wie jedes andere int mit Schleifen weitergezählt werden usw...Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
super das mit der int als id funktioniert. Danke. Morgen mache ich mir dan einmal Gedanken wie ich das ganze Layout ein bisschen kompakter hinbekomme.
-
07.09.11 00:31 #6SE Tutorials.de Gastzugang
Ich habe mir mal die Mühe gemacht deinen Screenshot als Attachement neu zu uppen. Das Problem bei Fremdhostern ist einfach das dort die Daten nach einer gewissen Zeit verloren gehen ... was bei uns hier nicht der Fall ist wenn man seine Daten richtig einfügt.
Bitte beachte diese Funktion in deinen nächsten Posts.
-
Dabei würde sich die Einarbeitung in Qt durchaus lohnen, weil es meiner Meinung nach eines der besten, derzeit verfügbaren C++ - GUI-Toolkits ist. Dann könntest du dein Projekt z.B. mit einer Tabellenansicht (QTableWidget) realisieren, anstatt mit einer Million Editfeldern zu hantieren

Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Danke fuers Uploaden des Bildes. Ich werde es beim naechsten mal direkt hier hochladen.
Danke aber ich bleiber lieber bei der Win API.
Ich habe das ganze jetzt auf 5*37 Felder verkleinert, da die interesannten Sachen so oder so erst am Ende der Zahlenreihen auftauchen.
Ich moechte jetzt auf Knopfdruck eine Zufallszahl generieren lassen, aber leider bekomme ich folgenden Fehler
C:\... ||In function 'LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)':|
C:\...|150|error: 'wPARAM' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
case WM_COMMAND:{ if(LOWORD(wPARAM) == IDBUTTON){ /* if(FR){ resetArray(Random,99,38); srand(time(0)); FR=false; } else{ Random[GlobalCount]=rand(); GlobalCount++; if(GlobalCount >= 37)GlobalCount=0; }*/ break; }
Ich habe dieses Tutorial hier befolgt.
http://www.nickfrosty.com/videos/180...button-actionsGeändert von Roflmao (07.09.11 um 22:55 Uhr)
-
wPARAM und WPARAM ist ein Unterschied.
Und da wir hier bei C/C++ sind, statt php-Tags bitte cpp verwenden.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
07.09.11 21:51 #10
Ich würde da eher wxWidgets empfehlen. Naja du kannst ja mal das auch ausprobieren.
In weniger als 10 Minuten bekommt man genau eine kleine Anwendung, die du wolltest:

Auch die Forms musst du nicht mehr selber schreiben, dazu kannst du wxFormBuilder nutzen.
Hier das Programm: upload.zipmfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
# shell ich habe beides ausprobiert wPARAM und WPARAM beidesmal bekomme ich einen Error.
Bei WPARA ist es
#ComFreek. Danke ich werde es mir morgen einmal anschauen.C:\....\main.cpp|149|error: expected primary-expression before ')' token|
@ ich habe oben einmal die php tags durch cpp ersetzt danke
-
Welche Zeile ist denn 149?
Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Code cpp:
1
/*149*/ if(LOWORD(WPARAM) == IDBUTTON){
habe ich irgendeinen include vergessen?
-
Moment...WPARAM ist doch der Typname?
Zeig einmal die erste Zeile der Funktion (Returntyp, Funktionsname, Parameter)Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Edit: "ja man haette mal selber auf die parameter schauen sollen. wParam funktioniert ..."
Edit2:
Und schon stehe ich wieder vor einen Problem. Wie aender ich den Text der Textbox. Ich habe jetzt einfach einmal auf WindowSetText() getippt und so eine Funktion existiert sogar.
Die Beschreibung passt:
"Changes the text of the specified window's title bar (if it has one). If the specified window is a control, the text of the control is changed. "
Die Funktion erfordert einen HWND. Also wird warscheinlich der Wert benoetigt, der bei der WindowCreate() Funktion zurueckgegeben wurde.Code cpp:1 2 3 4
SetWindowText( __in HWND hWnd, __in_opt LPCTSTR lpString );
Soweit so gut, ich kenne es von anderen Programmiersprachen aber so, dass ich meine Objecte direkt per ID ansprechen kann. Wofuer habe ich meinen Textboxen ueberhaupt eine ID gegeben, wenn diese nirgends gebraucht wird.
Gibt es HWND arrays?
Pseudo Code
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
static HWND hwndTextbox[200] . . . WM_CREATE : { for(int i ....) { hwndTextbox[i] = CreateWindow(); { break; } WM_COMMAND : { for(int i ....) { SetWindowText(hwndTextbox[i],"Value"); } break; }
Geändert von Roflmao (07.09.11 um 23:43 Uhr)
Ähnliche Themen
-
win32 api
Von zerix im Forum C/C++Antworten: 2Letzter Beitrag: 04.11.06, 14:34 -
win32 api
Von elfvyn im Forum C/C++Antworten: 0Letzter Beitrag: 21.06.05, 13:15 -
c und win32?
Von psycho_matic im Forum C/C++Antworten: 3Letzter Beitrag: 16.02.02, 11:27 -
MSDE+apache_1.3.22-win32-x86+php-4.0.6-Win32+Verzweiflung
Von Volker im Forum Microsoft WindowsAntworten: 1Letzter Beitrag: 19.11.01, 02:51 -
MSDE+apache_1.3.22-win32-x86+php-4.0.6-Win32
Von Volker im Forum PHPAntworten: 1Letzter Beitrag: 18.11.01, 22:39



4Danke

Zitieren



Login






