SetScrollRange(...)



  • Ich habe mit dem Ressourceneditor einen Dialog mit Scrollbars erzeugt.
    Nun will ich mit

    SetScrollRange(GetDlgItem(hwnd,IDC_SCROLLBAR1),SB_CTL,0,255,FALSE);
    

    den Range einstellen. Mein Scrollbar macht aber nichts dergleichen.

    (Bin ich normal?) 🙂 😃

    Nee, was mach ich falsch?



  • Was liefert der Aufruf zurück? Evtl. dann noch GetLastError befragen?
    Oder mal hinten TRUE statt FALSE angeben



  • Der Aufruf liefert: true
    GetLastError liefert: Ungültiges Fensterhandle

    Es spielt auch keine Rolle ob true oder false steht.

    Gruss



  • scheissPi-ber[] schrieb:

    Der Aufruf liefert: true

    If the function succeeds, the return value is nonzero.

    Demnach scheint der Aufruf ja erfolgreich gewesen zu sein - der Fehler mit dem ungültigen Fensterhandle scheint also nichts damit zu tun zu haben, oder doch?

    scheissPi-ber[] schrieb:

    GetLastError liefert: Ungültiges Fensterhandle

    Dann scheinst du bei GetDlgItem(hwnd,IDC_SCROLLBAR1) etwas falsch zu machen. Entweder ist hwnd nicht das Parent der Scrollbar, oder deine ID ist falsch 😕
    Ermittle mal das Fenster-Handle vorher in einem extra Aufruf und prüfe, ob es gültig ist (ungleich NULL).



  • hmm ich denke diese Prob kanns auch nicht sein: Ich habe eine Zeile davor mal ein ShowScrollbar(GetDlgItem(hwnd,IDC_SCROLLBAR1),SB_CTL,false); gemacht und das hat auch geklappt.

    tja ich poste mal den code...villeicht ist sonst auch was voll falsch ;)!!

    #include <windows.h>
    #include <commctrl.h>
    
    #include "resource.h"
    
    LRESULT CALLBACK WindProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT ("DIALOG01") ;
    
        HWND hwnd;
        MSG msg;
        WNDCLASS windclass;
    
        windclass.style         = CS_HREDRAW | CS_VREDRAW;
        windclass.lpfnWndProc   = WindProc; 
        windclass.cbClsExtra    = 0;
        windclass.cbWndExtra    = DLGWINDOWEXTRA;    
        windclass.hInstance     = hInstance ;
        windclass.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
        windclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
        windclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
        windclass.lpszMenuName  = NULL;
        windclass.lpszClassName = szAppName ;
    
        if (!RegisterClass(&windclass))
            return 0 ;
    
        hwnd = CreateDialog(hInstance, szAppName, NULL,NULL) ; 
    
        InitCommonControls();    
    	ShowWindow (hwnd, iCmdShow);
    
    /////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////
    	//ShowScrollBar(GetDlgItem(hwnd,IDC_SCROLLBAR1),SB_CTL,false); //funktoniert normal
    	if(SetScrollRange(GetDlgItem(hwnd,IDC_SCROLLBAR1),SB_CTL,1,100,true)){
    		MessageBox(hwnd,"hat funktioniert","Juhu",NULL);
    		if(GetDlgItem(hwnd,IDC_SCROLLBAR1) != NULL)
    			MessageBox(hwnd,"GetDlgItem(hwnd,IDC_SCROLLBAR1) ist OK","OK",NULL);
    		if(hwnd != NULL)
    			MessageBox(hwnd,"hwnd ist OK","OK",NULL);
    		else{}
    	}
    	else
    		MessageBox(hwnd,"shit","voll fuck",NULL);
    
    	DWORD dwError = GetLastError();
    	HLOCAL hlocal = NULL;
    
    	BOOL fOk = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
    		NULL,
    		dwError,
    		MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
    		(PTSTR)&hlocal,
    		0,
    		NULL);
    	MessageBox(hwnd,(PTSTR)hlocal,"scheisse",NULL);
    /////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////
    
    	UpdateWindow(hwnd);
    
    	while (GetMessage (&msg, NULL, 0, 0)) 
        {
            TranslateMessage (&msg) ;
            DispatchMessage (&msg) ;
        }
        return msg.wParam ;
    }
    
    LRESULT CALLBACK WindProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
            case WM_CREATE:
    			{
    			}
            break;
            case WM_DESTROY:
                PostQuitMessage(0);
            break;
    		return 0 ;
        }
        return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    


  • - Du registrierst unnötiger Weise eine Fensterklasse (du erstellst ja nur den Dialog)
    - Du hast unnötiger Weise eine WndProc, dir fehlt aber eine DialogProc (musst du dann auch noch bei CreateDialog angeben)

    Ggf. wäre es für dich hier einfacher DialogBox anstelle von CreateDialog zu verwenden (wenn du nur ein Fenster hast ist doch eigentlich modal oder nicht modal egal).
    Ansonsten solltest du dir mal hier die Code-Samples anschauen 😉



  • thx...^^
    ich habe eben diese Version in einem Winapi tutorial gelesen.



  • Läuft es jetzt?



  • tja ich mache es jetzt mit CreateWindow(..) (und DialogBox(..))
    Ich verstehe nur nicht das man Tutorials schreibt bei welchen man nicht mal einen Scrollbar richtig benutzen kann 😉 (oder villeicht liegt es einfach an mir 😉 )

    Und jetzt geht es auch!!!!!


Anmelden zum Antworten