Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <conio.h>
- #include <cmath>
- #include <stdio.h>
- #include <string>
- #include <vector>
- using namespace std;
- ///Klasa* = CreateVButton(&Klasa, DrawFunc, AddDrawFunc, "tekst", hFont, STYLE, x, y, width, height, id, hParent, (void*)anydata, hInstance);
- #define CHECKBOX_ZDEFIONIOWANY 1
- #define CHECKBOX_STAN_AKTYWNY 1
- #define CHECKBOX_STAN_AKTYWNYNAJECHANY 2
- #define CHECKBOX_STAN_WCISNIETY 3
- #define CHECKBOX_STAN_WCISNIETYNAJECHANY 4
- #define CHECKBOX_STAN_NIEAKTYWNY 5
- #define CHECKBOX_STYL_Undefined 2
- #define CHECKBOX_STYL_Movable 4
- #define CHECKBOX_STYL_FastMovable 8
- #define CHECKBOX_STYL_SendMove 16
- #define CHECKBOX_STYL_SendBeforeMove 32
- #define CHECKBOX_STYL_StopXMove 64
- #define CHECKBOX_STYL_StopYMove 128
- #define CHECKBOX_STYL_IgnoreMoveRegion 256
- #define CHECKBOX_STYL_RegionCircle 512
- #define CHECKBOX_STYL_RegionTriangleLeft 1024
- #define CHECKBOX_STYL_RegionTriangleRight 2048
- #define CHECKBOX_STYL_RegionTriangleUp 4096
- #define CHECKBOX_STYL_RegionTriangleDown 8192
- #define CHECKBOX_STYL_AddIcon 16384
- #define CHECKBOX_STYL_SendCapture 32768
- #define CHECKBOX_BEFOREMOVE 2
- #define CHECKBOX_MOVE 4
- #define CHECKBOX_DBCLICK 8
- #define CHECKBOX_CLICK 16
- #define CHECKBOX_OUTOFREGION 32
- #define CHECKBOX_CAPTURE 64
- #define CHECKBOX_NOCAPTURE 128
- #define CHECKBOX_ADDDRAW 256
- #define CHECKBOX_DROPFILE 512
- #ifndef KURSORX
- #define KURSORX 2
- #endif // KURSORX
- #ifndef KURSORY
- #define KURSORY 4
- #endif // KURSORY
- #ifndef TEXTATT_AKTYWNY
- #define TEXTATT_AKTYWNY 2
- #endif // TEXTATT_AKTYWNY
- #ifndef TEXTATT_AKTYWNYNAJECHANY
- #define TEXTATT_AKTYWNYNAJECHANY 4
- #endif // TEXTATT_AKTYWNYNAJECHANY
- #ifndef TEXTATT_WCISNIETY
- #define TEXTATT_WCISNIETY 8
- #endif // TEXTATT_WCISNIETY
- #ifndef TEXTATT_WCISNIETYNAJECHANY
- #define TEXTATT_WCISNIETYNAJECHANY 16
- #endif // TEXTATT_WCISNIETYNAJECHANY
- #ifndef TEXTATT_NIEAKTYWNY
- #define TEXTATT_NIEAKTYWNY 32
- #endif // TEXTATT_NIEAKTYWNY
- typedef void( * CHECKBOXDRAW )( HWND hwnd, HDC *hDC , int width, int height);
- typedef void( * CHECKBOXADDDRAW )( HWND hwnd, HDC *hDC , int width, int height, void *wsk);
- BOOL RejestrujCheckBox( HINSTANCE hInst );
- LRESULT CALLBACK CheckBoxProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- class CreateVCheckBox{
- public:
- CreateVCheckBox(class CreateVCheckBox **wsk, CHECKBOXDRAW DrawFunc, CHECKBOXADDDRAW AddDrawFunc, char *tekst, HFONT myFont, DWORD myStyle, int x, int y, int Width, int Height, int ID, HWND hParent, void *myDane, HINSTANCE hInstance);
- ~CreateVCheckBox();
- void Destroy();
- HWND hWindow();
- void ActualizeWindowInfo(WINDOWINFO *wsk);
- int GetX();
- int GetY();
- void InfoSetX(int nowa);
- void InfoSetY(int nowa);
- void InfoSetWidth(int nowa);
- void InfoSetHeight(int nowa);
- int GetWindowWidth();
- int GetWindowHeight();
- void SetPos(POINT newPos);
- void SetSize(POINT newSize);
- int GetID();
- HDC GetHDC();
- void OdswiezCheckBox();
- DWORD GetStyle();
- void SetStyle(DWORD newStyle);
- int GetStan();
- void SetStan(int newStan);
- bool GetCapture();
- void SetCapture(bool newCapture);
- bool GetMove();
- void SetMove(bool newMove);
- bool GetDbClick();
- void SetDbClick(bool newValue);
- bool KursorWewnatrz();
- bool KursorWewnatrz(HRGN region, int x, int y, DWORD flags);
- void SetMoveRegion(int x, int y, int width, int height, DWORD flags);
- HRGN GetMoveRegion();
- void *GetDane();
- void SetDane(void *newDane);
- void SetTekst(char *newNapis);
- char *GetTekst();
- void SetFont(HFONT newFont);
- HFONT GetFont();
- void WyswietlTekst(HDC hDC);
- void ActualizeTextAttribute(POINT newTextPos, DWORD style, COLORREF newBackround, COLORREF newColour, int newAlign);
- POINT *GetTextPos();
- void SetTextPos(POINT newTextPos);
- void GetStartWindowSize(POINT *Point);
- void SetStartWindowSize(POINT Point);
- void Resetuj();
- void StopCurrentAction();
- bool GetStopAction();
- void SetStopAction(bool newAction);
- void GetIconPos(RECT *p); /// zrobic
- void SetIconPos(RECT *p); /// zrobic
- HDC GetIconDC(); /// zrobic
- void SetIconDC(HBITMAP hBitmap); /// zrobic
- CHECKBOXADDDRAW GetAddDrawFunc();
- POINT HelpVeriable;
- private:
- HWND hwnd_button;
- WINDOWINFO WindowInfo;
- HRGN hRegion;
- HRGN hMoveRegion;
- HRGN CreateRegion(int width, int height, DWORD flags);
- HBITMAP hBmp;
- HDC hDC;
- CHECKBOXDRAW hDrawFunc;
- CHECKBOXADDDRAW hAddDrawFunc;
- void ClearBitmap();
- void ClearDC();
- void NarysujCheckBox(int width, int height, DWORD flags);
- DWORD Style;
- int Stan;
- bool Capture;
- bool Move;
- bool dbclick;
- bool StopAction;
- void *Dane;
- char *Tekst;
- HFONT hFont;
- COLORREF Tlo[5];
- COLORREF Colour[5];
- int Align[5];
- POINT TextPos;
- HDC hDC_Icon;
- RECT IconPos;
- POINT StartWindowSize;
- };
- CreateVCheckBox::CreateVCheckBox(class CreateVCheckBox **wsk, CHECKBOXDRAW DrawFunc, CHECKBOXADDDRAW AddDrawFunc, char *tekst, HFONT myFont, DWORD myStyle, int x, int y, int Width, int Height, int ID, HWND hParent, void *myDane, HINSTANCE hInstance){
- if(!wsk)
- return;
- Style = myStyle;
- StartWindowSize.x = Width;
- StartWindowSize.y = Height;
- Dane = myDane;
- hDrawFunc = DrawFunc;
- hAddDrawFunc = AddDrawFunc;
- Stan = CHECKBOX_STAN_AKTYWNY;
- Capture = false;
- Move = false;
- dbclick = false;
- hRegion = 0;
- hBmp = 0;
- hDC = 0;
- hDC_Icon = 0;
- HRGN region = CreateRegion(Width, Height, myStyle);
- hRegion = CreateRegion(Width, Height, myStyle);
- hwnd_button = CreateWindowEx(WS_EX_COMPOSITED, "WH_VCHECKBOX", Tekst, WS_CHILD | WS_VISIBLE, x, y, Width, Height, hParent, (HMENU)ID, hInstance, (void*)wsk);
- WindowInfo.cbSize = sizeof(WINDOWINFO);
- GetWindowInfo(hwnd_button, &WindowInfo);
- SetWindowLong(hwnd_button, 0, (LONG)wsk);
- NarysujCheckBox(Width, Height, myStyle);
- SetWindowRgn(hwnd_button, region, true);
- WINDOWINFO WndInfo;
- WndInfo.cbSize = sizeof(WINDOWINFO);
- GetWindowInfo(hParent, &WndInfo);
- hMoveRegion = CreateRegion(WndInfo.rcClient.right - WndInfo.rcClient.left - Width, WndInfo.rcClient.bottom - WndInfo.rcClient.top - Height, Style);
- SetTekst(tekst);
- if(!myFont)
- SetFont(NULL);
- else
- hFont = myFont;
- POINT tekstpos;
- tekstpos.x = Width/2;
- tekstpos.y = 0;
- ActualizeTextAttribute(tekstpos, TEXTATT_AKTYWNY, TRANSPARENT, RGB(0, 0, 0), TA_CENTER);
- ActualizeTextAttribute(tekstpos, TEXTATT_WCISNIETY, TRANSPARENT, RGB(0, 100, 0), TA_CENTER);
- ActualizeTextAttribute(tekstpos, TEXTATT_AKTYWNYNAJECHANY, TRANSPARENT, RGB(200, 0, 200), TA_CENTER);
- ActualizeTextAttribute(tekstpos, TEXTATT_WCISNIETYNAJECHANY, TRANSPARENT, RGB(255, 255, 255), TA_CENTER);
- ActualizeTextAttribute(tekstpos, TEXTATT_NIEAKTYWNY, TRANSPARENT, RGB(100, 100, 100), TA_CENTER);
- SetIconPos(NULL);
- }
- CreateVCheckBox::~CreateVCheckBox(){
- delete hFont;
- ClearDC();
- ClearBitmap();
- delete Tekst;
- DeleteObject(hRegion);
- DeleteObject(hMoveRegion);
- }
- void CreateVCheckBox::Destroy(){
- DestroyWindow(hwnd_button);
- }
- HWND CreateVCheckBox::hWindow(){
- return hwnd_button;
- }
- void CreateVCheckBox::ActualizeWindowInfo(WINDOWINFO *wsk){
- if(!wsk)
- GetWindowInfo(hwnd_button, &WindowInfo);
- else
- GetWindowInfo(hwnd_button, wsk);
- }
- int CreateVCheckBox::GetX(){
- WINDOWINFO Info;
- GetWindowInfo(GetParent(hwnd_button), &Info);
- GetWindowInfo(hwnd_button, &WindowInfo);
- WindowInfo.rcClient.left = WindowInfo.rcClient.left - Info.rcClient.left;
- WindowInfo.rcClient.right = WindowInfo.rcClient.right - Info.rcClient.right;
- WindowInfo.rcClient.top = WindowInfo.rcClient.top - Info.rcClient.top;
- WindowInfo.rcClient.bottom = WindowInfo.rcClient.bottom - Info.rcClient.bottom;
- return WindowInfo.rcClient.left;
- }
- int CreateVCheckBox::GetY(){
- WINDOWINFO Info;
- GetWindowInfo(GetParent(hwnd_button), &Info);
- GetWindowInfo(hwnd_button, &WindowInfo);
- WindowInfo.rcClient.left = WindowInfo.rcClient.left - Info.rcClient.left;
- WindowInfo.rcClient.right = WindowInfo.rcClient.right - Info.rcClient.right;
- WindowInfo.rcClient.top = WindowInfo.rcClient.top - Info.rcClient.top;
- WindowInfo.rcClient.bottom = WindowInfo.rcClient.bottom - Info.rcClient.bottom;
- return WindowInfo.rcClient.top;
- }
- int CreateVCheckBox::GetWindowWidth(){
- GetWindowInfo(hwnd_button, &WindowInfo);
- return WindowInfo.rcClient.right - WindowInfo.rcClient.left;
- }
- int CreateVCheckBox::GetWindowHeight(){
- GetWindowInfo(hwnd_button, &WindowInfo);
- return WindowInfo.rcClient.bottom - WindowInfo.rcClient.top;
- }
- void CreateVCheckBox::SetPos(POINT newPos){
- SetWindowPos(hwnd_button, NULL, newPos.x, newPos.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
- InfoSetX(newPos.x);
- InfoSetY(newPos.y);
- OdswiezCheckBox();
- }
- void CreateVCheckBox::SetSize(POINT newSize){
- InfoSetWidth(newSize.x);
- InfoSetHeight(newSize.y);
- NarysujCheckBox(newSize.x, newSize.y, Style);
- SetWindowPos(hwnd_button, NULL, 0, 0, newSize.x, newSize.y, SWP_NOMOVE | SWP_NOZORDER);
- HRGN region = CreateRegion(newSize.x, newSize.y, Style);
- DeleteObject(hRegion);
- hRegion = CreateRegion(newSize.x, newSize.y, Style);
- SetWindowRgn(hwnd_button, region, TRUE);
- OdswiezCheckBox();
- }
- void CreateVCheckBox::InfoSetX(int nowa){
- WindowInfo.rcClient.left = nowa;
- }
- void CreateVCheckBox::InfoSetY(int nowa){
- WindowInfo.rcClient.top = nowa;
- }
- void CreateVCheckBox::InfoSetWidth(int nowa){
- WindowInfo.rcClient.right = WindowInfo.rcClient.left + nowa;
- }
- void CreateVCheckBox::InfoSetHeight(int nowa){
- WindowInfo.rcClient.bottom = WindowInfo.rcClient.top + nowa;
- }
- void CreateVCheckBox::SetMoveRegion(int x, int y, int width, int height, DWORD flags){
- DeleteObject(hMoveRegion);
- if(flags & CHECKBOX_STYL_RegionCircle)
- hMoveRegion = CreateEllipticRgn(x, y, width, height);
- else
- hMoveRegion = CreateRectRgn(x, y, width, height);
- }
- HRGN CreateVCheckBox::GetMoveRegion(){
- return hMoveRegion;
- }
- int CreateVCheckBox::GetID(){
- return GetWindowLong(hwnd_button, GWL_ID);
- }
- HDC CreateVCheckBox::GetHDC(){
- return hDC;
- }
- void CreateVCheckBox::OdswiezCheckBox(){
- InvalidateRect(hwnd_button, NULL, TRUE);
- }
- DWORD CreateVCheckBox::GetStyle(){
- return Style;
- }
- void CreateVCheckBox::SetStyle(DWORD newStyle){
- Style = newStyle;
- }
- int CreateVCheckBox::GetStan(){
- return Stan;
- }
- void CreateVCheckBox::SetStan(int newStan){
- Stan = newStan;
- if(Stan == CHECKBOX_STAN_NIEAKTYWNY)
- {
- SetCapture(false);
- SetDbClick(false);
- SetMove(false);
- SetStopAction(true);
- KillTimer(hwnd_button, 1);
- KillTimer(hwnd_button, 2);
- ReleaseCapture();
- }
- OdswiezCheckBox();
- }
- bool CreateVCheckBox::GetCapture(){
- return Capture;
- }
- void CreateVCheckBox::SetCapture(bool newCapture){
- if(Style & CHECKBOX_STYL_SendCapture)
- {
- if(newCapture)
- SendMessage(GetParent(hwnd_button), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd_button, GWLP_ID), CHECKBOX_CAPTURE), 0);
- else
- SendMessage(GetParent(hwnd_button), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd_button, GWLP_ID), CHECKBOX_NOCAPTURE), 0);
- }
- Capture = newCapture;
- }
- bool CreateVCheckBox::KursorWewnatrz(){
- POINT cur;
- GetCursorPos( & cur );
- ScreenToClient( hWindow(), & cur );
- return PtInRegion(hRegion, cur.x, cur.y);
- }
- bool CreateVCheckBox::KursorWewnatrz(HRGN region, int x, int y, DWORD flags){
- if((flags & KURSORX && flags & KURSORY) || flags == 0)
- return PtInRegion(region, x, y);
- return false;
- }
- bool CreateVCheckBox::GetMove(){
- return Move;
- }
- void CreateVCheckBox::SetMove(bool newMove){
- Move = newMove;
- }
- bool CreateVCheckBox::GetDbClick(){
- return dbclick;
- }
- void CreateVCheckBox::SetDbClick(bool newValue){
- dbclick = newValue;
- }
- void CreateVCheckBox::StopCurrentAction(){
- StopAction = true;
- }
- bool CreateVCheckBox::GetStopAction(){
- return StopAction;
- }
- void CreateVCheckBox::SetStopAction(bool newAction){
- StopAction = newAction;
- }
- void *CreateVCheckBox::GetDane(){
- return Dane;
- }
- void CreateVCheckBox::SetDane(void *newDane){
- Dane = newDane;
- }
- void CreateVCheckBox::SetTekst(char *newNapis){
- delete Tekst;
- if(!newNapis){
- Tekst = NULL;
- return;
- }
- Tekst = new char[strlen(newNapis)];
- strcpy(Tekst, newNapis);
- }
- char *CreateVCheckBox::GetTekst(){
- return Tekst;
- }
- void CreateVCheckBox::SetFont(HFONT newFont){
- DeleteObject(hFont);
- if(!newFont)
- hFont = newFont;
- else
- hFont = CreateFont(72, 0, 0, 0, FW_NORMAL, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH| FF_DONTCARE, "Arial");
- SelectObject(hDC, hFont);
- }
- HFONT CreateVCheckBox::GetFont(){
- return hFont;
- }
- void CreateVCheckBox::WyswietlTekst(HDC hDC){
- if(!Tekst)
- return;
- SetTextColor(hDC,Colour[Stan-1]);
- if(Tlo[Stan-1] == TRANSPARENT)
- SetBkMode(hDC,0);
- else
- SetBkColor(hDC, Tlo[Stan-1]);
- SetTextAlign(hDC, Align[Stan-1]);
- TextOut(hDC, TextPos.x, TextPos.y, Tekst, strlen(Tekst));
- }
- void CreateVCheckBox::ActualizeTextAttribute( POINT newTextPos, DWORD style, COLORREF newBackround, COLORREF newColour, int newAlign){
- TextPos.x = newTextPos.x;
- TextPos.y = newTextPos.y;
- if(style & TEXTATT_AKTYWNY)
- {
- Colour[0] = newColour;
- Tlo[0] = newBackround;
- Align[0] = newAlign;
- }
- if(style & TEXTATT_AKTYWNYNAJECHANY)
- {
- Colour[1] = newColour;
- Tlo[1] = newBackround;
- Align[1] = newAlign;
- }
- if(style & TEXTATT_WCISNIETY)
- {
- Colour[2] = newColour;
- Tlo[2] = newBackround;
- Align[2] = newAlign;
- }
- if(style & TEXTATT_WCISNIETYNAJECHANY)
- {
- Colour[3] = newColour;
- Tlo[3] = newBackround;
- Align[3] = newAlign;
- }
- if(style & TEXTATT_NIEAKTYWNY)
- {
- Colour[4] = newColour;
- Tlo[4] = newBackround;
- Align[4] = newAlign;
- }
- OdswiezCheckBox();
- }
- POINT *CreateVCheckBox::GetTextPos(){
- return &TextPos;
- }
- void CreateVCheckBox::SetTextPos(POINT newTextPos){
- TextPos.x = newTextPos.x;
- TextPos.y = newTextPos.y;
- }
- void CreateVCheckBox::GetStartWindowSize(POINT *Point){
- if(!Point)
- return;
- Point->x = StartWindowSize.x;
- Point->y = StartWindowSize.y;
- }
- void CreateVCheckBox::SetStartWindowSize(POINT Point){
- StartWindowSize.x = Point.x;
- StartWindowSize.y = Point.y;
- }
- HRGN CreateVCheckBox::CreateRegion(int width, int height, DWORD flags){
- HRGN hrgn = 0;
- if(flags & CHECKBOX_STYL_RegionCircle)
- hrgn = CreateEllipticRgn(0, 0, width, height);
- else
- if(flags & CHECKBOX_STYL_RegionTriangleDown)
- {
- POINT P[3];
- P[0].x = width/2; P[0].y = height;
- P[1].x = 0; P[1].y = 0;
- P[2].x = width; P[2].y = 0;
- hrgn = CreatePolygonRgn(P, 3, 1);
- }
- else
- if(flags & CHECKBOX_STYL_RegionTriangleUp)
- {
- POINT P[3];
- P[0].x = width/2; P[0].y = 0;
- P[1].x = width; P[1].y = height;
- P[2].x = 0; P[2].y = height;
- hrgn = CreatePolygonRgn(P, 3, 1);
- }
- else
- if(flags & CHECKBOX_STYL_RegionTriangleLeft)
- {
- POINT P[3];
- P[0].x = 0; P[0].y = height/2;
- P[1].x = width; P[1].y = 0;
- P[2].x = width; P[2].y = height;
- hrgn = CreatePolygonRgn(P, 3, 1);
- }
- else
- if(flags & CHECKBOX_STYL_RegionTriangleRight)
- {
- POINT P[3];
- P[0].x = width; P[0].y = height/2;
- P[1].x = 0; P[1].y = height;
- P[2].x = 0; P[2].y = 0;
- hrgn = CreatePolygonRgn(P, 3, 1);
- }
- else
- hrgn = CreateRectRgn(0, 0, width, height);
- return hrgn;
- }
- void CreateVCheckBox::ClearBitmap(){
- DeleteObject(hBmp);
- }
- void CreateVCheckBox::ClearDC(){
- ReleaseDC(hwnd_button, hDC);
- }
- void CreateVCheckBox::NarysujCheckBox(int width, int height, DWORD flags){
- ClearDC();
- ClearBitmap();
- hDC = GetDC(hwnd_button);
- hBmp = CreateCompatibleBitmap(hDC, width*4, height);
- hDC = CreateCompatibleDC(NULL);
- SelectObject(hDC, hBmp);
- hDrawFunc(hwnd_button, &hDC, width, height);
- }
- void CreateVCheckBox::Resetuj(){
- SetStan(CHECKBOX_STAN_AKTYWNY);
- SetCapture(false);
- SetDbClick(false);
- SetMove(false);
- SetStopAction(true);
- KillTimer(hwnd_button, 1);
- KillTimer(hwnd_button, 2);
- ReleaseCapture();
- OdswiezCheckBox();
- }
- void CreateVCheckBox::GetIconPos(RECT *p){
- if(!p)
- return;
- p->bottom = IconPos.bottom;
- p->left = IconPos.left;
- p->right = IconPos.right;
- p->top = IconPos.top;
- }
- void CreateVCheckBox::SetIconPos(RECT *p){
- if(p == NULL)
- {
- IconPos.bottom = 0;
- IconPos.left = 0;
- IconPos.right = 0;
- IconPos.top = 0;
- return;
- }
- IconPos.bottom = p->bottom;
- IconPos.left = p->left;
- IconPos.right = p->right;
- IconPos.top = p->top;
- }
- HDC CreateVCheckBox::GetIconDC(){
- return hDC_Icon;
- }
- void CreateVCheckBox::SetIconDC(HBITMAP hBitmap){
- ReleaseDC(hWindow(), hDC_Icon);
- if(!hBitmap)
- return;
- hDC_Icon = GetDC(hwnd_button);
- hDC_Icon = CreateCompatibleDC(NULL);
- SelectObject(hDC_Icon, hBitmap);
- OdswiezCheckBox();
- }
- CHECKBOXADDDRAW CreateVCheckBox::GetAddDrawFunc(){
- return hAddDrawFunc;
- }
- BOOL RejestrujCheckBox( HINSTANCE hInst ){
- WNDCLASS wc;
- wc.style = 0; // stylowy kibel? ;-)
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "WH_VCHECKBOX";
- wc.hInstance = hInst;
- wc.lpfnWndProc = CheckBoxProc;
- wc.cbWndExtra = 16;
- wc.cbClsExtra = 16;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor (NULL, IDC_ARROW);
- wc.hbrBackground =( HBRUSH ) GetStockObject( NULL_BRUSH );
- if( !RegisterClass( & wc ) ) return FALSE;
- return TRUE;
- }
- LRESULT CALLBACK CheckBoxProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
- switch (message) /* handle the messages */
- {
- case WM_PAINT:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk)
- break;
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- BitBlt( hdc, 0, 0, wsk->GetWindowWidth(), wsk->GetWindowHeight(), wsk->GetHDC(), (wsk->GetStan()-1)*wsk->GetWindowWidth(), 0, SRCCOPY );
- wsk->WyswietlTekst(hdc);
- if(wsk->GetAddDrawFunc())
- wsk->GetAddDrawFunc()(NULL, &hdc, wsk->GetWindowWidth(), wsk->GetWindowHeight(), wsk->GetDane());
- if(wsk->GetIconDC())
- {
- RECT IconPos;
- wsk->GetIconPos(&IconPos);
- BitBlt( hdc, IconPos.left, IconPos.top, IconPos.right-IconPos.left, IconPos.bottom-IconPos.top, wsk->GetIconDC(), 0, 0, SRCCOPY );
- }
- EndPaint(hwnd, &ps);
- break;
- }
- case WM_MOUSEMOVE:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk || wsk->GetStan() == CHECKBOX_STAN_NIEAKTYWNY)
- break;
- wsk->SetDbClick(false);
- if(wsk->GetMove()){
- POINT cur;
- GetCursorPos( & cur );
- ScreenToClient( GetParent(hwnd), & cur );
- ///Stop X/Y Move
- if(wsk->GetStyle() & CHECKBOX_STYL_StopXMove)
- cur.x = wsk->GetX();
- else
- cur.x = cur.x - wsk->HelpVeriable.x;
- if(wsk->GetStyle() & CHECKBOX_STYL_StopYMove)
- cur.y = wsk->GetY();
- else
- cur.y = cur.y - wsk->HelpVeriable.y;
- ///SendCommand Before Move
- if(wsk->GetStyle() & CHECKBOX_STYL_SendBeforeMove)
- SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd, GWLP_ID), CHECKBOX_BEFOREMOVE), (LPARAM)&cur);
- if(wsk->GetStopAction()){
- wsk->SetStopAction(false);
- break;
- }
- ///SetPos // sprawdzanie MoveRegion
- if(wsk->GetStyle() & CHECKBOX_STYL_IgnoreMoveRegion)
- wsk->SetPos(cur);
- else
- if(wsk->KursorWewnatrz(wsk->GetMoveRegion(), cur.x, cur.y, 0))
- wsk->SetPos(cur);
- ///Send Command after Move
- if(wsk->GetStyle() & CHECKBOX_STYL_SendMove)
- SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd, GWLP_ID), CHECKBOX_MOVE), 0);
- break;
- }
- if(!wsk->GetCapture()){
- if(wsk->GetStan() == CHECKBOX_STAN_AKTYWNY)
- wsk->SetStan(CHECKBOX_STAN_AKTYWNYNAJECHANY);
- else
- if(wsk->GetStan() == CHECKBOX_STAN_WCISNIETY)
- wsk->SetStan(CHECKBOX_STAN_WCISNIETYNAJECHANY);
- wsk->SetCapture(true);
- SetCapture(hwnd);
- }
- if(!wsk->KursorWewnatrz()){
- switch(wsk->GetStan())
- {
- case CHECKBOX_STAN_AKTYWNYNAJECHANY:{
- wsk->SetStan(CHECKBOX_STAN_AKTYWNY);
- break;
- }
- case CHECKBOX_STAN_WCISNIETYNAJECHANY:{
- wsk->SetStan(CHECKBOX_STAN_WCISNIETY);
- break;
- }
- }
- wsk->SetCapture(false);
- wsk->SetDbClick(false);
- wsk->SetMove(false);
- wsk->SetStopAction(true);
- KillTimer(hwnd, 1);
- KillTimer(hwnd, 2);
- ReleaseCapture();
- }
- break;
- }
- case WM_LBUTTONDOWN:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk || wsk->GetStan() == CHECKBOX_STAN_NIEAKTYWNY)
- break;
- if(wsk->GetStyle() & CHECKBOX_STYL_Movable)
- SetTimer(hwnd, 1, 500, NULL);
- if(wsk->GetStyle() & CHECKBOX_STYL_FastMovable)
- SendMessage(hwnd, WM_TIMER, 1, 0);
- if(!wsk->GetDbClick())
- {
- SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd, GWLP_ID), CHECKBOX_CLICK), 0);
- wsk->SetDbClick(true);
- SetTimer(hwnd, 2, 400, NULL);
- }
- else
- {
- SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd, GWLP_ID), CHECKBOX_CLICK | CHECKBOX_DBCLICK), 0);
- wsk->SetDbClick(false);
- KillTimer(hwnd, 2);
- }
- break;
- }
- case WM_LBUTTONUP:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk || wsk->GetStan() == CHECKBOX_STAN_NIEAKTYWNY)
- break;
- if(wsk->GetStyle() & CHECKBOX_STYL_Movable || wsk->GetStyle() & CHECKBOX_STYL_FastMovable){
- KillTimer(hwnd, 1);
- wsk->SetMove(false);
- }
- break;
- }
- case WM_DROPFILES:{
- SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLong(hwnd, GWLP_ID), CHECKBOX_DROPFILE), (LPARAM)wParam);
- break;
- }
- case WM_TIMER:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk || wsk->GetStan() == CHECKBOX_STAN_NIEAKTYWNY)
- break;
- switch(wParam){
- case 1:{ /// Timer do Move
- wsk->ActualizeWindowInfo(NULL);
- wsk->SetMove(true);
- GetCursorPos( & wsk->HelpVeriable );
- ScreenToClient( GetParent(hwnd), & wsk->HelpVeriable );
- wsk->HelpVeriable.x = wsk->HelpVeriable.x - wsk->GetX();
- wsk->HelpVeriable.y = wsk->HelpVeriable.y - wsk->GetY();
- KillTimer(hwnd, 1);
- break;
- }
- case 2:{ /// Timer do DbClick
- wsk->SetDbClick(false);
- KillTimer(hwnd, 2);
- break;
- }
- }
- break;
- }
- case WM_DESTROY:{
- CreateVCheckBox * wsk = *((CreateVCheckBox **) GetWindowLong(hwnd, 0));
- if(!wsk)
- break;
- if(GetCapture() == hwnd)
- ReleaseCapture();
- delete wsk;
- break;
- }
- default: /* for messages that we don't deal with */
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment