static void winToggleDrawItem(Ihandle* ih, DRAWITEMSTRUCT *drawitem) { int width, height, border = 4, check; HDC hDC; iupwinBitmapDC bmpDC; width = drawitem->rcItem.right - drawitem->rcItem.left; height = drawitem->rcItem.bottom - drawitem->rcItem.top; hDC = iupwinDrawCreateBitmapDC(&bmpDC, drawitem->hDC, width, height); iupwinDrawParentBackground(ih, hDC, &drawitem->rcItem); check = SendMessage(ih->handle, BM_GETCHECK, 0, 0L); if (check) drawitem->itemState |= ODS_SELECTED; else drawitem->itemState |= ODS_DEFAULT; /* use default mark for NOT checked */ iupwinDrawButtonBorder(ih->handle, hDC, &drawitem->rcItem, drawitem->itemState); winToggleDrawImage(ih, hDC, width, height, border, drawitem->itemState); if (drawitem->itemState & ODS_FOCUS) { border--; iupdrvDrawFocusRect(ih, hDC, border, border, width-2*border, height-2*border); } iupwinDrawDestroyBitmapDC(&bmpDC); }
static void winButtonDrawItem(Ihandle* ih, DRAWITEMSTRUCT *drawitem) { HDC hDC; iupwinBitmapDC bmpDC; int border, draw_border; int width = drawitem->rcItem.right - drawitem->rcItem.left; int height = drawitem->rcItem.bottom - drawitem->rcItem.top; hDC = iupwinDrawCreateBitmapDC(&bmpDC, drawitem->hDC, width, height); iupwinDrawParentBackground(ih, hDC, &drawitem->rcItem); if ((drawitem->itemState & ODS_FOCUS) && !(drawitem->itemState & ODS_HOTLIGHT)) drawitem->itemState |= ODS_DEFAULT; if (iupAttribGet(ih, "_IUPWINBUT_SELECTED")) drawitem->itemState |= ODS_SELECTED; border = winButtonGetBorder(); if ((ih->data->type & IUP_BUTTON_IMAGE) && iupAttribGet(ih, "IMPRESS") && !iupAttribGetBoolean(ih, "IMPRESSBORDER")) draw_border = 0; else { if (iupAttribGetBoolean(ih, "FLAT")) { if (drawitem->itemState & ODS_HOTLIGHT || iupAttribGet(ih, "_IUPWINBUT_ENTERWIN")) draw_border = 1; else draw_border = 0; } else draw_border = 1; } if (draw_border) iupwinDrawButtonBorder(ih->handle, hDC, &drawitem->rcItem, drawitem->itemState); if (ih->data->type == IUP_BUTTON_IMAGE) winButtonDrawImage(ih, hDC, width, height, border, drawitem->itemState); else if (ih->data->type == IUP_BUTTON_TEXT) winButtonDrawText(ih, hDC, width, height, border, drawitem->itemState); else /* both */ winButtonDrawImageText(ih, hDC, width, height, border, drawitem->itemState); if (drawitem->itemState & ODS_FOCUS && !(drawitem->itemState & ODS_NOFOCUSRECT) && iupAttribGetBoolean(ih, "CANFOCUS")) { border--; iupdrvDrawFocusRect(ih, hDC, border, border, width-2*border, height-2*border); } iupwinDrawDestroyBitmapDC(&bmpDC); }
static int winValMsgProc(Ihandle* ih, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result) { (void)lp; switch (msg) { case WM_SETFOCUS: { if (!iupAttribGetBoolean(ih, "CANFOCUS")) { HWND previous = (HWND)wp; if (previous && previous != ih->handle) { SetFocus(previous); *result = 0; return 1; } } break; } case WM_ERASEBKGND: { RECT rect; HDC hDC = (HDC)wp; GetClientRect(ih->handle, &rect); iupwinDrawParentBackground(ih, hDC, &rect); /* return non zero value */ *result = 1; return 1; } case WM_KEYDOWN: case WM_SYSKEYDOWN: { if (iupwinBaseMsgProc(ih, msg, wp, lp, result)==1) return 1; if (GetKeyState(VK_CONTROL) & 0x8000) /* handle Ctrl+Arrows */ { if (wp == VK_UP || wp == VK_LEFT) { winValIncPageValue(ih, -1); *result = 0; return 1; } if (wp == VK_RIGHT || wp == VK_DOWN) { winValIncPageValue(ih, 1); *result = 0; return 1; } } return 0; } } return iupwinBaseMsgProc(ih, msg, wp, lp, result); }
static void winToggleDrawItem(Ihandle* ih, DRAWITEMSTRUCT *drawitem) { /* called only when (ih->data->type==IUP_TOGGLE_IMAGE && (iupwin_comctl32ver6 || ih->data->flat)) */ int width, height, border = 4, check, draw_border; HDC hDC; iupwinBitmapDC bmpDC; width = drawitem->rcItem.right - drawitem->rcItem.left; height = drawitem->rcItem.bottom - drawitem->rcItem.top; hDC = iupwinDrawCreateBitmapDC(&bmpDC, drawitem->hDC, 0, 0, width, height); iupwinDrawParentBackground(ih, hDC, &drawitem->rcItem); if (!iupwin_comctl32ver6) { if (drawitem->itemState&ODS_SELECTED) iupAttribSet(ih, "_IUPWIN_PRESSED", "1"); } check = winToggleGetCheck(ih); if (check) drawitem->itemState |= ODS_SELECTED; else drawitem->itemState |= ODS_DEFAULT; /* use default mark for NOT checked */ if (!check && ih->data->flat) { if (drawitem->itemState & ODS_HOTLIGHT || iupAttribGet(ih, "_IUPWINTOG_ENTERWIN")) draw_border = 1; else draw_border = 0; } else draw_border = 1; /* when checked, even if flat thr border is drawn */ if (draw_border) iupwinDrawButtonBorder(ih->handle, hDC, &drawitem->rcItem, drawitem->itemState); winToggleDrawImage(ih, hDC, width, height, border, drawitem->itemState); if (drawitem->itemState & ODS_FOCUS && !(drawitem->itemState & ODS_NOFOCUSRECT) && iupAttribGetBoolean(ih, "CANFOCUS")) { border--; iupdrvDrawFocusRect(ih, hDC, border, border, width-2*border, height-2*border); } iupwinDrawDestroyBitmapDC(&bmpDC); }
static int winValProc(Ihandle* ih, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result) { (void)lp; switch (msg) { case WM_ERASEBKGND: { RECT rect; HDC hDC = (HDC)wp; GetClientRect(ih->handle, &rect); iupwinDrawParentBackground(ih, hDC, &rect); /* return non zero value */ *result = 1; return 1; } case WM_KEYDOWN: case WM_SYSKEYDOWN: { if (iupwinBaseProc(ih, msg, wp, lp, result)==1) return 1; if (GetKeyState(VK_CONTROL) & 0x8000) /* handle Ctrl+Arrows */ { if (wp == VK_UP || wp == VK_LEFT) { winValIncPageValue(ih, -1); *result = 0; return 1; } if (wp == VK_RIGHT || wp == VK_DOWN) { winValIncPageValue(ih, 1); *result = 0; return 1; } } return 0; } } return iupwinBaseProc(ih, msg, wp, lp, result); }
static void winLabelDrawItem(Ihandle* ih, DRAWITEMSTRUCT *drawitem) { HDC hDC; iupwinBitmapDC bmpDC; int width, height; if (!(drawitem->itemAction & ODA_DRAWENTIRE)) return; width = drawitem->rcItem.right - drawitem->rcItem.left; height = drawitem->rcItem.bottom - drawitem->rcItem.top; hDC = iupwinDrawCreateBitmapDC(&bmpDC, drawitem->hDC, width, height); iupwinDrawParentBackground(ih, hDC, &drawitem->rcItem); if (ih->data->type == IUP_LABEL_IMAGE) winLabelDrawImage(ih, hDC, width, height); else winLabelDrawText(ih, hDC, width, height); iupwinDrawDestroyBitmapDC(&bmpDC); }
static void winFrameDrawItem(Ihandle* ih, DRAWITEMSTRUCT *drawitem) { iupwinBitmapDC bmpDC; HDC hDC = iupwinDrawCreateBitmapDC(&bmpDC, drawitem->hDC, drawitem->rcItem.right-drawitem->rcItem.left, drawitem->rcItem.bottom-drawitem->rcItem.top); iupwinDrawParentBackground(ih, hDC, &drawitem->rcItem); if (iupAttribGet(ih, "_IUPFRAME_HAS_TITLE")) { int x, y; HFONT hOldFont, hFont = (HFONT)iupwinGetHFontAttrib(ih); int txt_height = iupFrameGetTitleHeight(ih); COLORREF fgcolor; SIZE size; char* title = iupdrvBaseGetTitleAttrib(ih); if (!title) title = ""; x = drawitem->rcItem.left+7; y = drawitem->rcItem.top; hOldFont = SelectObject(hDC, hFont); GetTextExtentPoint32(hDC, title, strlen(title), &size); ExcludeClipRect(hDC, x-2, y, x+size.cx+2, y+size.cy); drawitem->rcItem.top += txt_height/2; if (iupwin_comctl32ver6) iupwinDrawThemeFrameBorder(ih->handle, hDC, &drawitem->rcItem, drawitem->itemState); else DrawEdge(hDC, &drawitem->rcItem, EDGE_ETCHED, BF_RECT); SelectClipRgn(hDC, NULL); if (drawitem->itemState & ODS_DISABLED) fgcolor = GetSysColor(COLOR_GRAYTEXT); else { unsigned char r, g, b; char* color = iupAttribGetInherit(ih, "FGCOLOR"); if (!color) { if (!iupwinDrawGetThemeFrameFgColor(ih->handle, &fgcolor)) fgcolor = 0; /* black */ } else { if (iupStrToRGB(color, &r, &g, &b)) fgcolor = RGB(r,g,b); else fgcolor = 0; /* black */ } } winFrameDrawText(hDC, title, x, y, fgcolor); SelectObject(hDC, hOldFont); } else { char* value = iupAttribGetStr(ih, "SUNKEN"); if (iupStrBoolean(value)) DrawEdge(hDC, &drawitem->rcItem, EDGE_SUNKEN, BF_RECT); else DrawEdge(hDC, &drawitem->rcItem, EDGE_ETCHED, BF_RECT); } iupwinDrawDestroyBitmapDC(&bmpDC); }