本文整理汇总了C++中gdiplus::Rect类的典型用法代码示例。如果您正苦于以下问题:C++ Rect类的具体用法?C++ Rect怎么用?C++ Rect使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Rect类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MeasureString
bool TextOutlineStrategy::MeasureString(
Gdiplus::Graphics* pGraphics,
Gdiplus::FontFamily* pFontFamily,
Gdiplus::FontStyle fontStyle,
int nfontSize,
const wchar_t*pszText,
Gdiplus::Rect rtDraw,
Gdiplus::StringFormat* pStrFormat,
float* pfDestWidth,
float* pfDestHeight )
{
using namespace Gdiplus;
GraphicsPath path;
Status status = path.AddString(pszText,wcslen(pszText),pFontFamily,fontStyle,nfontSize,rtDraw,pStrFormat);
if(status!=Ok)
return false;
*pfDestWidth= rtDraw.GetLeft();
*pfDestHeight= rtDraw.GetTop();
bool b = GDIPath::MeasureGraphicsPath(pGraphics, &path, pfDestWidth, pfDestHeight);
if(false==b)
return false;
float pixelThick = 0.0f;
b = GDIPath::ConvertToPixels(pGraphics,m_nThickness,0.0f,&pixelThick,NULL);
if(false==b)
return false;
*pfDestWidth += pixelThick;
*pfDestHeight += pixelThick;
return true;
}
示例2: DrawBackground
void TrackListCtrl::DrawBackground(Gdiplus::Graphics& g, const Gdiplus::Rect& r)
{
CRect rc;
HDC hdc = g.GetHDC();
if (hdc == NULL)
{
TRACE(_T("@1 TrackListCtrl::DrawBackground. Cant get HDC\r\n"));
return;
}
CDC* pDC = CDC::FromHandle(hdc);
rc.SetRect(r.X, r.Y, r.GetRight(), r.GetBottom());
pDC->FillSolidRect(&rc, m_colors[COL_Bk]);//RGB(0,0,0));
//if (GetItemCount() == 0)
//{
// rc.top += 10;
// pDC->SetTextColor(m_colors[COL_Text]);
// pDC->SetBkMode(TRANSPARENT);
// CFont* oldFont = pDC->SelectObject(m_pBoldFont);
// pDC->DrawText(PRGAPI()->GetString(IDS_EMPTY), -1, rc,
// DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_NOCLIP);
// pDC->SelectObject(oldFont);
//}
g.ReleaseHDC(pDC->m_hDC);
}
示例3: MeasureString
bool TextNoOutlineStrategy::MeasureString(
Gdiplus::Graphics* pGraphics,
Gdiplus::FontFamily* pFontFamily,
Gdiplus::FontStyle fontStyle,
int nfontSize,
const wchar_t*pszText,
Gdiplus::Rect rtDraw,
Gdiplus::StringFormat* pStrFormat,
float* pfPixelsStartX,
float* pfPixelsStartY,
float* pfDestWidth,
float* pfDestHeight )
{
using namespace Gdiplus;
GraphicsPath path;
Status status = path.AddString(pszText,wcslen(pszText),pFontFamily,fontStyle,nfontSize,rtDraw,pStrFormat);
if(status!=Ok)
return false;
*pfDestWidth= rtDraw.GetLeft();
*pfDestHeight= rtDraw.GetTop();
bool b = GDIPath::MeasureGraphicsPath(pGraphics, &path, pfPixelsStartX, pfPixelsStartY, pfDestWidth, pfDestHeight);
return b;
}
示例4: updateView
void CImageEditorView::updateView( Canvas* canvas, Gdiplus::Rect rect ) {
POINT pt;
GetScrollOffset(pt);
rect.Offset(-pt.x, -pt.y);
RECT rc = {rect.X, rect.Y, rect.GetRight(), rect.GetBottom()};
RECT fullRect = { 0,0, canvas_->getWidth(), canvas_->getHeigth()};
//GetClientRect(&clientRect);
InvalidateRect(&rc);
}
示例5: ElementFromPoint
ElementPtr Renderer::ElementFromPoint(int x, int y)
{
for (std::list<ElementPtr>::iterator i = m_zOrder.begin(); i != m_zOrder.end(); ++i)
{
Gdiplus::Rect r = (*i)->GetBoundingRect();
if (r.Contains(x, y))
return (*i);
}
return ElementPtr();
}
示例6: GdiMeasureStringRealHeight
bool TextNoOutlineStrategy::GdiMeasureStringRealHeight(
Gdiplus::Graphics* pGraphics,
LOGFONTW* pLogFont,
const wchar_t*pszText,
Gdiplus::Rect rtDraw,
float* pfPixelsStartX,
float* pfPixelsStartY,
float* pfDestWidth,
float* pfDestHeight )
{
using namespace Gdiplus;
Gdiplus::GraphicsPath* pPath=NULL;
bool b = GDIPath::GetStringPath(
pGraphics,
&pPath,
pszText,
pLogFont,
rtDraw);
if(false==b)
{
if(pPath)
{
delete pPath;
pPath = NULL;
}
return false;
}
*pfDestWidth= rtDraw.GetLeft();
*pfDestHeight= rtDraw.GetTop();
b = GDIPath::MeasureGraphicsPathRealHeight(pGraphics, pPath, pfPixelsStartX, pfPixelsStartY, pfDestWidth, pfDestHeight);
if(pPath)
{
delete pPath;
pPath = NULL;
}
return b;
}
示例7: DrawRoundedRectangle
void DrawRoundedRectangle(Gdiplus::Graphics* gr, Gdiplus::Rect r, int d, Gdiplus::Pen* p, Gdiplus::Brush*br){
using namespace Gdiplus;
GraphicsPath gp;
// d = min(min(d, r.Width),r.Height);
gp.AddArc(r.X, r.Y, d, d, 180, 90);
gp.AddArc(max(r.X + r.Width - d,r.X), r.Y, d, d, 270, 90);
gp.AddArc(max(r.X, r.X + r.Width - d), max(r.Y, r.Y + r.Height - d), d, d, 0, 90);
gp.AddArc(r.X, max(r.Y, r.Y + r.Height - d), d, d, 90, 90);
gp.AddLine(r.X, max(r.Y, r.Y + r.Height - d), r.X, min(r.Y + d/2, r.GetBottom()));
gp.CloseFigure();
if ( br ) {
gr->FillPath(br, &gp);
}
gr->DrawPath(p, &gp);
}
示例8: region
/** get the complex path made from the internal complex region
@remarks
only for D2D impl because we can only clip with geometry paths
& not directly with GDI region
return NULL if region is a simple region (ie equal to region bounds)
*/
VGraphicPath *VRegion::GetComplexPath() const
{
HRGN hrgn = (RgnRef)(*this);
Gdiplus::Region region( hrgn);
Gdiplus::Matrix matIdentity;
UINT numRect = region.GetRegionScansCount(&matIdentity);
if (numRect > 1)
{
VGraphicPath *path = new VGraphicPath();
if (!path)
return NULL;
Gdiplus::Rect rects[8];
Gdiplus::Rect *pRect = rects;
if (numRect > 8)
pRect = new Gdiplus::Rect[numRect];
Gdiplus::Status status = region.GetRegionScans(&matIdentity, pRect, (INT *)&numRect);
if (status == Gdiplus::Ok)
{
path->Begin();
Gdiplus::Rect *curRect = pRect;
for (int i = 0; i < numRect; i++, curRect++)
{
if (i == 0)
path->AddRect( VRect( curRect->GetLeft(), curRect->GetTop(), curRect->GetRight()-curRect->GetLeft(), curRect->GetBottom()-curRect->GetTop()));
else
{
VGraphicPath pathRect;
pathRect.Begin();
pathRect.AddRect( VRect( curRect->GetLeft(), curRect->GetTop(), curRect->GetRight()-curRect->GetLeft(), curRect->GetBottom()-curRect->GetTop()));
pathRect.End();
path->Union( pathRect);
}
}
path->End();
}
else
{
delete path;
path = NULL;
}
if (numRect > 8)
delete [] pRect;
return path;
}
else
return NULL;
}
示例9: PrintRichEdit
void PrintRichEdit(HWND hwnd, Gdiplus::Graphics* graphics, Gdiplus::Bitmap* background, Gdiplus::Rect layoutArea) {
using namespace Gdiplus;
//Calculate the area to render.
HDC hdc1 = ::GetDC(hwnd);
double anInchX = 1440 / GetDeviceCaps(hdc1, LOGPIXELSX);
double anInchY = 1440 / GetDeviceCaps(hdc1, LOGPIXELSY);
ReleaseDC(hwnd,hdc1);
//double anInch = 1440.0 / GetDeviceCaps(hdc1, LOGPIXELSX);
RECT rectLayoutArea;
rectLayoutArea.top = (int)(layoutArea.GetTop() * anInchY);
rectLayoutArea.bottom = (int)(layoutArea.GetBottom() * anInchY);
rectLayoutArea.left = (int)(layoutArea.GetLeft() *anInchX );
rectLayoutArea.right = (int)(layoutArea.GetRight() * anInchX);
HDC hdc = graphics->GetHDC();
Gdiplus::Graphics gr2(hdc);
SolidBrush br(Color(255,255,255));
// We need to draw background on new HDC, otherwise the text will look ugly
Status st = gr2.DrawImage(background,layoutArea.GetLeft(),layoutArea.GetTop(),layoutArea.GetLeft(), layoutArea.GetTop(), layoutArea.Width, layoutArea.Height,Gdiplus::UnitPixel/*gr2.GetPageUnit()*/);
FORMATRANGE fmtRange;
fmtRange.chrg.cpMax = -1; //Indicate character from to character to
fmtRange.chrg.cpMin = 0;
fmtRange.hdc = hdc; //Use the same DC for measuring and rendering
fmtRange.hdcTarget = hdc; //Point at printer hDC
fmtRange.rc = rectLayoutArea; //Indicate the area on page to print
fmtRange.rcPage = rectLayoutArea; //Indicate size of page
int characterCount = ::SendMessage(hwnd, EM_FORMATRANGE, 1, (LPARAM)&fmtRange);
//Release the device context handle obtained by a previous call
graphics->ReleaseHDC(hdc);
}
示例10: _InitSize
void VPictureData_GDIPlus_Vector::_InitSize()const
{
if(fMetafile)
{
Gdiplus::Rect rect;
Gdiplus::MetafileHeader gh;
fMetafile->GetMetafileHeader(&gh);
//sLONG width = (short) ( ( (long) gh.EmfHeader.rclFrame.right * 96L ) / 2540L );
//sLONG height = (short) ( ( (long) gh.EmfHeader.rclFrame.bottom * 96L ) / 2540L );
/*re1.Width= gh.EmfHeader.rclFrame.right * gh.EmfHeader.szlDevice.cx / (gh.EmfHeader.szlMillimeters.cx*100);
re1.Height= gh.EmfHeader.rclFrame.bottom * gh.EmfHeader.szlDevice.cy / (gh.EmfHeader.szlMillimeters.cy*100);
re1.Width=re1.Width * (96.0/gh.GetDpiX());
re1.Height=re1.Height * (96.0/gh.GetDpiY());*/
gh.GetBounds(&rect);
fBounds.SetCoords(rect.GetLeft(),rect.GetTop(),rect.GetRight()-rect.GetLeft(),rect.GetBottom()-rect.GetTop());
}
}
示例11: Action
HRESULT Action(
const P* pts,
size_t count,
const Gdiplus::Rect& clip,
ScanConvertCallback callback,
INT_PTR hint)
{
if(count <= 0) return E_INVALIDARG;
if(pts == NULL) return E_INVALIDARG;
if(callback == NULL) return E_INVALIDARG;
n = (INT) count;
pt = pts;
/// initialize index array as natrual order
std::vector<INT> idx(n);
active.resize(n);
for(INT i = 0; i < n; i ++)
{
idx[i] = i;
}
/// Sort idx by the order of pt[idx[k]].Y
std::sort(&idx[0], &idx[0] + n, CompareIndex(pt));
nact = 0; /// number of active edges, init as empty
INT k = 0; /// idx[k] is the next vertex to precess
INT y0 = max(clip.GetTop(), xtl::FloorCast<INT>(pt[idx[0]].Y)); /// the topmost scanline
INT y1 = min(clip.GetBottom(), xtl::CeilCast<INT>(pt[idx[n-1]].Y)); /// the bottom scanline
/// step through scanlines
/// scanline y is at y+.5 in continuous coordinates
for(INT y = y0; y < y1; y ++)
{
/// check vertices between previous scanline and current one, if any
for (; (k < n) && (pt[idx[k]].Y <= y); k++)
{
/// to simplify, if pt.y = y+.5, pretend it's above
/// invariant: y-.5 < pt[i].y <= y+.5
INT i = idx[k];
/// insert or delete edges before and after vertex i
/// (i-1 to i, and i to i+1) from active list if they cross scanline y
INT j = i > 0 ? i-1 : n-1; /// vertex previous to i
if (pt[j].Y <= y) /// old edge, remove from active list
{
DeleteActiveEdge(j);
}
else if (pt[j].Y > y) /// new edge, add to active list
{
InsertActiveEdge(j, y);
}
j = i < (n - 1) ? i+1 : 0; /// vertex next after i
if (pt[j].Y <= y) /// old edge, remove from active list
{
DeleteActiveEdge(i);
}
else if (pt[j].Y > y) /// new edge, add to active list
{
InsertActiveEdge(i, y);
}
}
/// sort active edge list by active[j].x
std::sort(&active[0], &active[0] + nact, CompareEdge());
/// draw horizontal segments for scanline y
for (INT j=0; j < nact; j += 2) /// draw horizontal segments
{
/// span 'tween j & j+1 is inside, span tween j+1 & j+2 is outside
INT xl = xtl::CeilCast<INT>(active[j].x); /// left end of span
if (xl < clip.GetLeft()) xl = clip.GetLeft();
if (xl > clip.GetRight()) xl = clip.GetRight();
INT xr = xtl::CeilCast<INT>(active[j+1].x); /// right end of span
if (xr < clip.GetLeft()) xr = clip.GetLeft();
if (xr > clip.GetRight()) xr = clip.GetRight();
if (xl < xr)
{
/// Invoke call back in span
if(!callback(y, xl, xr, hint))
{
/// if call back returns false
/// return prematurely
return S_OK;
}
}
active[j].x += active[j].dx; /// increment edge coords
active[j+1].x += active[j+1].dx;
}
}
return S_OK;
}
示例12: GdiMeasureStringRealHeight
bool TextOutlineStrategy::GdiMeasureStringRealHeight(
Gdiplus::Graphics* pGraphics,
LOGFONTW* pLogFont,
const wchar_t*pszText,
Gdiplus::Rect rtDraw,
float* pfDestWidth,
float* pfDestHeight )
{
using namespace Gdiplus;
Gdiplus::GraphicsPath* pPath=NULL;
bool b = GDIPath::GetStringPath(
pGraphics,
&pPath,
pszText,
pLogFont,
rtDraw);
if(false==b)
{
if(pPath)
{
delete pPath;
pPath = NULL;
}
return false;
}
*pfDestWidth= rtDraw.GetLeft();
*pfDestHeight= rtDraw.GetTop();
b = GDIPath::MeasureGraphicsPathRealHeight(pGraphics, pPath, pfDestWidth, pfDestHeight);
if(false==b)
{
if(pPath)
{
delete pPath;
pPath = NULL;
}
return false;
}
float pixelThick = 0.0f;
b = GDIPath::ConvertToPixels(pGraphics,m_nThickness,0.0f,&pixelThick,NULL);
if(false==b)
{
if(pPath)
{
delete pPath;
pPath = NULL;
}
return false;
}
*pfDestWidth += pixelThick;
*pfDestHeight += pixelThick;
if(pPath)
{
delete pPath;
pPath = NULL;
}
return true;
}
示例13: DrawItem
void TrackListCtrl::DrawItem(Gdiplus::Graphics& g, INT nItem, Gdiplus::Rect& itemRC)
{
HDC hdc = g.GetHDC();
if (hdc == 0)
{
TRACE(_T("@1 TrackListCtrl::DrawItem. Cant get HDC\r\n"));
return;
}
CDC* pDC = CDC::FromHandle(hdc);
PrgAPI* pAPI = PRGAPI();
//Calculate Colors
BOOL bSelected = IsItemSelected(nItem);
COLORREF clrText = m_colors[COL_Text];
COLORREF clrBk = m_colors[COL_Bk];
if (bSelected)
{
clrText = m_colors[COL_TextSel];
clrBk = m_colors[COL_TextSelBk];
}
CRect rcSubItem(itemRC.X, itemRC.Y, itemRC.GetRight(), itemRC.GetBottom());
pDC->SetTextColor(clrText);
pDC->FillSolidRect(rcSubItem, clrBk);
const INT cMargin = 2;
FullTrackRecordSP& rec = (*m_pCollection)[nItem];
pDC->SetBkMode(TRANSPARENT);
INT curx = cMargin;
CRect rcFirstLine(rcSubItem);
rcFirstLine.bottom = rcFirstLine.top + 20;
rcFirstLine.left = cMargin;
rcFirstLine.right -= cMargin;
CRect rcSecondLine(rcSubItem);
rcSecondLine.top = rcFirstLine.bottom;
rcSecondLine.left = cMargin;
rcSecondLine.right -= cMargin;
if (m_bDrawPictures)
{
INT imgHeight = 32;//rcSubItem.Height() - 2 * cMargin;
INT cury = rcSubItem.top + cMargin;
LocalPictureManager* pLM = PRGAPI()->GetLocalPictureManager();
Gdiplus::Rect rcImage(curx, cury, imgHeight, imgHeight);
Graphics g2(hdc);
BOOL bRet = pLM->DrawAlbumThumbnail(rec->artist.name.c_str(), rec->album.name.c_str(), g2, rcImage);
if (!bRet)
bRet = pLM->DrawArtistThumbnail(rec->artist.name.c_str(), g2, rcImage);
if (!bRet)
bRet = pLM->DrawDefaultThumbnail(IIT_AlbumPicture, g2, rcImage);
curx += 32 + cMargin ;
}
rcSecondLine.left = curx;
//=== Draw the icon
INT cury = rcFirstLine.top + (rcFirstLine.Height() - 16) / 2;
pDC->SetTextColor(clrText);
DrawIconEx(pDC->m_hDC, curx, cury, pAPI->GetIconForTrackType(rec->track.trackType), 16, 16, 0, 0, DI_NORMAL);
curx += 16 + cMargin;
//=== Draw the title
CRect rcTitle(rcFirstLine);
rcTitle.left = curx;
CFont* pOldFont = pDC->SelectObject(m_pBoldFont);
pDC->DrawText(rec->track.name.c_str(), rec->track.name.size(), &rcTitle, DT_END_ELLIPSIS | DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
pDC->DrawText(rec->track.name.c_str(), rec->track.name.size(), &rcTitle, DT_END_ELLIPSIS | DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX | DT_CALCRECT);
//=== Draw the artist
CRect rcArtist(rcFirstLine);
rcArtist.left = rcTitle.right + cMargin;
pDC->DrawText(rec->artist.name.c_str(), rec->artist.name.size(), &rcArtist, DT_END_ELLIPSIS | DT_RIGHT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
pDC->SelectObject(m_pNormalFont);
//=== Next line
//=== Draw the rating (if exists)
if (rec->track.rating > 0 && rec->track.rating < 256)
{
FLOAT fStars = Rating2Stars(rec->track.rating);
if (fStars > 0.0f && fStars <=1.0f)
{
DrawIconEx(hdc, rcSecondLine.left, rcSecondLine.top, pAPI->GetIcon(ICO_StarBad16), 16, 16, 0, 0, DI_NORMAL);
rcSecondLine.left += 17;
}
while (fStars > 1.0f)
{
DrawIconEx(hdc, rcSecondLine.left, rcSecondLine.top, pAPI->GetIcon(ICO_StarGold16), 16, 16, 0, 0, DI_NORMAL);
fStars -= 1.0f;
rcSecondLine.left += 17;
}
}
//.........这里部分代码省略.........