malloc
-
Achso, und um Himmels Willen das delete nachher nicht vergessen sonst gibts Memory-Leaks (Speicherlöcher).
-
anstatt da mit char arrays rumzuhantieren,
könnte man auch gleich std::string nehmen...
-
OK so weit so gut aber wo muss das delete hin???
muss Ici das unter WM_DESTROY reinschreiben oder wo sonst und wie muss ich das schreiben??
delete BufferEdit2 oder so ähnlich
Nochmals ich bin absoluter Neuling und versuche mit mit Tuturials durchsukämpfen
mfg
thunder
-
devil81 schrieb:
anstatt da mit char arrays rumzuhantieren,
könnte man auch gleich std::string nehmen...Ich denke es ist besser ihm zu zeigen wie man dynamischen Speicher verwendet anstatt ihm sofort std::string zu präsentieren und er benutzt weiter fleißig malloc.
-
@Thunder000019: Das delete machst du erst wenn du den Speicher nicht mehr brauchst.
-
Ich glaube bald werde ich lästig
aber wie der code für das delette aus zB. bei BufferEdit1
mfg
Thunder
-
Ich poste lieber mal den gesamten code.
#define STRICT #include <windows.h> #include <stdio.h> #include <stdlib.h> #include "resource.h" #define USERNAME 1 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK NavProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK PassProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(252,250,198)); wc.lpszClassName = "Startfenster"; wc.lpszMenuName = "IDR_HALLO"; RegisterClass(&wc); wc.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(255,0,0)); wc.lpfnWndProc = NavProc; wc.lpszClassName = "Navigation"; wc.lpszMenuName = "NULL"; RegisterClass(&wc); wc.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(252,250,198)); wc.lpfnWndProc = PassProc; wc.lpszClassName = "Passwortabfrage"; wc.lpszMenuName = "NULL"; RegisterClass(&wc); hWnd = CreateWindow("Startfenster", "Orthotherapia - Verwaltung V 1.0", WS_OVERLAPPED | WS_SYSMENU| WS_MINIMIZEBOX, 0, 0, 800, 600, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hNav, hPass; static int LogedIn = 0; HINSTANCE hInstance; switch (message) { case WM_CREATE: { hInstance = ((LPCREATESTRUCT) lParam) -> hInstance; hNav = CreateWindow("Navigation", "", WS_CHILD | WS_VISIBLE, 0, 0, 150, 575, hWnd, NULL, hInstance, NULL); if(LogedIn == 0) { hPass = CreateWindow("Passwortabfrage", "", WS_CHILD | WS_VISIBLE, 151, 0, 649, 575, hWnd, NULL, hInstance, NULL); } return 0; } case WM_PAINT: { UpdateWindow(hPass); UpdateWindow(hNav); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } LRESULT CALLBACK NavProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: { return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } LRESULT CALLBACK PassProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hEdit1, hEdit2, hButton1; static HBITMAP hBitmap ; static BITMAP bitmap; static HINSTANCE hInstance; switch (message) { case WM_CREATE: { hInstance = ((LPCREATESTRUCT) lParam) -> hInstance; hBitmap = (HBITMAP) LoadImage(hInstance, "Images/OrthoLogo.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE | LR_CREATEDIBSECTION); GetObject (hBitmap, sizeof (BITMAP), &bitmap) ; hEdit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 50, 135, 120, 20, hWnd, NULL, hInstance, NULL); SendMessage(hEdit1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); hEdit2 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | ES_PASSWORD, 50, 180, 120, 20, hWnd, NULL, hInstance, NULL); SendMessage(hEdit2, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); hButton1 = CreateWindow("button", "Anmelden", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 50, 210, 80, 20, hWnd, NULL, hInstance, NULL); SendMessage(hButton1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); return 0; } case WM_COMMAND: { if (lParam == (LPARAM)hButton1) { if (HIWORD(wParam) == BN_CLICKED) { char *BufferEdit1 = NULL; char *BufferEdit2 = NULL; char *Filename = NULL; char *Passwort = NULL; char Pfad[] = "Benutzer/"; int iLength; long iFileSize; FILE *fz; iLength = GetWindowTextLength(hEdit1); BufferEdit1 = new char[iLength]; GetWindowText(hEdit1, BufferEdit1, iLength+1); iLength = GetWindowTextLength(hEdit2); BufferEdit2 = new char[iLength]; GetWindowText(hEdit2, BufferEdit2, iLength+1); iLength = strlen(BufferEdit1) + strlen(Pfad); Filename = new char[iLength]; wsprintf(Filename, "%s%s.dat", Pfad, BufferEdit1); fz = fopen("Benutzer/Administrator.dat", "rb"); if(fz != NULL) { fseek(fz, 0, 2); iFileSize = ftell(fz); Passwort = new char[iFileSize]; fseek(fz, 0, SEEK_SET); fread(Passwort, 1, iFileSize, fz); fclose(fz); } MessageBox(0, Passwort, "Message", MB_OK); } } return 0; } case WM_PAINT: { HDC hDC, hDCMem; PAINTSTRUCT ps; RECT rect; GetClientRect(hWnd, &rect); hDC = BeginPaint(hWnd, &ps); { hDCMem = CreateCompatibleDC (hDC) ; SelectObject (hDCMem, hBitmap); SetBkMode(hDC, TRANSPARENT); SetTextColor(hDC, RGB(150,50,0)); rect.top = 10; rect.left =+ 50; rect.right = rect.right - 50; char szText[] = "Willkommen bei der Orthotherapia - Verwaltung"; DrawText(hDC, szText, sizeof(szText)-1, &rect,DT_SINGLELINE | DT_CENTER); SetTextColor(hDC, RGB(0,0,0)); rect.top = 80; char szText2[] = "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein."; DrawText(hDC, szText2, sizeof(szText2)-1, &rect,DT_SINGLELINE); rect.top = 115; char szText3[] = "Benutzername:"; DrawText(hDC, szText3, sizeof(szText3)-1, &rect,DT_SINGLELINE); rect.top = 160; char szText4[] = "Passwort: (min. 6 Zeichen)"; DrawText(hDC, szText4, sizeof(szText4)-1, &rect,DT_SINGLELINE); BitBlt (hDC, 250, 120, bitmap.bmWidth, bitmap.bmHeight, hDCMem, 0, 0, SRCCOPY) ; } EndPaint(hWnd, &ps); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }
Vieleicht könnte mir wer meine Fehler aufzählen
mfg
Thunder
-
Deinen WinAPI-Code habe ich nicht gelesen, der gehört auch nicht in dieses Forum und ist sowieso tiefstfinsteres C.
Erstens muss es aber, wenn überhaupt, delete[] BufferEdit2 heißen (weil new [] verwendet wurde), und zweitens solltest du lieber einen std::vector oder einen anderen Wrapper deiner Wahl nehmen, anstatt hier und da Zeiger rumschwirren zu lassen.#include <vector> ... std::vector<char> BufferEdit2; ... BufferEdit2.resize(iLength); GetWindowText(hEdit2, &BufferEdit2[0], iLength);
-
Achso, und Code-Tags gibt es in diesem Forum auch.
-
Da er schwerpunktmäßig C schreibt wäre es nicht besser in in das C-Forum zu verweisen, anstatt verzweifelt zu versuchen ihn zu C++
zu bekehren?
-
Thunder000019 wenn du willst verschibe ich den thread ins c forum, die arbeiten da täglich mit malloc