WINAPI Programmierung
-
Hallo,
ich bin gerade dabei WINAPI zu lernen und habe ein Problem, ich kann Text eingeben und ausgeben, jetzt wollte ich mir einen kleinen Taschenrechner programmieren, aber wie konvertiere ich die Strings in eine Integer, Float usw. und wieder zurück. Ich habe soweit nichts im internet gefunden "kann auch daran liegen das ich nicht wusste nach was ich suchen soll". In meinem Buch das ich gerade lese steht auch, dass man das nicht mehr von Handprogrammiert sondern, dass es da besondere Programme gibt mit denen man das Fenster zusammen klicken kann.
Hier ist mein Code:
(Ich habe mit den Sachen die ich im Internet gefunden habe experimentiert)#include <stdlib.h> #include <stdio.h> #include <windows.h> // Prototypen // LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); HWND ErstelleHauptfenster (HINSTANCE hInst); void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst); // IDs der Child-Fenster // #define ID_STATICTEXT 4000 #define ID_EDITBOX_1 4001 #define ID_EDITBOX_2 4002 #define ID_ERG 4003 #define ID_BTN_UEBERNEHMEN 4004 #define ID_BTN_BEENDEN 4005 // Globale Variablen // Don't do this at home! // HWND hText; // Handle für den statischen Text HWND hEditBox1; // Handle für die Editbox HWND hEditBox2; HWND hErg; HWND hUebernehmen; // Handle für Button "Übernehmen" HWND hBeenden; // Handle für Button "Beenden" HWND hHilfe; // Hauptprogramm // int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow) { HWND hWnd; // Fenster-Handle MSG message; // Nachricht // Hauptfenster erstellen hWnd = ErstelleHauptfenster (hInst); // Prüfen, ob alles glatt ging if (hWnd == NULL) return (0); // Alle Steuerelemente erstellen ErstelleSteuerelemente (hWnd, hInst); // Der "Herzschlag" des Programms // Hier werden alle Nachrichten abgeholt, // übersetzt und weitergeleitet // while (GetMessage (&message, NULL, 0, 0) ) { TranslateMessage (&message); DispatchMessage (&message); } // Programm beenden return (int)(message.wParam); } // WinMain // Erstelle Hauptfenster // // Hauptfenster erstellen und Handle zurückliefern // HWND ErstelleHauptfenster (HINSTANCE hInst) { HWND hWnd; // Fenster-Handle WNDCLASSEX windowclass; // Nachricht // Der Klassenname des Fensters ist frei wählbar const char szClassName[] = "Zweites Fenster"; // Struktur mit gewünschten Eigenschaften füllen // // Größe der Struktur zwischenspeichern windowclass.cbSize = sizeof (WNDCLASSEX); // Fenster soll beim Verschieben neu gezeichnet werden windowclass.style = CS_HREDRAW | CS_VREDRAW; // Zeiger auf Callback-Funktion windowclass.lpfnWndProc = WindowProc; // Keine erweiterten Einstellungen windowclass.cbClsExtra = 0; windowclass.cbWndExtra = 0; // Instanz speichern windowclass.hInstance = hInst; // Icons und Cursor festlegen windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); windowclass.hCursor = LoadCursor (NULL, IDC_ARROW); // Hintergrundfarbe festlegen windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1; // Ein Menü brauchen wir nicht windowclass.lpszMenuName = NULL; // Klassenname angeben windowclass.lpszClassName = szClassName; // Fensterklasse registrieren if (!RegisterClassEx (&windowclass) ) return (NULL); // Das Fenster erzeugen hWnd = CreateWindowEx (NULL, szClassName, "Plus Rechner", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 135, NULL, NULL, hInst, NULL); // Fensterhandle zurückgeben return (hWnd); } // ErstelleHauptfenster // ErstelleSteuerelemente // // Alle Steuerelemente erstellen // void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst) { // Statischen Text als Child-Fenster erstellen // hText = CreateWindow ("STATIC", "Zahlen Rechner", WS_VISIBLE | WS_CHILD | ES_CENTER, 0, 0, 300, 20, hWnd, (HMENU)ID_STATICTEXT, hInst, NULL); hErg = CreateWindow ("STATIC", "Ergebnis", WS_VISIBLE | WS_CHILD | ES_CENTER, 190, 20, 60, 20, hWnd, (HMENU)ID_ERG, hInst, NULL); // Editbox als Child-Fenster erstellen // hEditBox1 = CreateWindow ("EDIT", "Zahl_1", WS_VISIBLE | WS_CHILD | WS_BORDER, 40, 20, 60, 20, hWnd, (HMENU)ID_EDITBOX_1, hInst, NULL); hEditBox2 = CreateWindow ("EDIT", "Zahl_2", WS_VISIBLE | WS_CHILD | WS_BORDER, 120, 20, 60, 20, hWnd, (HMENU)ID_EDITBOX_2, hInst, NULL); // "Übernehmen"-Button als Child-Fenster erstellen // hUebernehmen = CreateWindow ("BUTTON", "Rechnen", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 20, 50, 95, 40, hWnd, (HMENU)ID_BTN_UEBERNEHMEN, hInst, NULL); // "Beenden"-Button als Child-Fenster erstellen // hBeenden = CreateWindow ("BUTTON", "Beenden", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 175, 50, 95, 40, hWnd, (HMENU)ID_BTN_BEENDEN, hInst, NULL); } // ErstelleSteuerelemente // Callback-Funktion zur Nachrichtenverarbeitung // LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // Messages auswerten switch (message) { // Fenster schließen? (Auch Alt-F4) case WM_DESTROY: { // Nachricht zum Beenden schicken PostQuitMessage (0); return (0); } // Ab hier die Nachrichten unserer Child-Fenster bearbeiten case WM_COMMAND: { switch (wParam) { // Wurde "Übernehmen" angeklickt? case ID_BTN_UEBERNEHMEN: { TCHAR szText[256]; TCHAR szText1[256]; int erg; int zahl1; int zahl2; // Text aus der Editbox holen GetWindowText (hEditBox1, szText, 256); GetWindowText (hEditBox2, szText1, 256); zahl1 = _ttoi(szText); zahl2 = _ttoi(szText1); erg = (zahl1 + zahl2); //erg = static_cast<int> (szText1 + szText); // Diesen Text in das Label schreiben und wsprintf(hErg,TEXT("%i"),erg); SetWindowText (hErg, erg); return (0); } // Wurde "Beenden" angeklickt? case ID_BTN_BEENDEN: { int Resultat; // Rückgabewert der Messagebox // Messagebox für Sicherheitsabfrage Resultat = MessageBox (hWnd, "Wirklich beenden?", "Programm beenden", MB_YESNO | MB_ICONQUESTION); // Wurde "Ja" angeklickt? if (Resultat == IDYES) { // Ja, also Programm beenden PostQuitMessage (0); return (0); } // Nein, also ganz normal weiter return (0); } } break; } break; } // Die Nachricht wurde nicht von uns verarbeitet, also // von Windows verarbeiten lassen return (DefWindowProc (hWnd, message, wParam, lParam) ); } // WindowProc
-
(Falsches Forum..)
Ich nehme mal an, es geht dabei (auch) um diesen Code-Teil?GetWindowText (hEditBox1, szText, 256); GetWindowText (hEditBox2, szText1, 256); zahl1 = _ttoi(szText); zahl2 = _ttoi(szText1); erg = (zahl1 + zahl2);Ich mache es immer so:
Für float Zahlen:
char szText[256], szText1[256]; float zahl1, zahl2, erg; SendMessage(hEditBox1, WM_GETTEXT, sizeof(szText), (ULONG)szText); SendMessage(hEditBox2, WM_GETTEXT, sizeof(szText1), (ULONG)szText1); zahl1 = atof(szText); zahl2 = atof(szText1); erg = zahl1 + zahl2;Für ganze Zahlen:
char szText[256], szText1[256]; int zahl1, zahl2, erg; SendMessage(hEditBox1, WM_GETTEXT, sizeof(szText), (ULONG)szText); SendMessage(hEditBox2, WM_GETTEXT, sizeof(szText1), (ULONG)szText1); zahl1 = atoi(szText); zahl2 = atoi(szText1); erg = zahl1 + zahl2;Als Bettlektüre empfehle ich:
http://www.cplusplus.com/reference/clibrary/cstdlib/Gruß,
DC
-
Boar danke für die schnelle hilfe ^^
werde es gleich mal ausprobieren!!!!
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.