void CStartupView::DrawTitleText(Gdiplus::Graphics &graphics) { Gdiplus::Rect gdipRcLeftButtons; CalculateLeftButtonsRegion(gdipRcLeftButtons); Gdiplus::SolidBrush blackBrush(Gdiplus::Color(255, 0, 0, 0)); Gdiplus::Font titleFont(m_csFontFamily, m_iTitleFontSize, Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::Font subTitleFont(m_csFontFamily, m_iNormalFontSize, Gdiplus::FontStyleBold, Gdiplus::UnitPixel); CString csRecord1; csRecord1.LoadString(IDS_RECORD); INT x = gdipRcLeftButtons.X; INT y = gdipRcLeftButtons.Y + 2*BUTTON_TITLE_HEIGHT; Gdiplus::PointF textOrigin(x/*gdipRcLeftButtons.X*/, y/*(gdipRcLeftButtons.Y + gdipRcLeftButtons.Height)*/ ); graphics.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAliasGridFit); graphics.DrawString(csRecord1, csRecord1.GetLength(), &titleFont, textOrigin, &blackBrush); x = gdipRcLeftButtons.X; y = gdipRcLeftButtons.Y + BUTTON_TITLE_HEIGHT + 2*BUTTON_SUBTITLE_HEIGHT + 2*(BUTTON_HEIGHT1 + 10) + SEPARATOR_HEIGHT + 5; //Gdiplus::PointF textOrigin(x/*gdipRcLeftButtons.X*/, y/*(gdipRcLeftButtons.Y + gdipRcLeftButtons.Height)*/ ); textOrigin.X = x; textOrigin.Y = y; CString csWelcome; //csWelcome.LoadStringW(IDS_WELCOME); csWelcome.LoadStringW(ID_MENU_NEW); graphics.DrawString(csWelcome, csWelcome.GetLength(), &titleFont, textOrigin, &blackBrush); textOrigin.Y += BUTTON_TITLE_HEIGHT; Gdiplus::Rect gdipRcRightButtons; CalculateRightButtonsRegion(gdipRcRightButtons); textOrigin.X = gdipRcRightButtons.X ; textOrigin.Y = gdipRcRightButtons.Y + BUTTON_TITLE_HEIGHT + BUTTON_HEIGHT;; CString csRecord; //csRecord.LoadStringW(IDS_RECORD); csRecord.LoadStringW(ID_MENU_OPEN); graphics.DrawString(csRecord, csRecord.GetLength(), &titleFont, textOrigin, &blackBrush); /*textOrigin.X = gdipRcRightButtons.X ; textOrigin.Y += 3*BUTTON_HEIGHT; CString csRecent; csRecent.LoadStringW(IDS_RECENTLY_OPENED_PROJECTS); graphics.DrawString(csRecent, csRecent.GetLength(), &titleFont, textOrigin, &blackBrush); */ }
void DxFont::BuildFontSheetBitmap(Gdiplus::Font & font, Gdiplus::Graphics & charGraphics, Gdiplus::Bitmap & charBitmap, Gdiplus::Graphics & fontSheetGraphics) { WCHAR charString[ 2 ] = { ' ', 0 }; Gdiplus::SolidBrush whiteBrush( Gdiplus::Color( 255, 255, 255, 255 ) ); UINT fontSheetX = 0; UINT fontSheetY = 0; for( UINT i = 0; i < NumChars; ++i ) { charString[ 0 ] = static_cast<WCHAR>(StartChar + i); charGraphics.Clear(Gdiplus::Color(0, 0, 0, 0)); charGraphics.DrawString(charString, 1, &font, Gdiplus::PointF(0.0f, 0.0f), &whiteBrush); int minX = GetCharMinX(charBitmap); int maxX = GetCharMaxX(charBitmap); int charWidth = maxX - minX + 1; if(fontSheetX + charWidth >= TexWidth) { fontSheetX = 0; fontSheetY += static_cast<int>(CharHeight) + 1; } CharRects[i] = CD3D11_RECT(fontSheetX, fontSheetY, fontSheetX + charWidth, fontSheetY + CharHeight); fontSheetGraphics.DrawImage(&charBitmap, fontSheetX, fontSheetY, minX, 0, charWidth, CharHeight, Gdiplus::UnitPixel); fontSheetX += charWidth + 1; } }
// 绘制按钮 void CDUIButton::DrawButton( Gdiplus::Graphics& graphics) { // 获取按钮图片信息 UINT iCount = m_nImageCount; int iButtonIndex = 0; if(m_bDisabled && iCount >= 4) iButtonIndex = 3; else if(m_bPressed && iCount >= 3)iButtonIndex = 2; else if(m_bHovering && iCount >= 2)iButtonIndex = 1; else iButtonIndex = 0; // 在指定位置绘制按钮 int iWidth = m_pImage->GetWidth()/iCount; int iHeight = m_pImage->GetHeight(); RectF grect; grect.X=(Gdiplus::REAL)m_rcRect.left; grect.Y=(Gdiplus::REAL)m_rcRect.top; grect.Width = (Gdiplus::REAL)m_rcRect.Width(); grect.Height = (Gdiplus::REAL)m_rcRect.Height(); graphics.DrawImage(m_pImage, grect, (Gdiplus::REAL)iWidth*iButtonIndex,0,(Gdiplus::REAL)iWidth,(Gdiplus::REAL)iHeight, UnitPixel); StringFormat stringFormat; if (m_pIcon) { PointF ptIcon(m_ptIcon.x,m_ptIcon.y); graphics.DrawImage(m_pIcon,ptIcon); grect.X=(Gdiplus::REAL)m_ptIcon.x + m_pIcon->GetWidth() + 2; grect.Width = (Gdiplus::REAL)m_rcRect.Width() - m_pIcon->GetWidth() - 2; stringFormat.SetFormatFlags( StringFormatFlagsDirectionVertical); stringFormat.SetAlignment(StringAlignmentCenter); stringFormat.SetLineAlignment(StringAlignmentNear); } else { //stringFormat.SetFormatFlags( StringFormatFlagsDirectionVertical); stringFormat.SetAlignment(StringAlignmentCenter); stringFormat.SetLineAlignment(StringAlignmentCenter); } if (!m_strCaption.IsEmpty()) { //绘制文字 FontFamily fontFamily(L"宋体"); Gdiplus::Font font(&fontFamily, 10, FontStyleRegular, UnitPoint); CStringW strTitle(m_strCaption); SolidBrush brush((ARGB)Color::White); if (m_bDisabled) { brush.SetColor((ARGB)Color::Gray); } graphics.DrawString(strTitle, strTitle.GetLength(), &font,grect,&stringFormat, &brush); } }
void Graphics::DrawString(const wchar_t* text, size_t length, Font* font, const PointF& origin, const StringFormat* sf, Brush* brush) { Gdiplus::Graphics* g = reinterpret_cast<Gdiplus::Graphics*>(_private); Gdiplus::Brush* gdiBrush = reinterpret_cast<Gdiplus::Brush*>(brush->_private); Gdiplus::Font* gdiFont = reinterpret_cast<Gdiplus::Font*>(font->_private); Gdiplus::StringFormat* gdiFormat = reinterpret_cast<Gdiplus::StringFormat*>(sf->_private); g->DrawString(text, (int)length, gdiFont, ToGDIPoint<PointF, Gdiplus::PointF>(origin), gdiFormat, gdiBrush); }
void Label::onDraw(Gdiplus::Graphics& g, int x, int y) { Gdiplus::FontFamily fontFamily(fontFamily_.c_str()); Gdiplus::Font font(&fontFamily, fontSize_, Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::PointF pointF(float(x+x_), float(y+y_)); Gdiplus::SolidBrush solidBrush(fontColor_); g.DrawString(text_.c_str(), text_.length(), &font, pointF, &solidBrush); }
void TextComponent::paint(Gdiplus::Graphics& graphics) { Gdiplus::SolidBrush brush(Gdiplus::Color(m_r, m_g, m_b)); Gdiplus::FontFamily fontFamily(L"Helvetica"); Gdiplus::Font font(&fontFamily, (Gdiplus::REAL) m_fontSize, Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::PointF pointF(m_x, m_y); Gdiplus::RectF boundingBox; graphics.MeasureString(m_text.c_str(), -1, &font, pointF, &boundingBox); m_width = boundingBox.Width; m_height = boundingBox.Height; graphics.DrawString(m_text.c_str(), -1, &font, pointF, &brush); }
void draw_text(const Rect* r, const char* str) { Gdiplus::SolidBrush* brush = new Gdiplus::SolidBrush(*color); if(brush == NULL) return; st count = cl::StringUtil::char_to_wchar_count(str); wchar* wstr = cl_alloc_type_with_count(wchar, count); if(wstr == NULL) { delete brush; return; } cl::StringUtil::char_to_wchar(wstr, count, str); Gdiplus::Region old_val; graphics->GetClip(&old_val); Gdiplus::Region new_val(TO_RECT(r)); graphics->SetClip(&new_val); graphics->DrawString(wstr, -1, font, TO_POINTF(((Point*)r)), brush); graphics->SetClip(&old_val); cl_free(wstr); delete brush; }
void CTranslucentProgressBar::Render(Gdiplus::Graphics& g) { float ratio = (float)m_nPos / (m_nUpper - m_nLower); CRect rc; GetWindowRect(&rc); GetParent()->ScreenToClient(&rc); Gdiplus::RectF rect((float)rc.left, (float)rc.top, (float)rc.Width(), (float)rc.Height()); if (m_imageList[0] != NULL) g.DrawImage(m_imageList[0], rect, static_cast<float>(0), static_cast<float>(0), rect.Width, rect.Height, Gdiplus::UnitPixel); if (m_imageList[1] != NULL) { float nWidth = rc.Width() * ratio; rect.Width = nWidth; (void)g.DrawImage(m_imageList[1], rect, static_cast<float>(0), static_cast<float>(0), nWidth, rect.Height, Gdiplus::UnitPixel); rect.Width = (float)rc.Width(); } CString szText; GetWindowText(szText); if (szText.GetLength() > 0) { TCHAR wsFile[MAX_PATH] = {0}; if(!CToolsHelp::Strncpy(wsFile,MAX_PATH,(LPCTSTR)szText,static_cast<IVS_UINT32>(szText.GetLength()))) { BP_RUN_LOG_ERR(IVS_ALLOC_MEMORY_ERROR,"IVS_OCX::","Failed"); return; } WCHAR* wstr = CTranslucentUtility::ttowc(wsFile); if (NULL != wstr) { (void)g.DrawString(wstr, static_cast<int >(wcslen(wstr)), m_pFont, rect, &m_format, &m_brush); delete []wstr; wstr = NULL; } } }
//--------------------------------------------------------------------------- void CreateAndIndexAtlasBitmap(Gdiplus::Font& font, Gdiplus::Graphics& charGraphics, Gdiplus::Bitmap& charBitmap, Gdiplus::Graphics& fontSheetGraphics, FontAtlasSizeInfo* pSizeInfo, ScreenRect* pCharacterMap ) { using namespace Gdiplus; WCHAR charString[2] = {' ', 0}; SolidBrush whiteBrush(Color(255, 255, 255, 255)); UINT fontSheetX = 0; UINT fontSheetY = 0; for(UINT i = 0; i < s_NumChars; ++i) { charString[0] = static_cast<WCHAR>(s_StartChar + i); charGraphics.Clear(Color(0, 0, 0, 0)); charGraphics.DrawString(charString, 1, &font, PointF(0.0f, 0.0f), &whiteBrush); // Compute tight char horizontal bounds (ignoring empty space). int minX = GetCharMinX(charBitmap); int maxX = GetCharMaxX(charBitmap); int charWidth = maxX - minX + 1; // Move to next row of the font sheet? if(fontSheetX + charWidth >= pSizeInfo->atlasTextureWidth) { fontSheetX = 0; fontSheetY += static_cast<int>(pSizeInfo->characterRowHeight) + 1; } // Save the rectangle of this character on the texture atlas. pCharacterMap[i] = ScreenRect(fontSheetX, fontSheetY, fontSheetX + charWidth, fontSheetY + pSizeInfo->characterRowHeight); // The rectangle subset of the source image to copy. fontSheetGraphics.DrawImage(&charBitmap, fontSheetX, fontSheetY, minX, 0, charWidth, pSizeInfo->characterRowHeight, UnitPixel); // next char fontSheetX += charWidth + 1; } }
void CMonitorWidget::DrawInformations(Gdiplus::Graphics & graphics) { CRect rcDuration, rcPages, rcDiskSpace; pStaticDuration.GetWindowRect(rcDuration); pStaticPages.GetWindowRect(rcPages); pStaticDiskSpace.GetWindowRect(rcDiskSpace); ScreenToClient(rcDuration); ScreenToClient(rcPages); ScreenToClient(rcDiskSpace); Gdiplus::SolidBrush textBrush(Gdiplus::Color(150, 0,0,0)); Gdiplus::SolidBrush shadowBrush(Gdiplus::Color(150, 255, 255, 255)); Gdiplus::Font font(_T("Arial"), m_nFontSize, Gdiplus::FontStyleBold, Gdiplus::UnitPixel); if(m_bShowDuration) { Gdiplus::PointF textOrigin(rcDuration.left, rcDuration.top); Gdiplus::PointF textOriginShadow(rcDuration.left, rcDuration.top+1); graphics.DrawString(m_csDuration, m_csDuration.GetLength(), &font, textOriginShadow, &shadowBrush); graphics.DrawString(m_csDuration, m_csDuration.GetLength(), &font, textOrigin, &textBrush); } if(m_bShowPages) { Gdiplus::PointF textOrigin(rcPages.left, rcPages.top); Gdiplus::PointF textOriginShadow(rcPages.left, rcPages.top+1); graphics.DrawString(m_csPages, m_csPages.GetLength(), &font, textOriginShadow, &shadowBrush); graphics.DrawString(m_csPages, m_csPages.GetLength(), &font, textOrigin, &textBrush); } if(m_bShowDiskSpace) { Gdiplus::PointF textOrigin(rcDiskSpace.left, rcDiskSpace.top); Gdiplus::PointF textOriginShadow(rcDiskSpace.left, rcDiskSpace.top+1); graphics.DrawString(m_csDiskSpace, m_csDiskSpace.GetLength(), &font, textOriginShadow, &shadowBrush); graphics.DrawString(m_csDiskSpace, m_csDiskSpace.GetLength(), &font, textOrigin, &textBrush); } }
void CTabsControl::DrawItem(CTabControl *item, Gdiplus::Graphics &g) { CRect rect = ItemRect(item); g.ResetTransform(); g.TranslateTransform((REAL)rect.left, (REAL)rect.top); RectF rf(0.0f, 0.0f, (REAL)rect.Width(), (REAL)rect.Height()); RectF rx; if(item->selected) { #define shadowb 10 CDIB tmp; tmp.Resize(rect.Width() + shadowb * 2, rect.Height() + shadowb * 2); if(tmp.Ready()) { Graphics gt(tmp.bmp); RectF rx(0, 0, (REAL)tmp.Width(), (REAL)tmp.Height()); GraphicsPath *path = new GraphicsPath(); path->AddLine(rx.X + shadowb, rx.Y + rx.Height - shadowb, rx.X + rx.Width - 2 - shadowb, rx.Y + rx.Height - shadowb); path->AddLine(rx.X + rx.Width - 2 - shadowb, rx.Y + rx.Height - shadowb, rx.X + rx.Width - 2, rx.Y); path->AddLine(rx.X + rx.Width - 2, rx.Y, rx.X + rx.Width, rx.Y + rx.Height); path->AddLine(rx.X + rx.Width, rx.Y + rx.Height, rx.X, rx.Y + rx.Height); path->AddLine(rx.X, rx.Y, rx.X + shadowb, rx.Y + rx.Height - shadowb); path->CloseFigure(); SolidBrush brush(0xff000000); gt.FillPath(&brush, path); tmp.Blur(tmp.Rect(), CRect(0, 0, 0, 0), shadowb); g.DrawImage(tmp.bmp, rf, shadowb, shadowb, rf.Width, rf.Height, UnitPixel); delete path; } } Font font(L"Arial", item->selected ? 8.0f : 8.0f); StringFormat *stringFormat = new StringFormat(); stringFormat->SetAlignment(StringAlignmentCenter); stringFormat->SetLineAlignment(StringAlignmentCenter); stringFormat->SetTrimming(StringTrimmingEllipsisCharacter); stringFormat->SetFormatFlags(StringFormatFlagsLineLimit); if(item->icon->Ready()) { g.SetInterpolationMode(InterpolationModeBicubic); rx = rf; rx.Y += 6; rx.Height -= (20 + rx.Y); rx.Width = rx.Height; rx.X += (rf.Width - rx.Width) / 2; if(item->selected) { rx.Y++; #define shadow 5 CDIB tmp; tmp.Resize(item->icon->Width(), item->icon->Height()); if(tmp.Ready()) { tmp.Draw(CRect(shadow, shadow, item->icon->Width() - shadow, item->icon->Height() - shadow), item->icon->Rect(), item->icon); DIB_ARGB *p = tmp.scan0; int size = tmp.Width() * tmp.Height(); for(int i = 0; i < size; i++, p++) { p->r = 0; p->g = 0; p->b = 0; } tmp.Blur(tmp.Rect(), CRect(0, 0, 0, 0), shadow); g.DrawImage(tmp.bmp, RectF(rx.X, rx.Y + shadow, rx.Width, rx.Height)); } tmp.Assign(item->icon); /*if(tmp.Ready()) { DIB_ARGB *p = tmp.scan0; int size = tmp.Width() * tmp.Height(); for(int i = 0; i < size; i++, p++) { p->r = 0x6f; p->g = 0xa6; p->b = 0xde; } }*/ g.DrawImage(tmp.bmp, rx); } else { g.DrawImage(item->icon->bmp, rx); } } SolidBrush brush(0xff000000); rx = rf; rx.Height = 20; rx.Y = rf.Height - rx.Height; rx.Y++; g.DrawString(item->text.GetBuffer(), item->text.GetLength(), &font, rx, stringFormat, &brush); brush.SetColor(item->selected && false ? 0xff6fa6de : 0xfff0f0f0); rx.Y--; g.DrawString(item->text.GetBuffer(), item->text.GetLength(), &font, rx, stringFormat, &brush); delete stringFormat; //POSITION p = items.Find(item); //items.GetNext(p); //if(p) { RectF rx = rf; rx.X += rx.Width - 1; rx.Width = 1; LinearGradientBrush brush(rx, Color(140, 0x69, 0x69, 0x69), Color(0x69, 0x69, 0x69), LinearGradientModeVertical); g.FillRectangle(&brush, rx); } }
void CSimplePanelDlg::DrawEmpty(Gdiplus::Graphics& gr, CRect& rc) { //每次先刷新背景 Gdiplus::Color cl = Gdiplus::Color::White; Gdiplus::SolidBrush brush(cl); gr.FillRectangle(&brush, 0, 0, rc.Width(), rc.Height()); //显示线路号背景 Gdiplus::PointF pointLineBK(60, 0); gr.DrawImage(m_pImLineBK, pointLineBK); int nWidth = m_pImLineBK->GetWidth(); int nHeight = m_pImLineBK->GetHeight(); //显示-- CString strLineNum = "--"; Gdiplus::SolidBrush brushLineNum(Gdiplus::Color::White); WCHAR wcLineNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strLineNum, strLineNum.GetLength(), wcLineNum, sizeof(wcLineNum)); Gdiplus::PointF pointLineNum = pointLineBK; Gdiplus::RectF rectLineNum(pointLineNum, Gdiplus::SizeF(nWidth, nHeight)); Gdiplus::Font fontLineNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatLineNum; stringFormatLineNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatLineNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcLineNum, wcslen(wcLineNum), &fontLineNum, rectLineNum, &stringFormatLineNum, &brushLineNum); //显示路 std::wstring str = L"路"; Gdiplus::SolidBrush brushLu(Gdiplus::Color::White); Gdiplus::PointF pointWord = pointLineBK; pointWord.X += 0.75 * nWidth; Gdiplus::RectF rectWord(pointWord, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontLu(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatWord; stringFormatWord.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatWord.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(str.c_str(), str.size(), &fontLu, rectWord, &stringFormatWord, &brushLu); //第一辆车距离站 if(1) { CString strNum = "- -"; Gdiplus::SolidBrush brushNum(Gdiplus::Color(149,158,168)); WCHAR wcNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strNum, strNum.GetLength(), wcNum, sizeof(wcNum)); Gdiplus::PointF pointNum(60 + nWidth, 0); Gdiplus::RectF rectNum(pointNum, Gdiplus::SizeF(145, nHeight)); Gdiplus::Font fontNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatNum; stringFormatNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcNum, wcslen(wcNum), &fontNum, rectNum, &stringFormatNum, &brushNum); std::wstring wstr = L"站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(149,158,168)); Gdiplus::PointF pointZhan(60 + nWidth + 0.7 * 145, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } if(1) { //第二辆车距离站 CString strNum = "- -"; Gdiplus::SolidBrush brushNum(Gdiplus::Color(149,158,168)); WCHAR wcNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strNum, strNum.GetLength(), wcNum, sizeof(wcNum)); Gdiplus::PointF pointNum(60 + nWidth + 145, 0); Gdiplus::RectF rectNum(pointNum, Gdiplus::SizeF(145, nHeight)); Gdiplus::Font fontNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatNum; stringFormatNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcNum, wcslen(wcNum), &fontNum, rectNum, &stringFormatNum, &brushNum); std::wstring wstr = L"站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(149,158,168)); Gdiplus::PointF pointZhan(60 + nWidth + 0.7 * 145 + 145, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } }
void CSimplePanelDlg::DrawArrive(Gdiplus::Graphics& gr, vector<BusArrivalInfo>& vecArrival, CRect& rc, CData* pData) { //每次先刷新背景 Gdiplus::Color cl = Gdiplus::Color::White; Gdiplus::SolidBrush brush(cl); gr.FillRectangle(&brush, 0, 0, rc.Width(), rc.Height()); //显示线路号背景 Gdiplus::PointF pointLineBK(60, 0); gr.DrawImage(m_pImLineBK, pointLineBK); int nWidth = m_pImLineBK->GetWidth(); int nHeight = m_pImLineBK->GetHeight(); //显示线路号 CString strLineNum = pData->GetLineNumber(); Gdiplus::SolidBrush brushLineNum(Gdiplus::Color::White); WCHAR wcLineNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strLineNum, strLineNum.GetLength(), wcLineNum, sizeof(wcLineNum)); Gdiplus::PointF pointLineNum = pointLineBK; Gdiplus::RectF rectLineNum(pointLineNum, Gdiplus::SizeF(nWidth, nHeight)); Gdiplus::Font fontLineNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatLineNum; stringFormatLineNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatLineNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcLineNum, wcslen(wcLineNum), &fontLineNum, rectLineNum, &stringFormatLineNum, &brushLineNum); //显示路 std::wstring str = L"路"; Gdiplus::SolidBrush brushLu(Gdiplus::Color::White); Gdiplus::PointF pointWord = pointLineBK; pointWord.X += 0.75 * nWidth; Gdiplus::RectF rectWord(pointWord, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontLu(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatWord; stringFormatWord.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatWord.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(str.c_str(), str.size(), &fontLu, rectWord, &stringFormatWord, &brushLu); if(0 < vecArrival.size()) { //显示第一辆车到站 BusArrivalInfo& stArrive = vecArrival[0]; if(stArrive.iNum > 0) { //距离站 CString strNum; strNum.Format("%d", stArrive.iNum); Gdiplus::SolidBrush brushNum(Gdiplus::Color(23,117,231)); WCHAR wcNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strNum, strNum.GetLength(), wcNum, sizeof(wcNum)); Gdiplus::PointF pointNum(60 + nWidth, 0); Gdiplus::RectF rectNum(pointNum, Gdiplus::SizeF(145, nHeight)); Gdiplus::Font fontNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatNum; stringFormatNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcNum, wcslen(wcNum), &fontNum, rectNum, &stringFormatNum, &brushNum); std::wstring wstr = L"站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(149,158,168)); Gdiplus::PointF pointZhan(60 + nWidth + 145 - 32, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } else if(stArrive.iNum == 0) { if(stArrive.iDistance <= 50) { std::wstring wstr = L"已经进站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } else { std::wstring wstr = L"即将到站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } } } else { std::wstring wstr = L"待发"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } if(1 < vecArrival.size()) { //显示第二辆车到站 BusArrivalInfo& stArrive = vecArrival[1]; if(stArrive.iNum > 0) { //距离站 CString strNum; strNum.Format("%d", stArrive.iNum); Gdiplus::SolidBrush brushNum(Gdiplus::Color(23,117,231)); WCHAR wcNum[6] = {0}; MultiByteToWideChar(CP_ACP, 0, (char*)(LPCTSTR)strNum, strNum.GetLength(), wcNum, sizeof(wcNum)); Gdiplus::PointF pointNum(60 + nWidth + 145, 0); Gdiplus::RectF rectNum(pointNum, Gdiplus::SizeF(145, nHeight)); Gdiplus::Font fontNum(L"helvetica", 42 , Gdiplus::FontStyleBold, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatNum; stringFormatNum.SetAlignment(Gdiplus::StringAlignmentCenter); stringFormatNum.SetLineAlignment(Gdiplus::StringAlignmentCenter); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wcNum, wcslen(wcNum), &fontNum, rectNum, &stringFormatNum, &brushNum); std::wstring wstr = L"站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(149,158,168)); Gdiplus::PointF pointZhan(60 + nWidth + 145 + 145 - 32, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(40, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentNear); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } else if(stArrive.iNum == 0) { if(stArrive.iDistance <= 50) { std::wstring wstr = L"已经进站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth + 145, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } else { std::wstring wstr = L"即将到站"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth + 145, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } } } else { std::wstring wstr = L"待发"; Gdiplus::SolidBrush brushZhan(Gdiplus::Color(23,117,231)); Gdiplus::PointF pointZhan(60 + nWidth + 145, 0); Gdiplus::RectF rectZhan(pointZhan, Gdiplus::SizeF(145, nHeight - 5)); Gdiplus::Font fontZhan(L"方正兰亭黑简体", 24 , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); Gdiplus::StringFormat stringFormatZhan; stringFormatZhan.SetAlignment(Gdiplus::StringAlignmentFar); stringFormatZhan.SetLineAlignment(Gdiplus::StringAlignmentFar); gr.SetTextRenderingHint(Gdiplus::TextRenderingHintAntiAlias); gr.DrawString(wstr.c_str(), wstr.size(), &fontZhan, rectZhan, &stringFormatZhan, &brushZhan); } }