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;
    

Anmelden zum Antworten