Kontrollfenster zur Anwendung hinzufügen



  • Hallo.

    OK habe mich da jetzt halbwegs selbst durchgearbeitet und zumindest schonmal ein leeres Fenster zusätzlich zu den anderen geschaffen.

    Ich habe diese ganzen hWnd usw. für dieses Fenster neu erstellt und alle mit dem Zusatz CW für Control Window versehen, um diese unterschiedlich behandeln zu können.

    Jetzt isses so, dass ich ein paar Buttons in das Fenster reinpacken möchte, aber laut Tutorial mache ich dies in der LRESULT CALLBACK. Diese bekommt aber nur die normale hWnd und hinstance usw. und nicht die für das neue Fenster.

    Kann ich einfach ein neues LRESULT CALLBACK aufmachen, die nur die Sachen des neuen Fensters behandelt?
    Ich habs zumindest gerade versucht, und VC++ meckert zwar nicht aber es wird auch nichts zusätzliches angezeigt?

    Weiß jemand, wie ich das ganze angehen soll?

    Vielen Dank



  • Du musst eine neue WindowClass erstellen. Da kannst Du dann auch eine neue Callback Funktion angeben, in der Du die benötigten Controls erstellen kannst.



  • Die window-Class habe ich neu erstellt. Die Methode hier wird von der Main aufgerufen.

    void CreateControlWindow()
    {
    	HWND		hWndCW;
    	WNDCLASS	wcCW;
    	HINSTANCE hInstance = GetModuleHandle(NULL);
    
    	wcCW.style			 = CS_HREDRAW | CS_VREDRAW;
    	wcCW.lpfnWndProc	   = WndProcCW;
    	wcCW.cbClsExtra		= 0;
    	wcCW.cbWndExtra		= 0;
    	wcCW.hInstance		 = hInstance;
    	wcCW.hCursor		   = LoadCursor(NULL, IDC_ARROW);
    	wcCW.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
    	wcCW.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wcCW.lpszClassName	= szAppName;
    	wcCW.lpszMenuName	= NULL;
    
    	RegisterClass(&wcCW);
    
    	hWndCW = CreateWindow(szAppName,
    						"OGLWrapper Control Window",
    						WS_OVERLAPPEDWINDOW,
    						CW_USEDEFAULT,		// X-Position auf dem Monitor
    						CW_USEDEFAULT,		// Y-Position auf dem Monitor
    						500,	// Fensterbreite
    						200,	// Fensterhöhe
    						NULL,
    						NULL,
    						hInstance,
    						NULL);
    
    	ShowWindow(hWndCW, 1);
    	UpdateWindow(hWndCW);
    }
    

    Dazu habe ich folgende CALLBACK

    LRESULT CALLBACK WndProcCW(HWND hWndCW, UINT messageCW, WPARAM wParamCW, LPARAM lParamCW)
    {
    	static HWND hButton;
    	switch (messageCW)
    	{
    	case WM_CREATE:
          {
             hButton = CreateWindow(  "button",
                                      "button",
                                      WS_CHILD | WS_VISIBLE,
                                      0, 0, 0, 0,
                                      hWndCW,
                                      NULL,
                                      ((LPCREATESTRUCT) lParamCW) -> hInstance,
                                      NULL);
             return 0;
          }
       case WM_SIZE:
          {
             return 0;
          }
       case WM_COMMAND:
          {
             return 0;
          }
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWndCW, messageCW, wParamCW, lParamCW);
    }
    

    Ich bin mir bei der hinstance nicht so sicher, weil die auch vom anderen Fenster benutzt wird.



  • das ist schon richtig so. Siehe hierzu link



  • Ok, hab die Lösung selbst gefunden. Habe nur vergessen, etwas in die case-Anweisungen WM_SIZE und WM_COMMAND zu schreiben.



  • Bedenke nur: Ein Aufruf von PostQuitMessage beendet in jedem Fall dein Programm, egal wo (lies: in welcher WndProc) es aufgerufen wird.



  • Hallo alle nochmal.

    Ich möchte als nächstes einen Slider in mein Fenster einbauen, nur find ich kaum Infos dazu, wie man einen Slider einbaut, bzw. aus dem was ich gefunden habe, werde ich nicht schlau. (trackbar controls auf msdn)

    Kann ich einen Slider nicht einfach so einbauen, wie ich das mit den Buttons gemacht habe?

    danke



  • Was genau verstehst du denn unter einem Slider? Du kannst eine Scrollleiste verwenden, ist genauso einfach wie ein normaler Button.



  • Mit Slider meine ich einen ganz normalen "Regler", auch Trackbar genannt. Damit wollt ich einen float-Wert regulieren.

    Sinn des ganzen soll eine Regelung für mein Visualisierungs-Tool sein, damit ich dort die RGB-Werte jeweils erhöhen oder verringern kann. Der RGB-Wert soll dann mit dem float-Wert reguliert werden können.



  • Im Petzold steht ein Programm, bei dem mit SCROLLBARS die Farbwerte eingestellt werden. Vielleicht mal durchwühlen.



  • Also ich glaube du meinst eine Trackbar oder eine Scrollbar.

    Also zu Trackbar-Controls findest du ➡ hier Informationen, zu Scrollbar-Controls ➡ hier.


Anmelden zum Antworten