Eingabezeile mit Return



  • Hallo,

    ich brauche eine Eingabezeile mit Return (war schon oft, ich weiß). Problem ist, dass mein Compiler (Borland C++ Builder 2005) in der Unterklasse die Variable m_EditProc nicht mag, Fehler im Datentyp. Kann jemand mal nach Sinn und Unsinn durchschauen, ich bin völlig neu in Windows-Programmierung.

    (Ohne Unterklasse und ohne Return funktioniert das Programm.)

    Grüße,
    Martin

    // -----------------------------------------------------------------------------
    
    #include	<SysUtils.hpp>
    #include	<windows.h>
    
    // -----------------------------------------------------------------------------
    
    #define		ID_EDIT		1
    
    // -----------------------------------------------------------------------------
    
    TCHAR		szAppName[] = TEXT ("MTR--MTR") ;
    
    WNDPROC		m_EditProc;
    
    // -----------------------------------------------------------------------------
    
    LRESULT CALLBACK	WndProc			(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK	EditProc		(HWND, UINT, WPARAM, LPARAM);
    
    // -----------------------------------------------------------------------------
    //		START
    // -----------------------------------------------------------------------------
    
    int WINAPI WinMain (HINSTANCE hInstance,
    		    HINSTANCE hPrevInstance,
    		    PSTR      szCmdLine,
    		    int       iCmdShow)
    
    {
      HWND		hwnd;
      MSG		msg;
      WNDCLASS	wndclass;
    
      // WNDCLASSEX *wndclassex;
      // wndclassex = (WNDCLASSEX*) malloc (sizeof (WNDCLASSEX));
    
    //  wndclassex.cbSize        = sizeof (WNDCLASSEX);
      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;
    //  wndclassex.hIconSm       = LoadIcon (NULL, IDI_HAND);
    
      if (! RegisterClass (&wndclass))
         {
           MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"),
    		   szAppName, MB_ICONERROR);
           return     (0);
         }
    
      hwnd = CreateWindow (szAppName,		// Name Fensterklasse
    		       TEXT ("MTR"),		// Titel
    		       WS_OVERLAPPEDWINDOW,	// Stil
    		       100,			// x-Pos
    		       300,			// y-Pos
    		       600,			// Breite
    		       400,			// Hö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)
    
    {
      static HWND	hwndEdit;
    
      switch (message)
         {
         case WM_CREATE:
    
    	  hwndEdit = CreateWindow (TEXT ("edit"), NULL,
    			 WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | WS_BORDER,
    			 100, 200, 300, 20, hwnd, (HMENU) ID_EDIT,
    			 ((LPCREATESTRUCT) lParam)->hInstance, NULL);
    
    	  m_EditProc = (WNDPROC) SetWindowLongPtr (hwndEdit, GWLP_WNDPROC, (LONG_PTR) EditProc);
    
    	  return (0);
    
         case WM_SETFOCUS:
    	  SetFocus (hwndEdit);
    	  return (0);
    
         case WM_SIZE:
    	  MoveWindow (hwndEdit, 100, 200, 300, 20, TRUE);
    	  return (0);
    
         case WM_COMMAND:
    	  if (LOWORD (wParam) == ID_EDIT)
    	       if (HIWORD (wParam) == EN_ERRSPACE ||
    		   HIWORD (wParam) == EN_MAXTEXT)
    		  MessageBox (hwnd, TEXT ("Edit control out of space."),
    			      szAppName, MB_OK | MB_ICONSTOP);
    	  return (0);
    
         case WM_DESTROY:
    	  PostQuitMessage (0);
    	  return (0);
         }
    
      return (DefWindowProc (hwnd, message, wParam, lParam));
    }
    
    // -----------------------------------------------------------------------------
    
    #if	1
    
    LRESULT CALLBACK EditProc (HWND   hwnd,
                               UINT   msg, 
                               WPARAM wParam, 
                               LPARAM lParam)
    
    {
       LRESULT	rc;
    
        switch(msg)
        {
    	case WM_KEYDOWN:
    		    //Mach Was
    	break;
        }
    
      rc = CallWindowProc (m_EditProc, hwnd, msg, wParam, lParam);
    
      return (rc);
    }
    
    #endif
    
    // -----------------------------------------------------------------------------
    //		Dateiende:	mtr.cpp
    // -----------------------------------------------------------------------------
    

Anmelden zum Antworten