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

📄 coolbar.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 2 页
字号:
        ptemp->RcTitle.left = 2;    else        ptemp->RcTitle.left = TbarData->tail->RcTitle.right;    switch (ptemp->ItemType) {    case TYPE_BARITEM:        w = ITEMBARWIDTH;        break;    case TYPE_BMPITEM:        w = TbarData->ItemWidth + 4;        break;    case TYPE_TEXTITEM:        if (strlen (ptemp->Caption)) {            HDC hdc;            hdc = GetClientDC (hwnd);            GetTextExtent (hdc, ptemp->Caption, -1, &size);            ReleaseDC (hdc);        }        w = size.cx + 4;        break;    default:        w = 0;        break;    }    ptemp->RcTitle.right = ptemp->RcTitle.left + w;    ptemp->RcTitle.top = 2;    ptemp->RcTitle.bottom = ptemp->RcTitle.top + TbarData->ItemHeight + 4;      ptemp->hintx = ptemp->RcTitle.left;    ptemp->hinty = ptemp->RcTitle.bottom;}static int CoolBarCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    HDC              hdc;    PCOOLBARCTRL     TbarData;    PCOOLBARITEMDATA pTbid;            switch (message) {        case MSG_CREATE:        {            DWORD data;             DWORD dwStyle;            const char* caption;            if ((TbarData = (COOLBARCTRL*) calloc (1, sizeof (COOLBARCTRL))) == NULL)                return 1;            TbarData->nCount = 0;            TbarData->head = TbarData->tail = NULL;            TbarData->BackBmp = NULL;            TbarData->iSel = -1;            TbarData->iMvOver = -1;            TbarData->ShowHint = TRUE;            TbarData->hToolTip = HWND_DESKTOP;            ExcludeWindowStyle (hWnd, WS_BORDER);            dwStyle = GetWindowStyle (hWnd);            if (dwStyle & CBS_BMP_32X32) {                TbarData->ItemWidth = 32;                TbarData->ItemHeight = 32;            }            else if (dwStyle & CBS_BMP_CUSTOM) {                data = GetWindowAdditionalData (hWnd);                TbarData->ItemWidth = LOWORD (data);                TbarData->ItemHeight = HIWORD (data);            }            else {                TbarData->ItemWidth = 16;                TbarData->ItemHeight = 16;            }            caption = GetWindowCaption (hWnd);            if ((dwStyle & CBS_USEBKBMP) && caption [0]) {                TbarData->BackBmp = (BITMAP*)calloc (1, sizeof (BITMAP));                if (LoadBitmap (HDC_SCREEN, TbarData->BackBmp, caption) < 0) {                    free (TbarData->BackBmp);                    TbarData->BackBmp = NULL;                    break;                }            }            SetWindowAdditionalData2 (hWnd, (DWORD)TbarData);        }        break;        case MSG_DESTROY:        {             COOLBARITEMDATA* unloaddata, *tmp;            TbarData = (PCOOLBARCTRL) GetWindowAdditionalData2(hWnd);            if (TbarData->hToolTip != HWND_DESKTOP) {                destroyToolTipWin (TbarData->hToolTip);            }            if (TbarData->BackBmp) {                UnloadBitmap (TbarData->BackBmp);                free (TbarData->BackBmp);            }            unloaddata = TbarData->head;            while (unloaddata) {                tmp = unloaddata->next;                free (unloaddata);                unloaddata = tmp;            }            free (TbarData);        }        break;        case MSG_SIZECHANGING:        {            const RECT* rcExpect = (const RECT*)wParam;            RECT* rcResult = (RECT*)lParam;            TbarData = (PCOOLBARCTRL) GetWindowAdditionalData2(hWnd);            rcResult->left = rcExpect->left;            rcResult->top = rcExpect->top;            rcResult->right = rcExpect->right;            rcResult->bottom = rcExpect->top + TbarData->ItemHeight + 8;            return 0;        }		case MSG_SIZECHANGED:		{			RECT* rcWin = (RECT*)wParam;			RECT* rcClient = (RECT*)lParam;			*rcClient = *rcWin;			return 1;		}        case MSG_NCPAINT:            return 0;        case MSG_PAINT:        {            TbarData = (PCOOLBARCTRL) GetWindowAdditionalData2(hWnd);            hdc = BeginPaint (hWnd);            DrawCoolBox (hWnd, hdc, TbarData);            EndPaint (hWnd, hdc);            return 0;        }        case CBM_ADDITEM:        {            COOLBARITEMINFO* TbarInfo = NULL;            COOLBARITEMDATA* ptemp;            RECT rc;            TbarData = (PCOOLBARCTRL) GetWindowAdditionalData2 (hWnd);            TbarInfo = (COOLBARITEMINFO*) lParam;            if (!(ptemp = (COOLBARITEMDATA*)calloc (1, sizeof (COOLBARITEMDATA)))) {                return -1;            }            GetClientRect (hWnd, &rc);            ptemp->id = TbarInfo->id;            ptemp->Disable = 0;            ptemp->ItemType = TbarInfo->ItemType;            if (TbarInfo->ItemHint) {                strncpy (ptemp->Hint, TbarInfo->ItemHint, LEN_HINT);                ptemp->Hint [LEN_HINT] = '\0';            }            else                ptemp->Hint [0] = '\0';            if (TbarInfo->Caption) {                strncpy (ptemp->Caption, TbarInfo->Caption, LEN_TITLE);                ptemp->Caption [LEN_TITLE] = '\0';            }            else                ptemp->Caption [0] = '\0';                         ptemp->Bmp = TbarInfo->Bmp;            set_item_rect (hWnd, TbarData, ptemp);             ptemp->next = NULL;            if (TbarData->nCount == 0) {                TbarData->head = TbarData->tail = ptemp;            }            else if (TbarData->nCount > 0) {                 TbarData->tail->next = ptemp;                TbarData->tail = ptemp;            }            ptemp->insPos = TbarData->nCount;            TbarData->nCount++;            InvalidateRect (hWnd, NULL, TRUE);            return 0;        }        case CBM_ENABLE:            TbarData = (PCOOLBARCTRL)GetWindowAdditionalData2 (hWnd);            if (enable_item (TbarData, wParam, lParam))                return -1;            InvalidateRect (hWnd, NULL, TRUE);            return 0;        case MSG_LBUTTONDOWN:        {                      int posx, posy;             TbarData=(PCOOLBARCTRL) GetWindowAdditionalData2(hWnd);             posx = LOSWORD (lParam);             posy = HISWORD (lParam);             if (GetCapture () == hWnd)                break;                          SetCapture (hWnd);                                      if ((pTbid = GetCurTag (posx, posy, TbarData)) == NULL)                break;                           TbarData->iSel = pTbid->insPos;             break;        }        case MSG_LBUTTONUP:        {             int x, y;            TbarData = (PCOOLBARCTRL)GetWindowAdditionalData2(hWnd);            x = LOSWORD(lParam);            y = HISWORD(lParam);                                  if (GetCapture() != hWnd)               break;            ReleaseCapture ();            ScreenToClient (hWnd, &x, &y);            if ((pTbid = GetCurTag(x, y, TbarData)) == NULL) {                break;            }                      if (TbarData->iSel == pTbid->insPos)                NotifyParent (hWnd, GetDlgCtrlID(hWnd), pTbid->id);            TbarData->iSel = -1;            break;        }        case MSG_MOUSEMOVE:        {              int x, y;            TbarData = (PCOOLBARCTRL) GetWindowAdditionalData2(hWnd);            x = LOSWORD(lParam);            y = HISWORD(lParam);            if (GetCapture() == hWnd)                ScreenToClient (hWnd, &x, &y);                            if ((pTbid = GetCurTag (x, y, TbarData)) == NULL) {                unhilight (hWnd);                break;            }            if (TbarData->iMvOver == pTbid->insPos)               break;            unhilight (hWnd);            TbarData->iMvOver = pTbid->insPos;            hilight (hWnd, pTbid);            break;        }                case MSG_MOUSEMOVEIN:            if (!wParam)                unhilight (hWnd);               break;        case MSG_NCLBUTTONDOWN:        case MSG_KILLFOCUS:            unhilight (hWnd);               break;    }    return DefaultControlProc (hWnd, message, wParam, lParam);}#endif /* _EXT_CTRL_COOLBAR */

⌨️ 快捷键说明

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