DrawText不起作用,但Graphics :: DrawString没问题

时间:2013-11-27 11:37:30

标签: graphics drawstring drawtext

我在内存中创建了一个与图像和文本结合的位图。我的代码是:

HDC hdcWindow = GetDC();
HDC hdcMemDC = CreateCompatibleDC(hdcWindow);
HBITMAP hbmDrag = NULL;

if (!hdcMemDC) {
   ReleaseDC(hdcWindow);
   return NULL;
}

RECT clientRect = {0};
GetClientRect(&clientRect);
hbmDrag = CreateCompatibleBitmap(hdcWindow, 256, 256);
if(hbmDrag) {
   SelectObject(hdcMemDC, hbmDrag);
   FillRect(hdcMemDC, &clientRect, mSelectedBkgndBrush);
   Graphics graphics(hdcMemDC);
   // Draw the icon
   graphics.DrawImage(mImage, 100, 100, 50, 50);
#if 1
   CRect desktopLabelRect(0, y, clientRect.right, y);
   HFONT desktopFont = mNameLabel.GetFont();
   HGDIOBJ oldFont = SelectObject(hdcMemDC, desktopFont);
   SetTextColor(hdcMemDC, RGB(255,0,0));
   DrawText(hdcMemDC, mName, -1, desktopLabelRect, DT_CENTER | DT_END_ELLIPSIS | DT_CALCRECT);
#else
   // Set font
   Font font(hdcMemDC, mNameLabel.GetFont());
   // Set RECT
   int y = DEFAULT_ICON_HEIGHT + mMargin;
   RectF layoutRect(0, y, clientRect.right, y);
   // Set display format
   StringFormat format;
   format.SetAlignment(StringAlignmentCenter);
   // Set brush
   SolidBrush blackBrush(Color(255, 0, 0, 0));
   // Draw the label
   int labelWide = DEFAULT_ICON_WIDTH + mMargin;
   CString labelName = GetLayOutLabelName(hdcMemDC, labelWide, mName);
   graphics.DrawString(labelName, -1, &font, layoutRect, &format, &blackBrush);
#endif
}

DeleteDC(hdcMemDC);
ReleaseDC(hdcWindow);

return hbmDrag;

可以将图像输出到位图成功。 对于文本,如果我使用“DrawText”,虽然返回值是正确的,但它不能显示在位图中; 但是Graphics :: DrawString可以输出文本成功。

我不知道原因。有人可以告诉我吗? 非常感谢。

1 个答案:

答案 0 :(得分:1)

您正在将DT_CALCRECT标记传递给DrawText()。该标志记录为(强调我的):

  

确定矩形的宽度和高度。如果有   多行文本DrawText使用矩形的宽度   由 lpRect 参数指向并扩展了它的基础   用于绑定最后一行文本的矩形。如果最大的单词更广泛   比矩形,宽度扩大。如果文字小于   矩形的宽度,宽度减小。如果只有一个   文本行,DrawText修改矩形的右侧   它限制了行中的最后一个字符。在任一情况下,   DrawText返回格式化文本的高度,但不会绘制   文字