Kontrollfenster zur Anwendung hinzufügen



  • 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