Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
C++ Drehregler
von Plapperkatze am 17.Februar 2006 um 20:05
zurück zur Kategorie "Tutorials"

Es gibt in Windows diese TrackBars (Schieberegler). Etwas ähnliches habe ich hier gebastelt, eine Drehregler-Klasse. Ich habe ein Demoprogramm gemacht, hier ist ein Screenshot:



Ihr benötigt einen *.cpp Quelltext und müsst mit include "knobclass.cpp" den Drehknopf einbinden. Nun kann ein Drehknopf erzeugt werden mit:
KNOB knob(30,30,120,0,255,10); // x,y,breite,minimum,maximum,geschwindigkeit

In der Callback Procedure (also WndProc etc.) muss nun noch folgendes stehen:
knob.knobProc(hWnd,message,wParam,lParam);

Nun habt ihr einen Drehregler mit 120 pixel breite/höhe in left,top = 30,30 eures Fensters erzeugt. Es akzeptiert Werte zwischen 0 und 255. Die Drehgeschwindigkeit des Knopfes ist der letzte Wert, hier 10.

Die Datei "knobclass.cpp" ist folgendermassen aufgebaut:
class KNOB
{
 private:
   //-------------------
   int x,y,width;
   double minval,maxval,speed;
   int mouseY,mouseX,mouseOffset;
   BOOL lButtonDown;
   HBITMAP hKnobBmp;
   //-------------------
 public:
   //-------------------
   KNOB();
   KNOB(int ix,int iy,int iwidth,double dminval,double dmaxval,double dspeed);
   void knobProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
   ~KNOB();
   //-------------------
   double knobValue;
   //-------------------
};

KNOB::KNOB()
{
 x=0;
 y=0;
 width=40;
 minval=0;
 maxval=1;
 speed=1;
 knobValue=minval;
 mouseOffset=0;
 lButtonDown=FALSE;
}

KNOB::KNOB(int ix,int iy,int iwidth,double dminval,double dmaxval,double dspeed)
{
 x=ix;
 y=iy;
 width=iwidth;
 minval=dminval;
 maxval=dmaxval;
 speed=dspeed;
 knobValue=minval;
 mouseOffset=0;
 lButtonDown=FALSE;
}

KNOB::~KNOB()
{
 DeleteObject(hKnobBmp);
}

void KNOB::knobProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HDC hDC,hKnobDC;
 HBRUSH hBrush;
 HPEN hPen;

 switch (message)
 {
    case WM_CREATE:
      hKnobBmp=CreateBitmap(width,width,1,32,NULL);
      if(!hKnobBmp)MessageBox(NULL,"bla","blub",MB_OK|MB_ICONINFORMATION);
      break;

    case WM_LBUTTONDOWN:
      mouseOffset=mouseY;
      lButtonDown=TRUE;
      break;

    case WM_MOUSEMOVE:
      mouseX=HIWORD(lParam);
      mouseY=HIWORD(lParam);
      if(lButtonDown)
      {        
        knobValue+=((float)mouseOffset-(float)mouseY)*speed/5;
        if(knobValue<minval)knobValue=minval;
        if(knobValue>maxval)knobValue=maxval;
        mouseOffset=mouseY;
        InvalidateRect(hWnd,NULL,FALSE);
      }
      break;

    case WM_LBUTTONUP:
      lButtonDown=FALSE;
      break;

    case WM_PAINT:
      hDC = GetDC(hWnd);
      hKnobDC=CreateCompatibleDC(hDC);
      SelectObject(hKnobDC,hKnobBmp);

      BitBlt(hKnobDC,0,0,width,width,hDC,x,y,SRCCOPY);

        hPen=CreatePen(PS_SOLID,1,RGB(55,55,55));
        hBrush=CreateSolidBrush(RGB(55,55,55));
        SelectObject(hKnobDC,hPen);
        SelectObject(hKnobDC,hBrush);
        Ellipse(hKnobDC,0,0,width,width);
        DeleteObject(hPen);
        DeleteObject(hBrush);
        hPen=CreatePen(PS_SOLID,1,RGB(85,85,85));
        hBrush=CreateSolidBrush(RGB(15,15,95));
        SelectObject(hKnobDC,hPen);
        SelectObject(hKnobDC,hBrush);
        Ellipse(hKnobDC,width/10,width/10,width-width/10,width-width/10);
        DeleteObject(hPen);
        DeleteObject(hBrush);
        hPen=CreatePen(PS_SOLID,1,RGB(255,255,55));
        SelectObject(hKnobDC,hPen);
        {
          int x1,y1,x2,y2;
          double paintVal=-knobValue*(4.71239+0.32)/(maxval-minval);
         
          x1=sin(paintVal-0.6)*width*5/20+width/2;
          y1=cos(paintVal-0.6)*width*5/20+width/2;
          x2=sin(paintVal-0.6)*width*8/20+width/2;
          y2=cos(paintVal-0.6)*width*8/20+width/2;  
          MoveToEx(hKnobDC,x1,y1,NULL);
          LineTo(hKnobDC,x2,y2);
        }
        DeleteObject(hPen);

      BitBlt(hDC,x,y,width,width,hKnobDC,0,0,SRCCOPY);
      DeleteDC(hKnobDC);
      DeleteDC(hDC);
      break;
 }
 return;
}

Das Download-Paket ist hier:
http://katze.dead-men.de/upload/20_drehknopf5.rar

gruesse, die plapperkatz

zurück zur Kategorie "Tutorials"
[0 Kommentare]

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 215314 Besucher seit dem 23.01.2012 Login