void RoundRectTextButton::draw()const { int const W = width_m; int const H = height_m; switch (getState()) { case State::LEFT: rect_m.draw(HSV(colorH_m, 0.5, 0.9)); FontAsset(FONT_NAME).drawCenter(text_m, rect_m.center); break; case State::MOUSE_OVER: RoundRect(rect_m.rect.scaled(1.03), 5).moveBy(-W*SCALE/2, -H*SCALE/2).draw(HSV(colorH_m, 0.8, 0.9)); FontAsset(FONT_NAME).drawCenter(text_m, rect_m.center); break; case State::PRESSED: RoundRect(rect_m.rect.scaled(1.03), 5).moveBy(-W*SCALE/2, -H*SCALE/2+2).draw(HSV(colorH_m, 0.8, 0.6)); FontAsset(FONT_NAME).drawCenter(text_m, rect_m.center); break; case State::RELEASED: rect_m.draw(HSV(colorH_m, 0.5, 0.9)); FontAsset(FONT_NAME).drawCenter(text_m, rect_m.center); break; default: break; } }
void Paint(HWND hWnd){ hDC = BeginPaint(hWnd, &Ps); HPEN hPenOld; HPEN hLinePen; COLORREF qLineColor; qLineColor = RGB(255, 0, 0); hLinePen = CreatePen(PS_SOLID, 8, qLineColor); hPenOld = (HPEN)SelectObject(hDC, hLinePen); MoveToEx(hDC, 150, 0, NULL); LineTo(hDC, 150, 950); MoveToEx(hDC, 150, 775, NULL); LineTo(hDC, 1600, 775); HBRUSH brCross = CreateHatchBrush(HS_CROSS, RGB(0, 128, 245)); SelectObject(hDC, brCross); RoundRect(hDC, 150, 775, 1580, 850, 10, 10); SetTextColor(hDC, RGB(0, 0, 255)); TextOut(hDC, 10, 760, "Powered by:", 12); TextOut(hDC, 30, 782, "IUSTIN PIRVU", 12); qLineColor = RGB(0, 0, 255); hLinePen = CreatePen(PS_SOLID, 4, qLineColor); hPenOld = (HPEN)SelectObject(hDC, hLinePen); HBRUSH brDiagCross = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 128, 0)); SelectObject(hDC, brDiagCross); RoundRect(hDC, 175, 25, 1565, 750, 10, 10); NewBrush = CreateSolidBrush(RGB(255, 2, 5)); SelectObject(hDC, NewBrush); Rectangle(hDC, 5, 440, 145, 515); }
void CMFC_DemoView::OnDraw(CDC* pDC) { CMFC_DemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 CClientDC hdc(this); SetMapMode(hdc, MM_ANISOTROPIC); //设置映像模式 HPEN hP = (HPEN)GetStockObject(BLACK_PEN); //黑色画笔 HBRUSH hB = (HBRUSH)GetStockObject(DKGRAY_BRUSH); //画刷 SelectObject(hdc, hB); //选择画刷 SelectObject(hdc, hP); //选择画笔 RoundRect(hdc, 50, 120, 100, 200, 15, 15); //绘制圆角矩形 hB = (HBRUSH)GetStockObject(LTGRAY_BRUSH); //采用亮灰色画刷 SelectObject(hdc, hB); //选择画刷 Ellipse(hdc, 150, 50, 200, 150); //绘制椭圆 hB = (HBRUSH)GetStockObject(HOLLOW_BRUSH); //虚画刷 SelectObject(hdc, hB); //选择画刷 Pie(hdc, 250, 50, 300, 100, 250, 50, 300, 50); //绘制饼形 hP = CreatePen(PS_DASHDOT, 1, RGB(0, 0, 255)); hB = CreateHatchBrush(HS_HORIZONTAL, RGB(0, 255, 0)); SelectObject(hdc, hP); SelectObject(hdc, hB); RoundRect(hdc, 35, 220, 115, 270, 15, 15); Ellipse(hdc, 125, 170, 225, 220); Pie(hdc, 250, 120, 300, 170, 300, 120, 300, 170); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 绘制 VOID COpenDlg::OnPaint() { HDC hDC; HPEN hPen; BOOL bPreview; HBRUSH hBrush; PAINTSTRUCT psPaint; // 绘制预览区域 hDC = BeginPaint(m_hWnd, &psPaint); // 判断是否预览图像 bPreview = IsPreviewChecked(); // 绘制预览边框 hPen = (HPEN) SelectObject(hDC, CreatePen(PS_SOLID, 1, RGB(160, 160, 160))); hBrush = (HBRUSH) SelectObject(hDC, bPreview ? GetStockObject(WHITE_BRUSH) : GetSysColorBrush(COLOR_3DFACE)); RoundRect(hDC, m_rtPreview.left, m_rtPreview.top, m_rtPreview.right, m_rtPreview.bottom, 8, 8); SelectObject(hDC, hBrush); hBrush = (HBRUSH) SelectObject(hDC, GetSysColorBrush(COLOR_3DFACE)); RoundRect(hDC, m_rtPreview.left - 36, m_rtPreview.top, m_rtPreview.left - 7, m_rtPreview.bottom, 8, 8); DeleteObject(SelectObject(hDC, hPen)); SelectObject(hDC, hBrush); // 绘制图像 if (bPreview && m_pWnd->m_uTotalFrame) { m_pWnd->Draw(hDC); } // 结束绘制 EndPaint(m_hWnd, &psPaint); }
RoundRectTextButton::RoundRectTextButton(int x, int y, int w, int h, double colorH, String text, std::function<void(void)> handler) :LambdaButton(Shape(RoundRect(x, y, w, h, 5)), handler), rect_m(RoundRect(x, y, w, h, 5)), colorH_m(colorH), text_m(text), width_m(w), height_m(h) {}
void draw_captions(HDC hdc, WORD t) { int i; char szdata[100]; SetBkColor (hdc, PALETTERGB(0,0,100)); SetTextColor (hdc, PALETTERGB(255,255,255)); SetBkMode(hdc, TRANSPARENT); SelectObject(hdc, DRAW.scaleFont); /* switch (objects[t]->type) { case OB_EVAL: strncpy(szdata, ((EVALOBJ *) objects[t])->expression,12); szdata[12]='.';szdata[13]='.';szdata[14]=0; break; case OB_COMPARE: switch (((COMPAREOBJ *) objects[t])->method) { case 0: strcpy(szdata, "A>B"); break; case 1: strcpy(szdata, "A>=B"); break; case 2: strcpy(szdata, "A<B"); break; case 3: strcpy(szdata, "A<=B"); break; case 4: strcpy(szdata, "A=B"); break; } break; default: strcpy(szdata, objects[t]->tag); break; }*/ strcpy(szdata, objects[t]->tag); ExtTextOut(hdc, SX+objects[t]->xPos+3,SY+objects[t]->yPos+2, 0, NULL,szdata, strlen(szdata), NULL ) ; SetBkColor (hdc, PALETTERGB(0,128,128)); SetTextColor (hdc, PALETTERGB(100,255,200)); SelectObject (hdc, DRAW.brush_yellow); for (i=0;i<objects[t]->inports;i++) { RoundRect(hdc, SX+objects[t]->xPos, SY+objects[t]->yPos+CON_START-4+i*CON_HEIGHT, SX+objects[t]->xPos+CON_MAGNETIC, SY+objects[t]->yPos+CON_START-4+i*CON_HEIGHT+CON_MAGNETIC, 10, 10); if (!objects[t]->in_ports[i].in_name[0]) wsprintf(szdata,"%d",i+1); else strcpy(szdata,objects[t]->in_ports[i].in_name); ExtTextOut(hdc, SX+objects[t]->xPos+12,SY+objects[t]->yPos-4+CON_START+i*CON_HEIGHT, 0, NULL,szdata, strlen(szdata), NULL ) ; } SelectObject (hdc, DRAW.brush_orange); for (i=0;i<objects[t]->outports;i++) { RoundRect(hdc, SX+objects[t]->xPos+objects[t]->width-CON_MAGNETIC, SY+objects[t]->yPos+CON_START-4+i*CON_HEIGHT, SX+objects[t]->xPos+objects[t]->width, SY+objects[t]->yPos+CON_START-4+i*CON_HEIGHT+CON_MAGNETIC, 10, 10); if (!objects[t]->out_ports[i].out_name[0]) wsprintf(szdata,"%d",i+1); else strcpy(szdata,objects[t]->out_ports[i].out_name); SetTextAlign(hdc,TA_RIGHT); ExtTextOut(hdc, SX+objects[t]->xPos+objects[t]->width-CON_MAGNETIC-4, SY+objects[t]->yPos-4+CON_START+i*CON_HEIGHT, 0, NULL,szdata, strlen(szdata), NULL ) ; SetTextAlign(hdc,TA_LEFT); } }
void draw_box(HDC _hDC, const RECT& _rBox, int _EdgeRoundness, float _Alpha) { if (equal(_Alpha, 1.0f)) { if (_EdgeRoundness) oVB(RoundRect(_hDC, _rBox.left, _rBox.top, _rBox.right, _rBox.bottom, _EdgeRoundness, _EdgeRoundness)); else oVB(Rectangle(_hDC, _rBox.left, _rBox.top, _rBox.right, _rBox.bottom)); return; } // Copy the contents out (is there no way to access things directly?) BITMAPINFO bmi = {0}; surface::info_t si; si.dimensions = int3(oWinRectW(_rBox), oWinRectH(_rBox), 1); si.format = surface::format::b8g8r8a8_unorm; bmi.bmiHeader = make_header(si); if (!bmi.bmiHeader.biWidth || !bmi.bmiHeader.biHeight) return; HDC hDCBitmap = CreateCompatibleDC(_hDC); scoped_bitmap hBmp(CreateDIBSection(hDCBitmap, (BITMAPINFO*)&bmi, DIB_RGB_COLORS, nullptr, nullptr, 0)); scoped_select ScopedSelectBmp(hDCBitmap, hBmp); scoped_select ScopedSelectPen(hDCBitmap, current_pen(_hDC)); scoped_select ScopedSelectBrush(hDCBitmap, current_brush(_hDC)); // Resolve areas around the curved corners so we can to the blend directly // later on. But just do the minimum necessary, don't copy the interior that // we're going to re-draw with a RECT. if (_EdgeRoundness) { // Minimize rects... int dist = _EdgeRoundness; RECT TL = { _rBox.left, _rBox.top, _rBox.left + dist, _rBox.top + dist }; RECT RT = { _rBox.right - dist, _rBox.top, _rBox.right, _rBox.top + dist }; RECT BL = { _rBox.left, _rBox.bottom - dist, _rBox.left + dist, _rBox.bottom }; RECT BR = { _rBox.right - dist, _rBox.bottom - dist, _rBox.right, _rBox.bottom }; BitBlt(hDCBitmap, 0, 0, dist, dist, _hDC, _rBox.left, _rBox.top, SRCCOPY); BitBlt(hDCBitmap, bmi.bmiHeader.biWidth - dist, 0, dist, dist, _hDC, _rBox.right - dist, _rBox.top, SRCCOPY); BitBlt(hDCBitmap, 0, bmi.bmiHeader.biHeight - dist, dist, dist, _hDC, _rBox.left, _rBox.bottom - dist, SRCCOPY); BitBlt(hDCBitmap, bmi.bmiHeader.biWidth - dist, bmi.bmiHeader.biHeight - dist, dist, dist, _hDC, _rBox.right - dist, _rBox.bottom - dist, SRCCOPY); oVB(RoundRect(hDCBitmap, 0, 0, bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, _EdgeRoundness, _EdgeRoundness)); } else oVB(Rectangle(hDCBitmap, 0, 0, bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight)); BLENDFUNCTION blend = { AC_SRC_OVER, 0, (BYTE)(static_cast<int>(_Alpha * 255.0f) & 0xff), 0 }; oVB(AlphaBlend(_hDC, _rBox.left, _rBox.top, bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, hDCBitmap, 0, 0, bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, blend)); }
void paint_round_rect_around_hwnd(HDC hdc, HWND hwnd_edit_parent, HWND hwnd_edit, COLORREF col) { RECT r; HBRUSH br; HBRUSH br_prev; HPEN pen; HPEN pen_prev; GetClientRect(hwnd_edit, &r); br = CreateSolidBrush(col); if (!br) return; pen = CreatePen(PS_SOLID, 1, col); pen_prev = SelectObject(hdc, pen); br_prev = SelectObject(hdc, br); rect_client_to_screen(&r, hwnd_edit_parent); /* TODO: the roundness value should probably be calculated from the dy of the rect */ /* TODO: total hack: I manually adjust rectangle to values that fit g_hwnd_edit, as found by experimentation. My mapping of coordinates isn't right (I think I need mapping from window to window but even then it wouldn't explain -3 for y axis */ RoundRect(hdc, r.left+4, r.top-3, r.right+12, r.bottom-3, 8, 8); if (br_prev) SelectObject(hdc, br_prev); if (pen_prev) SelectObject(hdc, pen_prev); DeleteObject(pen); DeleteObject(br); }
void drawrect(HDC hdc,int x1,int y1,int x2,int y2,int color1,int color2,int w,int rn) { HPEN newpen,oldpen; HBRUSH oldbrush; uintptr_t *r; unsigned r32; oldbrush=(HBRUSH)SelectObject(hdc,GetStockObject(color1&0xFF000000?NULL_BRUSH:DC_BRUSH)); if(!oldbrush)log_err("ERROR in drawrect(): failed SelectObject(GetStockObject)\n"); r32=SetDCBrushColor(hdc,color1); if(r32==CLR_INVALID)log_err("ERROR in drawrect(): failed SetDCBrushColor\n"); newpen=CreatePen(w?PS_SOLID:PS_NULL,w,color2); if(!newpen)log_err("ERROR in drawrect(): failed CreatePen\n"); oldpen=(HPEN)SelectObject(hdc,newpen); if(!oldpen)log_err("ERROR in drawrect(): failed SelectObject(newpen)\n"); if(rn) RoundRect(hdc,x1,y1,x2,y2,rn,rn); else Rectangle(hdc,x1,y1,x2,y2); r=SelectObject(hdc,oldpen); if(!r)log_err("ERROR in drawrect(): failed SelectObject(oldpen)\n"); r=SelectObject(hdc,oldbrush); if(!r)log_err("ERROR in drawrect(): failed SelectObject(oldbrush)\n"); r32=DeleteObject(newpen); if(!r32)log_err("ERROR in drawrect(): failed SelectObject(newpen)\n"); }
void CEditRoadLineDlg::ShowPosInfo(HDC hDC, int x, int y, char* pszInfo, int iFrameWidth, COLORREF color1, COLORREF color2) { HPEN hPen; HBRUSH hBrush; hPen = CreatePen(PS_SOLID, iFrameWidth, color1); hBrush = CreateSolidBrush(color2); SelectObject(hDC, hPen); SelectObject(hDC, hBrush); BOOL fIsLeft = FALSE; BOOL fIsButton = FALSE; if(x > 764) fIsLeft = TRUE; if(y > 726) fIsButton = TRUE; int StartX; int StartY; if(fIsLeft) StartX = x - 230; else StartX = x + 30; if(fIsButton) StartY = y + 20; else StartY = y - 50; int iWidth = 0; if(fIsLeft) iWidth = 200; else iWidth = 200; RoundRect(hDC, StartX, StartY, StartX+iWidth, StartY+30, 30, 15); POINT cPoint1, cPoint2; if(fIsLeft) { cPoint1.x = StartX+200; cPoint2.x = StartX+180; } else { cPoint1.x = StartX; cPoint2.x = StartX+10; } if(fIsButton) { cPoint1.y = StartY; cPoint2.y = StartY+5; } else { cPoint1.y = StartY+25; cPoint2.y = StartY+30; } DrawLine(hDC, x, y, cPoint1.x, cPoint1.y, iFrameWidth, color1); DrawLine(hDC, x, y, cPoint2.x, cPoint2.y, iFrameWidth, color1); SetTextColor(hDC, RGB(0, 0, 0)); SetBkMode(hDC, 3); int iTextLen = (int)strlen(pszInfo); if(iTextLen > 20) iTextLen = 20; TextOut(hDC, StartX+5, StartY+5, pszInfo, iTextLen); DeleteObject(hBrush); DeleteObject(hPen); }
// 画圆角矩形 void drawRoundRect(HDC hdc, RECT cellRect, COLORREF bgColor) { HBRUSH brush = CreateSolidBrush(bgColor); HPEN pen = CreatePen(PS_NULL, 0, NULL); SelectObject(hdc, brush); SelectObject(hdc, pen); RoundRect(hdc, cellRect.left, cellRect.top, cellRect.right, cellRect.bottom, 10, 10); DeleteObject(brush); DeleteObject(pen); }
void roundRect (COORDS figure, HDC hdc) { BeginPath (hdc); RoundRect ( hdc, int (figure.xStart), int (figure.yStart), int (figure.xFinal), int (figure.yFinal), figure.wRound, figure.hRound); EndPath (hdc); }
void RRect(HDC hdc, LONG x1, LONG y1, LONG x2, LONG y2, COLORREF fg, COLORREF bg, int thickness, int style) { LOGBRUSH logbrush; HBRUSH oldBrush; HPEN oldPen = SelectObject(hdc, CreatePen(PS_SOLID, thickness, fg)); logbrush.lbStyle = (style == 0) ? BS_HOLLOW : BS_SOLID; logbrush.lbColor = (style == 2) ? fg : bg; logbrush.lbHatch = 0; oldBrush = SelectObject(hdc, CreateBrushIndirect(&logbrush)); RoundRect(hdc, x1, y1, x2, y2, 16, 16); DeleteObject(SelectObject(hdc, oldBrush)); DeleteObject(SelectObject(hdc, oldPen)); }
void RoundRect(HDC hdc, RECT *rect, int cx, int cy, COLORREF fg, COLORREF bg) { SetDCBrushColor(hdc, bg); SetDCPenColor(hdc, fg); // HBRUSH hBr = CreateSolidBrush(bg); // HPEN hPn = CreatePen(0, PS_SOLID, fg); // HANDLE hOldBr = SelectObject(hdc, hBr); // HANDLE hOldPen = SelectObject(hdc, hPn); RoundRect(hdc, rect->left, rect->top, rect->right, rect->bottom, cx, cy); // SelectObject(hdc, hOldBr); // SelectObject(hdc, hOldPen); // DeleteObject(hBr); // DeleteObject(hPn); }
static void surface_draw_rounded_rect(XSurface *surf, short x, short y, unsigned short w, unsigned short h, unsigned short rounding, unsigned char r, unsigned char g, unsigned char b) { HBRUSH hBrush; HBRUSH old; RECT rect; rect.left = (LONG)x; rect.top = (LONG)y; rect.right = (LONG)(x + w); rect.bottom = (LONG)(y + h); hBrush = CreateSolidBrush(RGB(r,g,b)); old = SelectObject(surf->hdc, hBrush); RoundRect(surf->hdc, rect.left, rect.top, rect.right, rect.bottom,2*rounding, 2*rounding); SelectObject(surf->hdc, old); DeleteObject(hBrush); }
bool CDateTime::DrawThumbnail(node* pNode, HDC hdc, HDC hdcThumb, RECT* pRect, bool bSelected) { pRect->right -= (pRect->left*2); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0xff, 0xff, 0xff)); HGDIOBJ hPenOld = SelectObject(hdc, hPen); HGDIOBJ hBrushOld = SelectObject(hdc, (HBRUSH)GetStockObject(BLACK_BRUSH)); RoundRect(hdc, pRect->left, pRect->top, pRect->right, pRect->bottom, 8, 8); SelectObject(hdc, hBrushOld); SelectObject(hdc, hPenOld); DeleteObject(hPen); LOGFONT lf; ZeroMemory(&lf, sizeof(lf)); lf.lfHeight = -(pRect->bottom - pRect->top) / 2; lf.lfWeight = FW_BOLD; lf.lfCharSet = DEFAULT_CHARSET; HFONT hFont = CreateFontIndirect(&lf); SetBkMode(hdc, TRANSPARENT); SetBkColor(hdc, TRANSPARENT); HGDIOBJ hOldFont = SelectObject(hdc, hFont); SYSTEMTIME st; GetLocalTime(&st); //GetSystemTime(&st); WCHAR wzTime[20]; TIME_ZONE_INFORMATION info = {0}; GetTimeZoneInformation(&info); wsprintf(wzTime, L"%d:%d %s", (st.wHour > 12) ? (st.wHour - 12) : ((st.wHour == 0) ? 12 : st.wHour), st.wMinute, (st.wHour >= 12) ? L"PM" : L"AM"); StringCchCopy(g_dateNode.wzText, ARRAYSIZE(g_dateNode.wzText), info.StandardName); GetTimeFormat(NULL, NULL, &st, L"h:mm tt", wzTime, ARRAYSIZE(wzTime)); GetDateFormat(NULL, NULL, &st, L"dddd, MMMM dd, yyyy", g_dateNode.wzDetails, ARRAYSIZE(g_dateNode.wzDetails)); SetTextColor(hdc, RGB(0xff,0xff,0xff)); DrawTextW(hdc, wzTime, wcslen(wzTime), pRect, DT_VCENTER | DT_CENTER); SelectObject(hdc, hOldFont); DeleteObject(hFont); return true; }
PHP_METHOD(WinGdiPath, roundedRectangle) { wingdi_devicecontext_object *dc_obj; wingdi_path_object *path_obj; int x1, y1, x2, y2, width, height; WINGDI_ERROR_HANDLING(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllll", &x1, &y1, &x2, &y2, &width, &height) == FAILURE) return; WINGDI_RESTORE_ERRORS(); path_obj = zend_object_store_get_object(getThis() TSRMLS_CC); dc_obj = zend_object_store_get_object(path_obj->device_context TSRMLS_CC); RETURN_BOOL(RoundRect(dc_obj->hdc, x1, y1, x2, y2, width, height)); }
void CHTMLContainerDlg::SetWindowEllispeFrame(int nWidthEllipse, int nHeightEllipse) { HDC hdc = ::GetDC(m_hWnd); HDC hdcMem = CreateCompatibleDC(hdc); ::ReleaseDC(m_hWnd, hdc); RECT rect; GetWindowRect(&rect); // 画一个圆角矩形。 BeginPath(hdcMem); RoundRect(hdcMem, 0, 0, rect.right - rect.left, rect.bottom - rect.top, nWidthEllipse, nHeightEllipse); EndPath(hdcMem); HRGN hRgn = PathToRegion(hdcMem); // 最后把路径转换为区域。 SetWindowRgn(hRgn, TRUE); }
void draw_object(HDC hdc, WORD t) { SelectObject (hdc, DRAW.pen_red); if (objects[t]==actobject) { SelectObject (hdc, DRAW.brush_ltorange); Rectangle(hdc, SX+objects[t]->xPos-6,SY+objects[t]->yPos-6, SX+objects[t]->xPos+6+objects[t]->width,SY+objects[t]->yPos+6+objects[t]->height); } SelectObject (hdc, DRAW.pen_blue); SelectObject (hdc, DRAW.brush_ltgreen); RoundRect(hdc, SX+objects[t]->xPos, SY+objects[t]->yPos, SX+objects[t]->xPos+objects[t]->width,SY+objects[t]->yPos+objects[t]->height, 15, 15); SelectObject (hdc, DRAW.brush_blue); Rectangle(hdc, SX+objects[t]->xPos,SY+objects[t]->yPos, SX+objects[t]->xPos+objects[t]->width,SY+objects[t]->yPos+15); }
//Adds lines and figures that are on the gradients void DrawGeometry(const HDC& hdc,const RECT& rect) { HPEN hPen; HBRUSH hBrush; hPen=CreatePen(PS_SOLID,2,RGB(30,30,30)); SelectObject(hdc,hPen); hBrush=CreateSolidBrush(RGB(0,180,180)); SelectObject(hdc,hBrush); RoundRect(hdc,rect.right*15/16-10,rect.bottom*7/8,rect.right*15/16+rect.right*1/16-10,rect.bottom*7/8+rect.right*1/16,15,15); DeleteObject(hPen); DeleteObject(hBrush); hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); SelectObject(hdc,hPen); hBrush=CreateSolidBrush(RGB(130,0,130)); SelectObject(hdc,hBrush); Ellipse(hdc,rect.right*3/4,rect.bottom*7/8,rect.right*3/4+rect.right*1/16,rect.bottom*7/8+rect.right*1/16); DeleteObject(hPen); DeleteObject(hBrush); hPen=(HPEN)GetStockObject(NULL_PEN); SelectObject(hdc,hPen); hBrush=CreateSolidBrush(RGB(80,80,0)); SelectObject(hdc,hBrush); Chord(hdc,rect.right*3/4,rect.bottom*3/4,rect.right*3/4+rect.right*1/16,rect.bottom*3/4+rect.right*1/16,5000,1500,100,155); DeleteObject(hPen); DeleteObject(hBrush); hPen=CreatePen(PS_DOT,1,RGB(255,255,255)); SelectObject(hdc,hPen); hBrush=CreateSolidBrush(RGB(30,30,30)); SelectObject(hdc,hBrush); Pie(hdc,rect.right*15/16-10,rect.bottom*3/4,rect.right*15/16+rect.right*1/16-10,rect.bottom*3/4+rect.right*1/16,10,500,100,15); DeleteObject(hPen); DeleteObject(hBrush); SelectObject(hdc,GetStockObject(BLACK_PEN)); SelectObject(hdc,GetStockObject(NULL_BRUSH)); }
BOOL CFigure::Draw(static HDC hdc, static float Scale) { BOOL tmp = true; wchar_t buffer[64]; HPEN hp = CreatePen(borderStyle, 0, borderColor); HBRUSH hbr = CreateHatchBrush(backgroundStyle, backgroundColor); SelectObject(hdc, hp); if (backgroundStyle == -1) { SetDCBrushColor(hdc, backgroundColor); SelectObject(hdc, GetStockObject(DC_BRUSH)); } else SelectObject(hdc, hbr); if (strcmp(type, "line") == 0) { tmp = MoveToEx(hdc, start.GetX() * Scale, start.GetY() * Scale, NULL); if (!tmp) return tmp; tmp = LineTo(hdc, end.GetX() * Scale, end.GetY() * Scale); } else if (strcmp(type, "rectangle") == 0) { tmp = Rectangle(hdc, start.GetX() * Scale, start.GetY() * Scale, end.GetX() * Scale, end.GetY() * Scale); } else if (strcmp(type, "rectangle_rounded") == 0) { tmp = RoundRect(hdc, start.GetX() * Scale, start.GetY()* Scale, end.GetX() * Scale, end.GetY() * Scale, 10, 10); } else if (strcmp(type, "ellipse") == 0) { tmp = Ellipse(hdc, start.GetX() * Scale, start.GetY()* Scale, end.GetX() * Scale, end.GetY() * Scale); } DeleteObject(hp); DeleteObject(hbr); return tmp; }
void PaintRectangles(HWND hwnd,int cxClient,int cyClient) { PAINTSTRUCT ps; HDC hdc = BeginPaint (hwnd, &ps) ; Rectangle (hdc, cxClient / 8, cyClient / 8, 7 * cxClient / 8, 7 * cyClient / 8) ; MoveToEx (hdc, 0, 0, NULL) ; LineTo (hdc, cxClient, cyClient) ; MoveToEx (hdc, 0, cyClient, NULL) ; LineTo (hdc, cxClient, 0) ; Ellipse (hdc, cxClient / 8, cyClient / 8, 7 * cxClient / 8, 7 * cyClient / 8) ; RoundRect (hdc, cxClient / 4, cyClient / 4, 3 * cxClient / 4, 3 * cyClient / 4, cxClient / 4, cyClient / 4) ; EndPaint (hwnd, &ps) ; }
// 毎フレーム update() の次に呼ばれる void Rule::draw() const { int t = System::FrameCount()*3; game1_m.draw(t % (1280 * 3) - 1280, 0, Alpha(50)); game2_m.draw((t+1280) % (1280 * 3) - 1280, 0, Alpha(50)); game3_m.draw((t + 2560) % (1280 * 3) - 1280, 0, Alpha(50)); for (int i = 0; i < 40; i++) { cir[i].draw(); } RoundRect(Rect(700, 700).setCenter(Window::Center()).movedBy(0, 0), 20).draw(Color(Palette::White, 180)).drawFrame(0.0, 3.0, Palette::Black); mainimage.drawAt(Window::Width() / 2, Window::Height() * 3 / 4 - 90); title(L"ルール!").drawCenter({ Window::Width() / 2, title.size }, Color(255, 0, 0)); text(L"これはガベージコレクションをするゲームです").drawCenter({ Window::Width() / 2, (title.size + text.size) * 2 }, Color(0, 0, 0)); subtitle(L"やり方").drawCenter({ Window::Width() / 2, (title.size + text.size + subtitle.size) * 2 }, Color(0, 0, 0)); button_m.draw(); clickable::Button::drawEffect(); Cir::drawEffect(); }
HBITMAP GetCalendarBackGnd(HWND hwndDlg,HDC hDC,COLORREF clrDrawingColor) { RECT CurrentPos;HBRUSH hBrush; HPEN hPen;TOOLINFO ti; HDC hMemDC; HBITMAP hMemBitMap,hOldBitmap; int Width,Height,Top,Left,iRatioX,iRatioY; ti.cbSize=sizeof(ti); ti.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS; ti.hwnd = hwndDlg; GetClientRect(hwndDlg,&CurrentPos); Left=CurrentPos.left; Top=CurrentPos.top; Width=CurrentPos.right-CurrentPos.left+1; Height=CurrentPos.bottom-CurrentPos.top+1; hMemDC = CreateCompatibleDC(hDC); hMemBitMap= CreateCompatibleBitmap(hDC, Width, Height); hOldBitmap=(HBITMAP)SelectObject(hMemDC,hMemBitMap); iRatioX=Width/50; iRatioY=Height/50; //clear all hBrush=CreateSolidBrush(clrDrawingColor); FillRect(hMemDC,&CurrentPos,hBrush); DeleteObject(hBrush); //draw gradiant backgnd for (int i=0;i<=25;i++) { hBrush=CreateSolidBrush(ColorAdjustLuma(clrDrawingColor,i*10)); SelectObject(hMemDC,hBrush); hPen=CreatePen(PS_SOLID,1,ColorAdjustLuma(clrDrawingColor,i*10)); SelectObject(hMemDC,hPen); RoundRect(hMemDC,iRatioX*i ,iRatioY*i ,Width-iRatioX*i,Height-iRatioY*i,25,25); DeleteObject(hPen); DeleteObject(hBrush); } POINT pPoint; rDateRects[31].top=3; rDateRects[31].bottom=18; rDateRects[31].left=Width-30; rDateRects[31].right=Width-10; //add a tooltip ti.uId = 0; ti.lpszText = TEXT("Close"); ti.rect = rDateRects[31]; SendMessage(hToolTipWindow, TTM_ADDTOOL, 0, (LPARAM)&ti); pPoint.x=long(rDateRects[31].left+(rDateRects[31].right-rDateRects[31].left)/2); pPoint.y=long(rDateRects[31].top+(rDateRects[31].bottom-rDateRects[31].top)/2); DrawText(hMemDC,TEXT("X"),pPoint,clrCalendarDate/3,1.3); rDateRects[32].top=2; rDateRects[32].bottom=20; rDateRects[32].left=Width/2-40; rDateRects[32].right=Width/2+40; //add a tooltip ti.uId = 1; ti.lpszText = TEXT("Change Current Calendar Year"); ti.rect = rDateRects[32]; SendMessage(hToolTipWindow, TTM_ADDTOOL, 0, (LPARAM)&ti); SelectObject(hMemDC,hOldBitmap); DeleteDC(hMemDC); return hMemBitMap; }
void roundrect(int left,int top,int right,int bottom,int width,int height) { ACL_ASSERT_BEGIN_PAINT; RoundRect(g_hmemdc,left,top,right,bottom,width,height); }
void BIOS::LCD::RoundRect(const CRect &rc, unsigned short clr) { RoundRect(rc.left, rc.top, rc.right, rc.bottom, clr); }
LRESULT CALLBACK WndProc( HWND wnd, DWORD msg, WPARAM wParam, LPARAM lParam ) { int i; int s; int j; HDC dc; PAINTSTRUCT ps; HBRUSH brush; char scorebuffer[20]; RECT textrect; switch( msg ) { case WM_CREATE: ShowCursor( 0 ); SetTimer( wnd, TIMER_ID, 30, NULL ); textrect.left = 0; textrect.right = WIDTH; textrect.top = 0; textrect.bottom = HEIGHT / 5; srand( time(0) ); SendMessage( wnd, JM_RESET, 0, 0 ); break; case JM_RESET: paddle.left = (WIDTH - PWIDTH) / 2; paddle.right = paddle.left + PWIDTH; paddle.bottom = HEIGHT - SPACE; paddle.top = paddle.bottom - PHEIGHT; starting = 1; reload = 2500 / numballs / 30; countdown = reload; for( i = 0; i < numballs; i++ ) { ball[i].left = paddle.left + (PWIDTH - BDIAMETER) / 2; ball[i].right = ball[i].left + BDIAMETER; ball[i].bottom = paddle.top; ball[i].top = ball[i].bottom - BDIAMETER; ballp[i].vx = 0.0f; ballp[i].vy = 0.0f; ballp[i].active = 0; } break; case JM_LOSE: score = (numballs - 3) * 200; SendMessage( wnd, JM_RESET, 0, 0 ); break; case WM_TIMER: if( wParam != TIMER_ID ) { break; } if( starting ) { if( !countdown ) { for( s = 0; s < numballs; s++ ) { if( !ballp[s].active ) { break; } } if( s == numballs ) { starting = 0; } else { ballp[s].active = 1; ballp[s].vy = startvel; ballp[s].vx = (float)(rand() % 15) - 15 / 2; } countdown = reload; } countdown--; } for( s = 0; s < numballs; s++ ) { if( ballp[s].active ) { ball[s].top -= (int)ballp[s].vy; ball[s].bottom = ball[s].top + BDIAMETER; ball[s].left += (int)ballp[s].vx; ball[s].right = ball[s].left + BDIAMETER; ballp[s].vy -= gravity; if( ball[s].bottom >= paddle.top) { if( paddle.left <= ball[s].left + (BDIAMETER / 2) && paddle.right >= ball[s].right - (BDIAMETER / 2) ) { ballp[s].vy = startvel; ballp[s].vx = (ball[s].left - paddle.left + (BDIAMETER / 2) - (PWIDTH / 2)) / 2; score += 10; if( score >= (numballs - 2) * 200 ) { if( numballs >= 10 ) { dc = GetDC( wnd ); TextOut( dc, WIDTH / 3, HEIGHT / 2, "You Won!", 8 ); ReleaseDC( wnd, dc ); Sleep(2000); SendMessage( wnd, WM_CLOSE, 0, 0 ); } else { numballs++; SendMessage( wnd, JM_RESET, 0, 0 ); } } } if( ball[s].bottom >= HEIGHT ) { SendMessage( wnd, JM_LOSE, 0, 0 ); break; } } if( ball[s].left <= (0 - (int)ballp[s].vx) || ball[s].right >= (WIDTH - (int)ballp[s].vx) ) { ballp[s].vx = -(ballp[s].vx); } if( ball[s].top <= 0 ) { ballp[s].vy = ((int)ballp[s].vy < 0 ) ? ballp[s].vy : -(ballp[s].vy); } } } InvalidateRgn( wnd, NULL, 1 ); break; case WM_MOUSEMOVE: paddle.left = LOWORD(lParam) - PWIDTH / 2; paddle.right = paddle.left + PWIDTH; break; case WM_PAINT: dc = BeginPaint( wnd, &ps ); sprintf( scorebuffer, "Score: %d", score ); TextOut( dc, 0, 0, scorebuffer, strlen( scorebuffer) ); brush = CreateSolidBrush( 0 ); SelectObject( dc, brush ); RoundRect( dc, paddle.left, paddle.top, paddle.right, paddle.bottom, PWIDTH / 4, PHEIGHT ); DeleteObject( brush ); for( j = 0; j < numballs; j++ ) { brush = CreateSolidBrush( colours[j] ); SelectObject( dc, brush ); Ellipse( dc, ball[j].left, ball[j].top, ball[j].right, ball[j].bottom ); DeleteObject( brush ); } EndPaint( wnd, &ps ); break; case WM_DESTROY: KillTimer( wnd, TIMER_ID ); ShowCursor( 1 ); PostQuitMessage( 0 ); break; default: return DefWindowProc( wnd, msg, wParam, lParam ); break; } return 0; }
// ボタン用の画像読み込み void Controls::LoadButtonImages(HWND hWnd, int id) { HDC hdc; HBITMAP hBitmap; // 使い回し HBRUSH hBrush_1; if (id > 5) return; HFONT hGuiFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); // 論理ブラシを作成 hBrush_1 = CreateSolidBrush(RGB(252, 254, 252)); // 元のWindowのデバイスコンテキストハンドルを取得 hdc = GetDC(hWnd); switch (id) { case 1: // 画像1 hdc_mem[0] = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hdc, 360, 60); SelectObject(hdc_mem[0], hBitmap); Boxfill(hdc_mem[0], 0, 0, 360, 60, hBrush_1); // 塗りつぶし if (!LoadPictureOnResource(hdc_mem[0], MAKEINTRESOURCE(IDG_IMG7ZIP))) ShowLoadPictureError(1); // 文字を描画 SelectObject(hdc_mem[0], hGuiFont); SetBkMode(hdc_mem[0], TRANSPARENT); DrawStringForImageButton(hdc_mem[0], langStr.szBtn7Zip, 39, 5, 180, 17, 219, 5, 360, 17, FALSE); DrawStringForImageButton(hdc_mem[0], langStr.szBtnComputer, 39, 25, 106, 37, 219, 25, 286, 37, FALSE); DrawStringForImageButton(hdc_mem[0], TEXT("["), 107, 25, 114, 57, 287, 25, 294, 57, FALSE); DrawStringForImageButton(hdc_mem[0], langStr.szBtnQDir, 135, 25, 180, 77, 315, 25, 360, 77, FALSE); DrawStringForImageButton(hdc_mem[0], langStr.szBtnUsersFiler, 39, 45, 180, 97, 219, 45, 360, 97, FALSE); break; case 2: // 画像2 hdc_mem[1] = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hdc, 420, 220); SelectObject(hdc_mem[1], hBitmap); Boxfill(hdc_mem[1], 0, 0, 420, 180, hBrush_1); // 塗りつぶし if (!LoadPictureOnResource(hdc_mem[1], MAKEINTRESOURCE(IDG_IMGDISK))) ShowLoadPictureError(2); // 文字を描画 SelectObject(hdc_mem[1], hGuiFont); SetBkMode(hdc_mem[1], TRANSPARENT); DrawStringForImageButton(hdc_mem[1], langStr.szBtnTrueImage, 27, 5, 210, 17, 237, 5, 420, 17, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnDiscWizard, 27, 25, 210, 37, 237, 25, 420, 37, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnParagonBackupAndRecovery, 27, 45, 210, 57, 237, 45, 420, 57, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnEaseUSTodoBackup, 27, 65, 210, 77, 237, 65, 420, 77, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnAomeiBackupper, 27, 85, 210, 97, 237, 85, 420, 97, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnEaseUSPartitionMaster, 27, 105, 210, 117, 237, 105, 420, 117, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnMiniToolPartitionWizard, 27, 125, 210, 137, 237, 125, 420, 137, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnAcronisDiskDirector, 27, 145, 210, 157, 237, 145, 420, 157, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnParagonPartitionManager, 27, 165, 210, 177, 237, 165, 420, 177, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnAomeiPartitionAssistant, 27, 185, 210, 197, 237, 185, 420, 197, FALSE); DrawStringForImageButton(hdc_mem[1], langStr.szBtnOtherDiskTool, 27, 205, 210, 217, 237, 205, 420, 217, FALSE); break; case 3: // 画像3 hdc_mem[2] = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hdc, 260, 200); SelectObject(hdc_mem[2], hBitmap); Boxfill(hdc_mem[2], 0, 0, 260, 200, hBrush_1); // 塗りつぶし if (!LoadPictureOnResource(hdc_mem[2], MAKEINTRESOURCE(IDG_IMGTOOLS))) ShowLoadPictureError(3); // ファイルアイコンを描画 DrawFileImageEx(hdc_mem[2], TEXT("cmd.exe"), szSysDir, 4, 42, 134, 42); DrawFileImageEx(hdc_mem[2], TEXT("notepad.exe"), szSysDir, 4, 62, 134, 62); DrawFileImageEx(hdc_mem[2], TEXT("regedit.exe"), szWinDir, 4, 82, 134, 82); DrawFileImageEx(hdc_mem[2], TEXT("diskpart.exe"), szSysDir, 4, 102, 134, 102); // 文字を描画 SelectObject(hdc_mem[2], hGuiFont); SetBkMode(hdc_mem[2], TRANSPARENT); DrawStringForImageButton(hdc_mem[2], langStr.szBtnReboot, 27, 5, 130, 17, 157, 5, 260, 17, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnShutdown, 27, 25, 130, 37, 157, 25, 260, 37, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnCommandPrompt, 27, 45, 130, 57, 157, 45, 260, 57, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnNotepad, 27, 65, 130, 77, 157, 65, 260, 77, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnRegEdit, 27, 85, 130, 97, 157, 85, 260, 97, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnDiskpart, 27, 105, 130, 117, 157, 105, 260, 117, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnLoadDriver, 27, 125, 130, 137, 157, 125, 260, 137, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnMSIME, 27, 145, 130, 157, 157, 145, 260, 157, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnWinRE, 27, 165, 130, 177, 157, 165, 260, 177, FALSE); DrawStringForImageButton(hdc_mem[2], langStr.szBtnInstallWindows, 27, 185, 130, 197, 157, 185, 260, 197, FALSE); break; case 4: { // 画像4 (apps) TCHAR szLaunchPath[MAX_PATH + 1]; HBRUSH hBrush_2; hBrush_2 = CreateSolidBrush(RGB(236, 234, 164)); hdc_mem[3] = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hdc, 20, 300); SelectObject(hdc_mem[3], hBitmap); Boxfill(hdc_mem[3], 0, 0, 20, 300, hBrush_1); // 塗りつぶし if (!LoadPictureOnResource(hdc_mem[3], MAKEINTRESOURCE(IDG_IMGAPPS))) ShowLoadPictureError(4); SelectObject(hdc_mem[3], hBrush_1); // 枠を描画 RoundRect(hdc_mem[3], 0, 60, 20, 80, 6, 6); SelectObject(hdc_mem[3], hBrush_2); // 色を変更 RoundRect(hdc_mem[3], 0, 80, 20, 100, 6, 6); SelectObject(hdc_mem[3], hBrush_1); // 元に戻す RoundRect(hdc_mem[3], 0, 100, 20, 120, 6, 6); RoundRect(hdc_mem[3], 0, 120, 20, 140, 6, 6); RoundRect(hdc_mem[3], 0, 140, 20, 160, 6, 6); RoundRect(hdc_mem[3], 0, 160, 20, 180, 6, 6); RoundRect(hdc_mem[3], 0, 180, 20, 200, 6, 6); RoundRect(hdc_mem[3], 0, 200, 20, 220, 6, 6); RoundRect(hdc_mem[3], 0, 220, 20, 240, 6, 6); RoundRect(hdc_mem[3], 0, 240, 20, 260, 6, 6); RoundRect(hdc_mem[3], 0, 260, 20, 280, 6, 6); RoundRect(hdc_mem[3], 0, 280, 20, 300, 6, 6); // フォルダアイコンを描画 DrawFolderImage(hdc_mem[3], 62, 82); // ファイルアイコンを描画 DrawFileImage(hdc_mem[3], uaFilePath1, 2, 102); DrawFileImage(hdc_mem[3], uaFilePath2, 2, 122); DrawFileImage(hdc_mem[3], uaFilePath3, 2, 142); DrawFileImage(hdc_mem[3], uaFilePath4, 2, 162); DrawFileImage(hdc_mem[3], uaFilePath5, 2, 182); DrawFileImage(hdc_mem[3], uaFilePath6, 2, 202); DrawFileImage(hdc_mem[3], uaFilePath7, 2, 222); DrawFileImage(hdc_mem[3], uaFilePath8, 2, 242); DrawFileImage(hdc_mem[3], uaFilePath9, 2, 262); // USBメモリ内のランチャーのアイコンを取得 (取得できなかったらPStartのまま) for(int i = 1; i < 26; i++) { wsprintf(szLaunchPath, TEXT("%c:\\%s"), 'A'+i, ulPath); if (FileExist(szLaunchPath)) { // 塗りつぶしてから描画 Boxfill(hdc_mem[3], 2, 42, 17, 57, hBrush_1); DrawFileImage(hdc_mem[3], szLaunchPath, 2, 42); break; } } // いろいろ削除 DeleteObject(hBrush_2); } break; case 5: // 画像5 HBRUSH hBrush_2; hBrush_2 = CreateSolidBrush(RGB(252, 186, 148)); hdc_mem[4] = CreateCompatibleDC(NULL); hBitmap = CreateCompatibleBitmap(hdc, 122, 80); SelectObject(hdc_mem[4], hBitmap); Boxfill(hdc_mem[4], 0, 0, 122, 80, hBrush_1); // 塗りつぶし // 枠を描画 SelectObject(hdc_mem[4], hBrush_1); RoundRect(hdc_mem[4], 0, 0, 61, 16, 6, 6); RoundRect(hdc_mem[4], 0, 16, 61, 32, 6, 6); RoundRect(hdc_mem[4], 0, 32, 61, 48, 6, 6); RoundRect(hdc_mem[4], 0, 48, 61, 64, 6, 6); RoundRect(hdc_mem[4], 16, 64, 61, 80, 6, 6); SelectObject(hdc_mem[4], hBrush_2); RoundRect(hdc_mem[4], 61, 0, 122, 16, 6, 6); RoundRect(hdc_mem[4], 61, 16, 122, 32, 6, 6); RoundRect(hdc_mem[4], 61, 32, 122, 48, 6, 6); RoundRect(hdc_mem[4], 61, 48, 122, 64, 6, 6); RoundRect(hdc_mem[4], 61, 64, 106, 80, 6, 6); SelectObject(hdc_mem[4], hBrush_1); // 文字を描画 SelectObject(hdc_mem[4], hGuiFont); SetBkMode(hdc_mem[4], TRANSPARENT); DrawStringForImageButton(hdc_mem[4], TEXT("800x600"), 0, 3, 61, 15, 61, 3, 122, 15, TRUE); DrawStringForImageButton(hdc_mem[4], TEXT("1024x768"), 0, 19, 61, 31, 61, 19, 122, 31, TRUE); DrawStringForImageButton(hdc_mem[4], TEXT("1280x1024"), 0, 35, 61, 47, 61, 35, 122, 47, TRUE); DrawStringForImageButton(hdc_mem[4], TEXT("1920x1080"), 0, 51, 61, 63, 61, 51, 122, 63, TRUE); DrawStringForImageButton(hdc_mem[4], langStr.szBtnResChange, 15, 67, 61, 79, 61, 67, 105, 79, TRUE); break; } DeleteObject(hBitmap); DeleteObject(hBrush_1); ReleaseDC(hWnd, hdc); }
void DrawRoundRect(HDC hdc){ RoundRect(hdc,100,100,300,300,50,50); }
INT_PTR CALLBACK ColorChooserDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: { //Initialize common controls INITCOMMONCONTROLSEX InitCtrlEx; InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCtrlEx.dwICC = ICC_BAR_CLASSES; InitCommonControlsEx(&InitCtrlEx); InitializeSlider(hwndDlg,IDC_RedSlider,255,1,0,false); InitializeSlider(hwndDlg,IDC_GreenSlider,255,1,0,false); InitializeSlider(hwndDlg,IDC_BlueSlider,255,1,0,false); HWND hWndComboBox=GetDlgItem(hwndDlg,IDC_Combo); //add items to combobox for (int i=0;i<9;i++) SendMessage(hWndComboBox,CB_ADDSTRING,0L,LPARAM(sColorOptions[i])); //update each item data with its original index, it might have changed while sorting for (int i=0;i<9;i++) SendMessage(hWndComboBox,CB_SETITEMDATA,SendMessage(hWndComboBox,CB_FINDSTRING,0L,LPARAM(sColorOptions[i])),LPARAM(i)); iRed=0; iGreen=0; iBlue=0; EnableWindow(GetDlgItem(hwndDlg,ID_APPLY),FALSE); EnableWindow(GetDlgItem(hwndDlg,ID_OK),FALSE); return FALSE; } case WM_CLOSE: EndDialog(hwndDlg, FALSE); return FALSE; case WM_COMMAND: // This switch identifies the control switch(LOWORD(wParam)) { case ID_OK: { int iOptionIndex; HWND hWndComboBox=GetDlgItem(hwndDlg,IDC_Combo); iOptionIndex=SendMessage(hWndComboBox,CB_GETITEMDATA,SendMessage(hWndComboBox,CB_GETCURSEL,0,0),0); //"Hour Numbers","Minute Ticks","Week Name","Date","Second Hand","Minute Hand","Hour Hand" WaitForSingleObject(g_hMutex,200); switch(iOptionIndex) { case 0: clrHourNumber=RGB(iRed,iGreen,iBlue);break; case 1: clrMinuteTicks=RGB(iRed,iGreen,iBlue);break; case 2: clrWeek=RGB(iRed,iGreen,iBlue);break; case 3: clrDate=RGB(iRed,iGreen,iBlue);break; case 4: clrSecondHand=RGB(iRed,iGreen,iBlue);break; case 5: clrMinuteHand=RGB(iRed,iGreen,iBlue);break; case 6: clrHourHand=RGB(iRed,iGreen,iBlue);break; case 7: clrCalendarBackGnd=RGB(iRed,iGreen,iBlue);break; case 8: clrCalendarDate=RGB(iRed,iGreen,iBlue);break; } ReleaseMutex(g_hMutex); EndDialog(hwndDlg, TRUE); return FALSE; } case ID_APPLY: { int iOptionIndex; HWND hWndComboBox=GetDlgItem(hwndDlg,IDC_Combo); iOptionIndex=SendMessage(hWndComboBox,CB_GETITEMDATA,SendMessage(hWndComboBox,CB_GETCURSEL,0,0),0); //"Hour Numbers","Minute Ticks","Week Name","Date","Second Hand","Minute Hand","Hour Hand" WaitForSingleObject(g_hMutex,200); switch(iOptionIndex) { case 0: clrHourNumber=RGB(iRed,iGreen,iBlue);break; case 1: clrMinuteTicks=RGB(iRed,iGreen,iBlue);break; case 2: clrWeek=RGB(iRed,iGreen,iBlue);break; case 3: clrDate=RGB(iRed,iGreen,iBlue);break; case 4: clrSecondHand=RGB(iRed,iGreen,iBlue);break; case 5: clrMinuteHand=RGB(iRed,iGreen,iBlue);break; case 6: clrHourHand=RGB(iRed,iGreen,iBlue);break; case 7: clrCalendarBackGnd=RGB(iRed,iGreen,iBlue);break; case 8: clrCalendarDate=RGB(iRed,iGreen,iBlue);break; } ReleaseMutex(g_hMutex); EnableWindow(GetDlgItem(hwndDlg,ID_APPLY),FALSE); return FALSE; } case ID_CANCEL: EndDialog(hwndDlg, FALSE); return FALSE; case IDC_Combo: if (HIWORD(wParam)==CBN_SELENDOK) { int iOptionIndex;COLORREF clrOldColor; iOptionIndex=SendMessage(HWND(lParam),CB_GETITEMDATA,SendMessage(HWND(lParam),CB_GETCURSEL,0,0),0); WaitForSingleObject(g_hMutex,200); switch(iOptionIndex) { case 0: clrOldColor=clrHourNumber;break; case 1: clrOldColor=clrMinuteTicks;break; case 2: clrOldColor=clrWeek;break; case 3: clrOldColor=clrDate;break; case 4: clrOldColor=clrSecondHand;break; case 5: clrOldColor=clrMinuteHand;break; case 6: clrOldColor=clrHourHand;break; case 7: clrOldColor=clrCalendarBackGnd;break; case 8: clrOldColor=clrCalendarDate;break; } iRed=GetRValue(clrOldColor); iGreen=GetGValue(clrOldColor); iBlue=GetBValue(clrOldColor); SendMessage(GetDlgItem(hwndDlg,IDC_RedSlider),TBM_SETPOS ,TRUE,iRed); SendMessage(GetDlgItem(hwndDlg,IDC_GreenSlider),TBM_SETPOS ,TRUE,iGreen); SendMessage(GetDlgItem(hwndDlg,IDC_BlueSlider),TBM_SETPOS ,TRUE,iBlue); UpdatePreviewArea(hwndDlg,GetDC(hwndDlg),IDC_ResultPreview,RGB(iRed,iGreen,iBlue)); EnableWindow(GetDlgItem(hwndDlg,ID_OK),TRUE); ReleaseMutex(g_hMutex); return FALSE; } break; } case WM_HSCROLL: { if (lParam) { DWORD clrOld=RGB(iRed,iGreen,iBlue); switch (GetDlgCtrlID(HWND(lParam))) { case IDC_RedSlider: iRed=SendMessage(HWND(lParam),TBM_GETPOS ,0,0); break; case IDC_GreenSlider: iGreen=SendMessage(HWND(lParam),TBM_GETPOS ,0,0); break; case IDC_BlueSlider: iBlue=SendMessage(HWND(lParam),TBM_GETPOS ,0,0); break; } UpdatePreviewArea(hwndDlg,GetDC(hwndDlg),IDC_ResultPreview,RGB(iRed,iGreen,iBlue)); if(RGB(iRed,iGreen,iBlue)!=clrOld) EnableWindow(GetDlgItem(hwndDlg,ID_APPLY),TRUE); return FALSE; } break; } case WM_PAINT: { //refresh the boxes PAINTSTRUCT ps; BeginPaint(hwndDlg, &ps); UpdatePreviewArea(hwndDlg,ps.hdc,IDC_ResultPreview,RGB(iRed,iGreen,iBlue)); EndPaint(hwndDlg, &ps); return FALSE; } case WM_NOTIFY: { NMHDR tNotifyHeader; NMCUSTOMDRAW tRedrawInfo; if (lParam!=NULL) { tNotifyHeader=*(LPNMHDR)lParam; if (tNotifyHeader.code==NM_CUSTOMDRAW) { tRedrawInfo=*(LPNMCUSTOMDRAW) lParam; switch (tRedrawInfo.dwDrawStage) { case CDDS_PREPAINT: // This is the way a dialog box can send back lresults SetWindowLong(hwndDlg, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW); return TRUE; case CDDS_ITEMPREPAINT : if (tRedrawInfo.dwItemSpec == TBCD_THUMB) { HBRUSH hBrush;HPEN hPen; COLORREF clrDrawColor;int iSaveDCState; switch (tNotifyHeader.idFrom) { case IDC_RedSlider: clrDrawColor=RGB(iRed,0,0); break; case IDC_GreenSlider: clrDrawColor=RGB(0,iGreen,0); break; case IDC_BlueSlider: clrDrawColor=RGB(0,0,iBlue); break; } iSaveDCState=SaveDC(tRedrawInfo.hdc); //If thumb is selected switch to hatched brush if (tRedrawInfo.uItemState && CDIS_SELECTED) { // create a hatch-patterned pixel pattern for patterned brush WORD PatternPixel[8] ={ 0x0055,0x00aa,0x0055,0x00aa,0x0055,0x00aa,0x0055,0x00aa }; HBITMAP hPattern; hPattern=CreateBitmap(8, 8, 1, 1, PatternPixel); LOGBRUSH logBrush; logBrush.lbStyle = BS_PATTERN; logBrush.lbHatch = (long)hPattern; hBrush=CreateBrushIndirect(&logBrush); SetBrushOrgEx(tRedrawInfo.hdc,tRedrawInfo.rc.right%8, tRedrawInfo.rc.top%8,NULL); SetBkColor(tRedrawInfo.hdc,clrDrawColor); SetTextColor(tRedrawInfo.hdc,ColorAdjustLuma(clrDrawColor,500)); } else hBrush=CreateSolidBrush(clrDrawColor); SelectObject(tRedrawInfo.hdc,hBrush); //Draw the thumb hPen=CreatePen(PS_SOLID,1,ColorAdjustLuma(clrDrawColor,-333)); SelectObject(tRedrawInfo.hdc,hPen); RoundRect(tRedrawInfo.hdc,tRedrawInfo.rc.left,tRedrawInfo.rc.top,tRedrawInfo.rc.right,tRedrawInfo.rc.bottom,2,2); DeleteObject(hPen); //give some 3D look for the thumb hPen=CreatePen(PS_SOLID,1,ColorAdjustLuma(clrDrawColor,400)); SelectObject(tRedrawInfo.hdc,hPen); MoveToEx(tRedrawInfo.hdc,tRedrawInfo.rc.left,tRedrawInfo.rc.bottom-2,NULL); LineTo(tRedrawInfo.hdc,tRedrawInfo.rc.left,tRedrawInfo.rc.top); MoveToEx(tRedrawInfo.hdc,tRedrawInfo.rc.left+1,tRedrawInfo.rc.top,NULL); LineTo(tRedrawInfo.hdc,tRedrawInfo.rc.right-1,tRedrawInfo.rc.top); //clean up and return RestoreDC(tRedrawInfo.hdc,iSaveDCState); DeleteObject(hPen); DeleteObject(hBrush); SetWindowLong(hwndDlg, DWL_MSGRESULT, CDRF_SKIPDEFAULT ); return TRUE; } else { SetWindowLong(hwndDlg, DWL_MSGRESULT, CDRF_DODEFAULT); return FALSE; } } } } break; } } return FALSE; }