childfenster wird von button überdeckt



  • ich muß nochmal kurz stören.
    hoffentlich kann mir jemand sagen was ich verkehrt mache.
    ich habe ein childfenster erstellt welches von meinem button überdeckt wird und sich auch keinen rahmen geben lässt.

    #include <afxwin.h>
    #include <afxext.h>
    
    #define but1 1
    #define but2 2
    
    static LPTSTR text = TEXT("event");
    
    LRESULT MainWndProc(HWND,UINT,WPARAM,LPARAM);
    LRESULT WndProc(HWND,UINT,WPARAM,LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPTSTR szCmdLine, int iCmdShow)
    {
         HWND        hwnd ;
         MSG         msg ;
         WNDCLASS  wndclass;
    	 LPTSTR texth = TEXT("Interaktive-Wanderkarte");
    
    	 memset(&wndclass,0,sizeof(wndclass));
    
    	 wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;
    	 wndclass.lpfnWndProc = (WNDPROC)MainWndProc;
    	 wndclass.cbClsExtra = 0;
    	 wndclass.cbWndExtra = 0;
    	 wndclass.hIcon = NULL;
    	 wndclass.hInstance = hInstance;
    	 wndclass.hCursor = NULL;
    	 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    	 wndclass.lpszMenuName = NULL;
    	 wndclass.lpszClassName = texth;
    
    	 RegisterClass(&wndclass);
    
    	 wndclass.hIcon = NULL;
    	 wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    	 wndclass.lpfnWndProc = (WNDPROC)WndProc;
    	 wndclass.lpszClassName = text;
    
    	 RegisterClass(&wndclass);
    
         hwnd = CreateWindow(texth, texth,WS_VISIBLE,0, 0, 240, 320, NULL,NULL, hInstance, NULL);
    
         ShowWindow (hwnd, SW_SHOW) ;
         UpdateWindow (hwnd) ;
    
         while (GetMessage (&msg, NULL, 0, 0))
              {
    			 TranslateMessage (&msg) ;
    			 DispatchMessage (&msg) ;
    	 }
         return msg.wParam ;
    }
    
    LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static HWND hwnd,hwndbut1,hwndbut2,hwndchild;
    	static HINSTANCE hInstance;
    
      switch(message)
      {
      case WM_CREATE:
    
    	  hInstance=((LPCREATESTRUCT) lParam)->hInstance;
    
    	  hwndbut1 = CreateWindow (L"button", L"Child",WS_CHILD | WS_VISIBLE,30, 24, 75, 75, hWnd, (HMENU) but1,hInstance, NULL);
    	  hwndbut2 = CreateWindow (L"button", L"Exit",WS_CHILD | WS_VISIBLE,135, 123, 75, 75, hWnd, (HMENU) but2,hInstance, NULL);
    	  hwndchild = CreateWindow (text,text,WS_CHILD | WS_VISIBLE | WS_BORDER,0, 0, 100, 100, hWnd,NULL,hInstance, NULL);
    	  break;
    
      case WM_PAINT:
    
    	  break;
    
    	case WM_COMMAND:
    		switch(wParam)
    		{
    		case but2:
    			DestroyWindow(hWnd);
    			break;
    		}
    		break;
    
        case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
      }
    
      return DefWindowProc(hWnd, message, wParam, lParam);
    } 
    
    LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	  switch(message)
    	  {
    	  case WM_CREATE:		  
    		  break;
    	  }
    		  return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    ich würde mich auch über eine adresse über ein kleines tut über die erstellung von childs freuen.(komisch deutsch 🤡 )



  • Soll dein text-Window die Buttons überdecken, oder was ist dein Ziel?
    Den dünnen Rahmen wirst du wohl nicht sehen, weil du schon den Hintergrund schwarz hast (wobei sich die Rahmenfarbe sicher irgendwie einstellen lässt 🙄 )



  • nein.
    der sinn meiner übung soll sein ein childfenster zu schreiben welches das parentfenster verdeckt.



  • Wenn bisher der Button das Child überlagert gibt es (bei Beibehaltung dieser Positionierung und Ausmaße) nur noch die Möglichkeit, dass das Child den Button verdeckt 🙄
    Oder was genau stört dich bzw. was soll wo angezeigt werden?



  • ich wollte ein child haben in dem ich einfach was anzeige.
    weiterhin sollte mein hauptfenster ein paar buttons haben.

    leider wird das childfenster von den button verdeckt.
    das heißt es ist zwischen hauptfenster und button.
    und das ist ja wohl nicht normal.



  • hwndbut1 = CreateWindow (L"button", L"Child",WS_CHILD | WS_VISIBLE,30, 24, 75, 75, hWnd, (HMENU) but1,hInstance, NULL);
    hwndbut2 = CreateWindow (L"button", L"Exit",WS_CHILD | WS_VISIBLE,135, 123, 75, 75, hWnd, (HMENU) but2,hInstance, NULL);
    hwndchild = CreateWindow (text,text,WS_CHILD | WS_VISIBLE | WS_BORDER,0, 0, 100, 100, hWnd,NULL,hInstance, NULL);

    Wenn du die beiden Elemente so positionierst, dass sie sich überlagern, musst du doch wohl wissen, welches vorne sein soll 😕


Anmelden zum Antworten