Up- Down Control



  • Danke für die Antwort aber das hilft mir auch nicht weiter weil ich nicht weiß wie ich die Nachrichten (z.B. UDM_GETPOS) abfangen kann.



  • ...die fängt man in der Nachrichtenschleife des betreffenden Fensters ab.... genauso wie Du WM_PAINT, WM_CREATE usw. abfängst.....



  • WM_CREATE, WM_PAINT... fängt man doch nicht in der Nachrichtenschleife ab.



  • Wo dann?

    Wie nennst Du die Schleife denn, in der diese Nachrichten verarbeitet werden?



  • so wie du das sagst hört sich das (für mich) eher so an, als sollte er sowas machen.

    while(GetMessage(&msg, NULL, 0, 0)) {
    
    	if(msg.message == WM_PAINT)
    	{
    		//
    	}
    
    	TranslateMessage(&msg);
    	DispatchMessage(&msg);
    }
    


  • Blödsinn....

    Selbstverständlich meine ich die WinProc, wo ALLE Nachrichten letztendlich verarbeitet werden...

    Beispiel:

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC         hdc ;
         PAINTSTRUCT ps ;
         RECT        rect ;
    
         switch (message)
         {
         case WM_CREATE:
    	     SetTimer (hwnd, ID_TIMER, 1000, NULL);
             return 0 ;
    
         case WM_TIMER:
             Sekunde++;		 
             return 0;
    
         case WM_PAINT:
             hdc = BeginPaint (hwnd, &ps) ;
             GetClientRect (hwnd, &rect) ;
             DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
             EndPaint (hwnd, &ps) ;
             return 0 ;
    
         case WM_DESTROY:
             KillTimer (hwnd, ID_TIMER);
             PostQuitMessage (0) ;
             return 0 ;
         }   
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    


  • ja sicher. ich wußte auch das du das richtige meinst. Aber die WndProc ist doch nicht die Nachrichtenschleife.



  • Du fängst die Nachricht überhaupt nicht ab, sondern sendest sie an das Control:

    MSDN-Library schrieb:

    To send this message, call the SendMessage function as follows.

    lResult = SendMessage(   // returns LRESULT in lResult
     (HWND) hWndControl,     // handle to destination control
     (UINT) UDM_GETPOS,      // message ID
     (WPARAM) wParam,        // = 0; not used, must be zero 
     (LPARAM) lParam         // = 0; not used, must be zero
    );
    


  • Das ist auch noch nicht das was ich wissen wollte.
    Ich habe auch schon das MSDN abgegrast aber ich vertstehe das alles nicht
    deshalb wollte ich ja nach ein wenig richtigen Code bitten.
    Ich will nur wissen wie ich nun mitkriege ob inkrementiert, oder
    dekrementiert wurde, mit welchen Nachrichten vom Up/Down und unter welcher "WM_..." Nachricht.



  • The UDN_DELTAPOS notification is sent before the WM_VSCROLL or WM_HSCROLL message, which actually changes the control's position. This lets you examine, allow, modify, or disallow the change.

    Jetzt kannst du dir raussuchen, welche Nachricht du abfangen willst 😉



  • Danke für die Antowrt !

    Und wie läuft das jetzt mit der NMUPDOWN und NMHDR Struktur ???



  • Wo ist da dein Problem 😕



  • Ich hab mal folgenden Code für dich ergooglet - hoffe mal, er funktioniert auch 😃

    #define ID_UPDOWN 101
    #define UD_MIN 1
    #define UD_MAX 100
    
    // [...]
    
    static int nNo = 1;
    LPNMUPDOWN lpnmud;
    
    // [...]
    
    case WM_NOTIFY:
      if (wParam == (WPARAM)ID_UPDOWN)
      {
        lpnmud = (LPNMUPDOWN)lParam;
        if(lpnmud->hdr.code == UDN_DELTAPOS)
        {
          nNo = lpnmud->iPos + lpnmud->iDelta;
          if (nNo < UD_MIN) nNo = UD_MIN;
          if (nNo > UD_MAX) nNo = UD_MAX;
          //InvalidateRect(hWnd, NULL, TRUE);
        }
      }
      break;
    

Anmelden zum Antworten