Hilfe bei Editbox



  • Ich hab die suche auch schon benutzt aber nichts für mich gefunden. Ich bin schon verzweifelt.
    Ich bin in WInAPI ein noob und hab ein Problem mit dem Editbox, er ist in ein neuen fenster und das will ich nicht. Wie geht dass das Editbox in mein fenster drinnen ist wo auch der Button ist?

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                       PSTR szCmdLine, int iCmdShow)
    {
       MSG        msg;
       HWND       hWnd;
       WNDCLASS   wc;
    
       const char szAppName[]  = "Windows Buttons";
    
       wc.cbClsExtra           = 0;
       wc.cbWndExtra           = 0;
       wc.hbrBackground        = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
       wc.hCursor              = LoadCursor(NULL, IDC_ARROW);
       wc.hIcon                = LoadIcon(NULL, IDI_APPLICATION);
       wc.hInstance            = hInstance;
       wc.lpfnWndProc          = WndProc;
       wc.lpszClassName        = szAppName;
       wc.lpszMenuName         = NULL;
       wc.style                = CS_HREDRAW | CS_VREDRAW;
    
       RegisterClass(&wc);
    
       hWnd = CreateWindow(    szAppName,
                               szAppName,
                               WS_OVERLAPPEDWINDOW|WS_SYSMENU,
                               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 message, WPARAM wParam, LPARAM lParam)
    {
    	static HWND hButton,hEdit;
       int frage;
    
       switch (message)
       {
       case WM_CREATE:
          {
    		  hButton = CreateWindow(  "button",
                                      "Beenden",
                                      WS_CHILD | WS_VISIBLE,
                                      0, 0, 0, 0,
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                      NULL);
    		  hWnd=CreateWindow("edit","Text hier eingeben",
    			  WS_VISIBLE|WS_VSCROLL|ES_MULTILINE,
    			  CW_USEDEFAULT,CW_USEDEFAULT,200,200,
    			  hWnd,NULL,
    			  ((LPCREATESTRUCT) lParam) ->hInstance,NULL);
    
             return 0;
          }
       case WM_SIZE:
          {
    		  MoveWindow(hButton, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30, 
                                                               160, 22, TRUE);
             return 0;
          }
    	  case WM_COMMAND:
          {
             if (lParam == (LPARAM)hButton)
             {
                if (HIWORD(wParam) == BN_CLICKED)
                   frage=MessageBox(hWnd,"Wirklich beenden?","Frage",MB_ICONINFORMATION|MB_YESNO);
    			if(frage==IDYES)
    				SendMessage(hWnd, WM_CLOSE, 0, 0);
             }
             return 0;
          }
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    


  • Du solltes noch WS_CHILD angeben (wie beim Button).



  • ohh!
    Danke für die Hilfe!!!!!

    Mit freundlichen Grüßen

    Martin



  • Ich hab da mal noch 2 Fragen.

    1. meine Editbox schaut aus als ob es von der Windows Version 3.x oder so stammt. Sprich ohne Rand und nur ein weißer Streifen. Wie kann ich das ändern, und das der Chourser im ersten textfeld drinnen ist (beim Programmstart)

    2. Wo ist der unterschied zwischen CreateWindow und CreateWindowEx? Ich hab schon oft Befehle gefunden wo ein Ex am Ende war.

    Mit freundlichen Grüßen

    Martin



  • DarkShadow18 schrieb:

    1. meine Editbox schaut aus als ob es von der Windows Version 3.x oder so stammt. Sprich ohne Rand und nur ein weißer Streifen.

    Schau dir mal die (extended) window styles näher an 🙂

    DarkShadow18 schrieb:

    Wie kann ich das ändern, und das der Chourser im ersten textfeld drinnen ist (beim Programmstart)

    SetFocus in WM_CREATE sollte helfen...

    DarkShadow18 schrieb:

    2. Wo ist der unterschied zwischen CreateWindow und CreateWindowEx? Ich hab schon oft Befehle gefunden wo ein Ex am Ende war.

    Naja, die Varianten mit Ex sind eben Erweiterungen von alten Funktionen - in diesem Falle um noch einen extended window style angeben zu können.



  • Das mit dem aussehen von der Editbox bin ich gerade drauf gekommen.

    Aber danke für den hinweiß

    Mit freundlichen Grüßen

    Martin



  • Bei mein Fenster hab ich den hintergrund grau. und wenn ich jetzt ein text hin schreibe dann ist der hintergrund vom text weiß kann ich das ändern?

    case WM_PAINT:
    		  {
    			  PAINTSTRUCT ps;
    			  HDC hDC;
    			  const char vorname[]="Vorname:";
    			  hDC=BeginPaint(hWnd,&ps);
    			  {
    				  TextOut(hDC,50,55,vorname,sizeof(vorname)-1);
    			  }
    			  EndPaint(hWnd,&ps);
    			  return 0;
    		  }
    


  • Einfach nur die Doku lesen 😉

    The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color.

    => SetBkColor



  • danke



  • wolltest du das so:

    hWnd=CreateWindow("edit","Text hier eingeben", 
                  WS_VISIBLE|WS_VSCROLL|ES_MULTILINE, 
                  CW_USEDEFAULT,CW_USEDEFAULT,200,200, 
                  hWnd,NULL, 
                  ((LPCREATESTRUCT) lParam) ->hInstance,NULL);
    

    oder sollte es so aussehen:

    hEdit=CreateWindow("edit","Text hier eingeben", 
                  WS_VISIBLE|WS_VSCROLL|ES_MULTILINE, 
                  CW_USEDEFAULT,CW_USEDEFAULT,200,200, 
                  hWnd,NULL, 
                  ((LPCREATESTRUCT) lParam) ->hInstance,NULL);
    

    und wenn du hier noch was ergänzt:

    case WM_SIZE:
          {
              MoveWindow(hButton, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30, 
                                                               160, 22, TRUE);
              MoveWindow(hEdit, 10, 10, LOWORD(lParam) - 10, HIWORD(lParam) - 40,
                                                                TRUE);
             return 0;
          }
    

    mfg f.-th.


Anmelden zum Antworten