Wo ist der Fehler?
-
Dieses Programm soll einfach nur piepen (MB_OK) wenn das Passwort "Interkom" eingegeben wurde.Es piept aber nicht.
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_EXCLAMATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // Name der Fensterklasse TEXT ("Das erste echte Programm"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // 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 ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; static HWND hEdit; static HWND hButton; PAINTSTRUCT ps ; RECT rect ; const char szText[] = "Hallo, dies ist der Text."; char static buffer[16]; const char pw[] = "Interkom"; switch (message) { case WM_CREATE: { hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", buffer, // <- das ist der Inhalt der Editfelds WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); hButton = CreateWindow("button","Login", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); } return 0 ; case WM_SIZE: MoveWindow(hEdit, 0, 0, 100, 20, TRUE); MoveWindow(hButton, 0, 20, 100, 20, TRUE); return 0; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_COMMAND: { if (lParam == (LPARAM)hButton) { if (HIWORD(wParam) == BN_CLICKED) { if(buffer==pw) MessageBeep(MB_OK); } } } return 0; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
-
Das liegt daran, dass du Arrays nicht inhaltlich mit == vergleichen kannst. Dabei werden nur die Adressen verglichen, und das ergibt bei dir immer false.
Stichwort: strcmp.
-
weisst du buffer ueberhaupt irgendwo den wert aus deinem editcontrol zu? oder hab ich mich da verguckt??
-
case WM_COMMAND: { if (lParam == (LPARAM)hButton) { if (HIWORD(wParam) == BN_CLICKED) { GetWindowText( hEdit, buffer, 15 ); if( strcmp( buffer, pw ) == 0 ) MessageBeep( 1 ); } } } return 0;