⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trackbar.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 2 页
字号:
    {        case MSG_CREATE:            if (!(pData = malloc (sizeof (TRACKBARDATA)))) {                fprintf(stderr, "Create trackbar control failure!\n");                return -1;            }            pData->nMax = 10;            pData->nMin = 0;            pData->nPos = 0;            pData->nLineSize = 1;            pData->nPageSize = 5;            strcpy (pData->sStartTip, "Start");            strcpy (pData->sEndTip, "End");            pData->nTickFreq = 1;            pCtrl->dwAddData2 = (DWORD)pData;        break;            case MSG_DESTROY:            free((void *)(pCtrl->dwAddData2));        break;        case MSG_NCPAINT:        return 0;               case MSG_GETDLGCODE:            return DLGC_STATIC;        case MSG_GETTEXTLENGTH:        case MSG_GETTEXT:        case MSG_SETTEXT:            return -1;        case MSG_PAINT:        {            RECT rcClient;            HDC hdc, mem_dc;            GetClientRect (hwnd, &rcClient);            hdc = BeginPaint (hwnd);            mem_dc = CreateCompatibleDC (hdc);            TrackBarOnDraw (hwnd, mem_dc, (TRACKBARDATA *)pCtrl->dwAddData2, pCtrl->dwStyle);            BitBlt (mem_dc, 0, 0, 0, 0, hdc, 0, 0, 0);            DeleteCompatibleDC (mem_dc);            EndPaint (hwnd, hdc);            return 0;        }        case TBM_SETRANGE:        {            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam == lParam)                return -1;            pData->nMin = MIN (wParam, lParam);            pData->nMax = MAX (wParam, lParam);            if (pData->nPos > pData->nMax)                pData->nPos = pData->nMax;            if (pData->nPos < pData->nMin)                pData->nPos = pData->nMin;            SendMessage (hwnd, TBM_SETPOS, pData->nPos, 0);            return 0;        }                case TBM_GETMIN:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nMin;             case TBM_GETMAX:                pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nMax;            case TBM_SETMIN:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam == pData->nMin || wParam >= pData->nMax)                return -1;            pData->nMin = wParam;            if (pData->nPos < pData->nMin)                pData->nPos = pData->nMin;            SendMessage (hwnd, TBM_SETPOS, pData->nPos, 0);            return 0;            case TBM_SETMAX:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam == pData->nMax || wParam <= pData->nMin)                return -1;            pData->nMax = wParam;            if (pData->nPos > pData->nMax)                pData->nPos = pData->nMax;            SendMessage (hwnd, TBM_SETPOS, pData->nPos, 0);            return 0;                case TBM_SETLINESIZE:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam > (pData->nMax - pData->nMin))                return -1;            pData->nLineSize = wParam;            return 0;        case TBM_GETLINESIZE:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nLineSize;                case TBM_SETPAGESIZE:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam > (pData->nMax - pData->nMin))                return -1;            pData->nPageSize = wParam;            return 0;                case TBM_GETPAGESIZE:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nPageSize;            case TBM_SETPOS:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            pData->nPos = wParam;            TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);            InvalidateRect (hwnd, NULL, FALSE);            return 0;                case TBM_GETPOS:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nPos;                case TBM_SETTICKFREQ:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam > (pData->nMax - pData->nMin))                return -1;            pData->nTickFreq = wParam;            InvalidateRect (hwnd, NULL, FALSE);            return 0;        case TBM_GETTICKFREQ:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            return pData->nTickFreq;            case TBM_SETTIP:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam)                 strncpy(pData->sStartTip, (char *) wParam, TBLEN_TIP);            if (lParam)                strncpy (pData->sEndTip, (char *) lParam, TBLEN_TIP);            InvalidateRect (hwnd, NULL, FALSE);            return 0;        case TBM_GETTIP:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (wParam)                strcpy ((char *) wParam, pData->sStartTip);            if (lParam)                strcpy ((char *) lParam, pData->sEndTip);            return 0;                case MSG_SETFOCUS:            if (pCtrl->dwStyle & TBS_FOCUS)                break;            pCtrl->dwStyle |= TBS_FOCUS;            InvalidateRect (hwnd, NULL, FALSE);            break;            case MSG_KILLFOCUS:            pCtrl->dwStyle &= ~TBS_FOCUS;            InvalidateRect (hwnd, NULL, FALSE);            break;            case MSG_KEYDOWN:            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            switch (LOWORD (wParam)) {                case SCANCODE_CURSORBLOCKUP:                case SCANCODE_CURSORBLOCKRIGHT:                    pData->nPos += pData->nLineSize;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;                case SCANCODE_CURSORBLOCKDOWN:                case SCANCODE_CURSORBLOCKLEFT:                    pData->nPos -= pData->nLineSize;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;                            case SCANCODE_PAGEDOWN:                    pData->nPos -= pData->nPageSize;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;                            case SCANCODE_PAGEUP:                    pData->nPos += pData->nPageSize;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;                            case SCANCODE_HOME:                    pData->nPos = pData->nMin;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;                            case SCANCODE_END:                    pData->nPos = pData->nMax;                    TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);                    InvalidateRect (hwnd, NULL, FALSE);                break;            }        break;        case MSG_LBUTTONDOWN:        {            RECT    rcClient;            int     x, y, w, h;            int     len, pos, max, min;                int     mouseX, mouseY;                GetClientRect (hwnd, &rcClient);            x = rcClient.left;            y = rcClient.top;            w = RECTW (rcClient);            h = RECTH (rcClient);            mouseX = LOSWORD(lParam);            mouseY = HISWORD(lParam);                    if (GetCapture() != hwnd) {                SetCapture (hwnd);                pCtrl->dwStyle |= TBS_DRAGGED;            }            else                break;                    if (pCtrl->dwStyle & TBS_VERTICAL) {                len = RECTH (rcClient) - (WIDTH_HORZ_BLANK<<1);                if (mouseY > rcClient.bottom - WIDTH_HORZ_BLANK)                    pos = 0;                else if (mouseX < rcClient.top + WIDTH_HORZ_BLANK)                    pos = len;                else                    pos = y + h - WIDTH_HORZ_BLANK - mouseY;            } else {                len = RECTW (rcClient) - (WIDTH_HORZ_BLANK<<1);                if (mouseX > rcClient.right - WIDTH_HORZ_BLANK)                    pos = len ;                else if (mouseX < rcClient.left + WIDTH_HORZ_BLANK)                    pos = 0;                else                    pos = mouseX - x - WIDTH_HORZ_BLANK;            }            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            max = pData->nMax;            min = pData->nMin;            pData->nPos = (int)((max - min) * pos / (float)len + 0.5) + min;            TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);            if (pCtrl->dwStyle & TBS_VERTICAL)                 pData->mousepos = mouseY;            else                pData->mousepos = mouseX;            InvalidateRect (hwnd, NULL, FALSE);        }        break;                        case MSG_MOUSEMOVE:        {            int mouseX = LOSWORD(lParam);            int mouseY = HISWORD(lParam);            if (wParam & KS_CAPTURED)                ScreenToClient (hwnd, &mouseX, &mouseY);            else                break;            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            if (pCtrl->dwStyle & TBS_VERTICAL)                 pData->mousepos = mouseY;            else                pData->mousepos = mouseX;            InvalidateRect (hwnd, NULL, FALSE);        }        break;        case MSG_LBUTTONUP:            if (GetCapture() == hwnd) {                ReleaseCapture ();                pCtrl->dwStyle &= ~TBS_DRAGGED;            }            else                break;            pData = (TRACKBARDATA *)pCtrl->dwAddData2;            TrackBarNormalizeParams (pCtrl, pData, pCtrl->dwStyle & TBS_NOTIFY);            InvalidateRect (hwnd, NULL, FALSE);        break;            case MSG_FONTCHANGED:            InvalidateRect (hwnd, NULL, FALSE);            return 0;        default:            break;        }        return DefaultControlProc (hwnd, message, wParam, lParam);}#endif /* _CTRL_TRACKBAR */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -