Wer macht mir eine kleine GUI für mein Programm?
-
Ich hoffe, dass passt hier rein, aber habe nicht wirklich ein Forum gefunden
in das dies passen würde.Ich habe bisher noch nie mit einer GUI gearbeitet oder der WinAPI, sondern nur auf der Konsole.
Nun bräuchte ich aber eine ganz kleine GUI für ein kleines Progrämmchen und suche
einen netten Programmierer hier, der mir diese schnell schreiben könnte
Sie braucht wirklich nicht viel, nur folgendes:
1Feld links für eine Eingabe (sollte Platz für eine Zahl bis 999999 haben).
1Feld rechts für die Ausgabe (sollte Platz für eine Zahl bis 999999 haben).
Einen Button darunter (sollte mittig sein und "berechnen" drauftsehen).Nun das Programm muss wirklich nicht viel tun, es soll nur die Zahl in Feld1
nehmen, meiner Funktion übergeben und das Ergebnis meiner Funktion in Feld2
ausgeben.Die Funktion berechnet aus der eingegebenen Zahl das nächstkleinere vielfache
von 24.Genaugenommen tut die Funktion alles, man bräuchte sich also wirklich
nur um die GUI zu kümmern.Hier die Funktion, der Prototyp lautet wie folgt: long unsigned int (long unsigned int Zahl);
long unsigned int vielfaches (long unsigned int eingabe); long unsigned int vielfaches (long unsigned int eingabe) { long unsigned int zahl = 0; //Wenn kleiner 24, Zahl zurückgeben if (eingabe < 24) return eingabe; //So lange eingabe größer als 0 ist, das vielfache suchen while (eingabe > 0) { //Eingabe durch 24 Teilen, die Ganzzahl in zahl darauf mit 24 multiplizieren // Wenn Sie der Eingabe entspricht ist es ein vielfaches von 24 zahl = eingabe/24; if (zahl * 24 == eingabe) return eingabe; eingabe--; } }
Wäre wirklich super wenn mir da jemand helfen könnte, ich selbst hatte leider
noch nicht die Zeit mich mit GUIs bzw. der WinAPI zu befassen.
-
Falls du VisualStudio o.ä. besitzt kannst du dir einfach einen Dialog als Ressource basteln. Diesen rufst du mit DialogBox auf. (siehe dazu auch: http://c-plusplus.net/forum/viewtopic.php?t=39395 )
In DialogProc fängst du einfach den Buttonclickab, rufst GetDlgItemInt auf, um den Wert auszulesen, und setzt ihn mit SetDlgItemInt wieder.case WM_COMMAND: switch (LOWORD(wParam)) { case IDDESBERECHNENBUTTONS: { UINT zahl = GetDlgItemInt(hDlg,IDFELD1,NULL,FALSE); UINT erg = vielfaches(zahl); SetDlgItemInt(hDlg,IDFELD1,erg,FALSE); return TRUE; } } break;
PS: Im Beitrag aus den FAQ wird die Variable hDlg als hwnd bezeichnet
-
Ich habe kein Visual Studio oder ähnliches, habe bisher mit Dev C++ gearbeitet.
Deine Hilfe ist zwar gut gemeint, aber ich verstehe davon ehrlich gesagt nichts.
Da ich mich bisher eben noch nie mit grafischen Oberflächen auseinandergesetzt
habe weiß ich auch gar nicht wie ich da vorgehen soll.Da ich zur Zeit noch am
lernen der weiteren Grundlagen von C bin (Datenstrukturen,Algorithmen,...),habe
ich auch noch nicht das Wissen das wirklich zu verstehen
Daher wäre ich eben sehr froh, wenn mir jemand das machen könnte und den Quellcode
werde ich später auch einmal verstehen
-
Nur mal schnell zusammengezimmert - sieht daher nicht besonders aus
#include <windows.h> #define ID_INPUT 1 #define ID_OUTPUT 2 #define ID_BUTTON 3 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); long unsigned int vielfaches (long unsigned int eingabe); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Klassenname"); HWND hwnd; MSG msg; WNDCLASSEX wndclassex = {0}; wndclassex.cbSize = sizeof(WNDCLASSEX); wndclassex.style = CS_HREDRAW | CS_VREDRAW; wndclassex.lpfnWndProc = WndProc; wndclassex.cbClsExtra = 0; wndclassex.cbWndExtra = 0; wndclassex.hInstance = hInstance; wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW); wndclassex.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH); wndclassex.lpszMenuName = NULL; wndclassex.lpszClassName = szAppName; wndclassex.hIconSm = wndclassex.hIcon; if (!RegisterClassEx (&wndclassex)) { MessageBox (NULL, TEXT ("RegisterClassEx fehlgeschlagen!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil szAppName, // Name der Fensterklasse TEXT ("Fenstertitel"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters 320, // Fensterbreite 90, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL); // zusätzliche Parameter ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } // Die Hauptnachrichtenschleife LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|WS_BORDER,20,20,80,20,hwnd,(HMENU)ID_INPUT,((LPCREATESTRUCT)lParam)->hInstance,0); CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|WS_BORDER,110,20,80,20,hwnd,(HMENU)ID_OUTPUT,((LPCREATESTRUCT)lParam)->hInstance,0); CreateWindow("BUTTON","Berechnen",WS_VISIBLE|WS_CHILD|WS_BORDER,210,20,80,20,hwnd,(HMENU)ID_BUTTON,((LPCREATESTRUCT)lParam)->hInstance,0); return (0); case WM_COMMAND: switch (LOWORD(wParam)) { case ID_BUTTON: { UINT zahl = GetDlgItemInt(hwnd,ID_INPUT,NULL,FALSE); UINT erg = vielfaches(zahl); SetDlgItemInt(hwnd,ID_OUTPUT,erg,FALSE); return (0); } } break; case WM_DESTROY: PostQuitMessage (0); return (0); } return DefWindowProc (hwnd, message, wParam, lParam); } long unsigned int vielfaches (long unsigned int eingabe) { long unsigned int zahl = 0; //Wenn kleiner 24, Zahl zurückgeben if (eingabe < 24) return eingabe; //So lange eingabe größer als 0 ist, das vielfache suchen while (eingabe > 0) { //Eingabe durch 24 Teilen, die Ganzzahl in zahl darauf mit 24 multiplizieren // Wenn Sie der Eingabe entspricht ist es ein vielfaches von 24 zahl = eingabe/24; if (zahl * 24 == eingabe) return eingabe; eingabe--; } }
-
ich würde die edit's noch auf ES_NUMBER setzen
-
Vielen Dank, ist wirklich nett von dir.
Bekomme beim Linken, aber folgenden Fehler:[Linker error] undefined reference to `GetStockObject@4'
-
Gdi32.lib mitlinken
-
Wo finde ich die und wie linke ich die mit?
mit #include <gdi32.lib> geht es nicht, er findet sie auch nicht.Finde in einem Unterverzeichnis eine libgdi32.a aber die kann ich nicht über
#include <libgdi32.a> einbinden.
-
Wie das bei Dev C++ geht kann ich dir leider nicht sagen, da verschiebe ich dich mal
-
Du kannst mich doch nicht einfach so abschieben
Hast du die Möglichkeit das Topic zu ändern?Ist jetzt irgendwie unpassend.Mein Problem mit Dev C++ :
Ich habe mir die komplette Dev C++ Distribution heruntergeladen(die mit Compiler),
wie kann ich die gdi32.lib in mein Programm linken?
-
Wenn du deinen ersten Beitrag editierst kannst du imho den Titel ändern
-
Da war ich aber nocht nicht registriert.
-
habe zwar auch keinen devcpp, aber irgendwo gibt es da glaub ich etwas mit
Load Object files
dann die lib mitlinken... aber liest einfach mal die hilfe zu deiner ide.. ist sicher ein faq mit dabei.
-
Perfekt, habe es in der Hilfe gefunden.Und das programm funktioniert einwandfrei
Vielen Dank.