LRESULT -> Char[] bzw. long



  • Hi,

    also ich habe folgendes Programm:

    #include <windows.h>
    #include <windef.h>
    #include <winuser.h>
    
    #define edit1     1
    #define button1   2
    #define button2   3
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static char szAppName[] = "Name" ;
         HWND        hwnd ;
         MSG         msg ;
         WNDCLASSEX  wndclass ;
    
         wndclass.cbSize        = sizeof (wndclass) ;
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
    
         RegisterClassEx (&wndclass) ;
    
         hwnd = CreateWindow (szAppName, "WinAPI", WS_OVERLAPPEDWINDOW,
    			  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    			  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 iMsg, WPARAM wParam, LPARAM lParam)
    {
            static HWND hwndedit1, hwndbutton1, hwndbutton2; 
            LRESULT a = 1, b = 2;
            switch (iMsg)
            {
                   case WM_CREATE :
    			   hwndedit1 = CreateWindowEx(WS_EX_CLIENTEDGE ,"edit", NULL,WS_CHILD | WS_VISIBLE | ES_LEFT,
    				        0, 0, 150, 20, hwnd, (HMENU) edit1,
    				        ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    	           SendMessage(hwndedit1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    	           SendMessage(hwndedit1, WM_SETTEXT, 0, (long)"1");
    
    			   hwndbutton1 = CreateWindow ("button", "Bitte Klicken",
       	                     WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    				         0, 40, 150, 30, hwnd, (HMENU) button1,
    				         ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ; //Button "=" bzw. Berechne
                   SendMessage(hwndbutton1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    
                   hwndbutton2 = CreateWindow ("button", "Open MessageBox", 
                              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_VCENTER,
                              10, 100, 500, 30, hwnd, (HMENU) button2,
                              ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
                   SendMessage(hwndbutton2, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    
    			   return 0 ;
    
    		       case WM_COMMAND:
    			   switch (HIWORD(wParam))//Aktionsauswahl
    			   {
    			          case BN_CLICKED://Button gedrückt ?
    				      switch(LOWORD(wParam))//Welcher ?
    				      {
                               case button1:
    					       SendMessage(hwndedit1,WM_SETTEXT,0,(long)"Der Button wurde gedrückt");
    					       break;
    
    					       case button2:
    
                               if (SendMessage(hwndedit1, WM_GETTEXT, 0, 0) == (long)"1")                           
                               SendMessage (hwndedit1, WM_SETTEXT, 0, (long)"2");
                               else 
                               if (SendMessage(hwndedit1, WM_GETTEXT, 0, 0) == (long)"2")
                               SendMessage(hwndedit1, WM_SETTEXT, 0, (long)"1");
                               else
                               MessageBox(hwnd,"gvzgd","hbcfe",0);
    
                               break;
    				       }
    				       break;
    			  }
    			  return 0;
    
    			  case WM_DESTROY :
    				  PostQuitMessage (0) ;
    				  return 0 ;
    	 }
         return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }
    

    Also, das Programm soll eigentlich Wenn man den unteren Button drückt die 1 in der Editbox zu einer 2 machen oder andersrum.

    Ich denke der Fehler liegt hier drin:

    if (SendMessage(hwndedit1, WM_GETTEXT, 0, 0) ==(long)"1") [/code]
    

    aber ich hab keine ahnung wie ich ihn beheben kann.

    Kann mir jemand helfen? 😃

    Schonmal danke im voraus!





  • hey, cooler Tipp!

    Und jetzt funkt es sogar, vielen dank!

    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
            static HWND hwndedit1, hwndbutton1, hwndbutton2; 
            LRESULT a = 1, b = 2;
            int ilen;
            char puffer[10];
            switch (iMsg)
            {
                   case WM_CREATE :
    			   hwndedit1 = CreateWindowEx(WS_EX_CLIENTEDGE ,"edit", NULL,WS_CHILD | WS_VISIBLE | ES_LEFT,
    				        0, 0, 150, 20, hwnd, (HMENU) edit1,
    				        ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    	           SendMessage(hwndedit1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    
    			   hwndbutton1 = CreateWindow ("button", "Bitte Klicken",
       	                     WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    				         0, 40, 150, 30, hwnd, (HMENU) button1,
    				         ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ; //Button "=" bzw. Berechne
                   SendMessage(hwndbutton1, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
    
                   hwndbutton2 = CreateWindow ("button", "Open MessageBox", 
                              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_VCENTER,
                              10, 100, 500, 30, hwnd, (HMENU) button2,
                              ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
                   SendMessage(hwndbutton2, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
                   SendMessage(hwndedit1, WM_SETTEXT, 0, (long)"1");       
    
    			   return 0 ;
    
    		       case WM_COMMAND:
    			   switch (HIWORD(wParam))//Aktionsauswahl
    			   {
    			          case BN_CLICKED://Button gedrückt ?
    				      switch(LOWORD(wParam))//Welcher ?
    				      {
                               case button1:
    					       SendMessage(hwndedit1,WM_SETTEXT,0,(long)"Der Button wurde gedrückt");
    					       break;
    
    					       case button2: 	           
                               ilen = SendMessage(hwndedit1,WM_GETTEXTLENGTH,0,0);
                               SendMessage(hwndedit1, WM_GETTEXT, ilen+1, (long)puffer);
    
                               if (puffer[0] == '1')                           
                               SendMessage (hwndedit1, WM_SETTEXT, 0, (long)"2");
                               else 
                               if (puffer[0] == '2')
                               SendMessage(hwndedit1, WM_SETTEXT, 0, (long)"1");
                               else
                               MessageBox(hwnd,"gvzgd","hbcfe",0);
    
                               break;
    				       }
    				       break;
    			  }
    			  return 0;
    
    			  case WM_DESTROY :
    				  PostQuitMessage (0) ;
    				  return 0 ;
    	 }
         return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }
    


  • Naja... ich würde Dir nur mal Raten zu überprüfen, was passiert wenn man mehr als 10 Zeichen eingibt... (i.d.R. wird es abstürzen; aber vielleicht hast Du auch Glück...)



  • Ja, danke! 😃 😃


Anmelden zum Antworten