将Win7 x64 c ++与MSVC2010 pro。
一起使用在使用Win32 DrawText为自定义控件绘制一些文本时,我注意到了一个非常奇怪的错误。这是一个非常标准的事情,我敢肯定。我确实看到一篇关于类似内容的帖子,解决方案是使用一个TextOut调用,但这并不能解决我的问题。
我使用SetWindowSubClass对“静态”控件进行了子类化,我将wm_paint消息描述为:
case WM_PAINT:
{
RECT rect;
PAINTSTRUCT ps;
HDC hdc = BeginPain(hWnd,&ps);
// Create a back buffer to draw to
HDC hdcBack = CreateCompatibleDC(hdc);
GetClientRect(hWnd,&rect);
HBITMAP hbmBackbuffer= CreateCompatibleBitmap(hdc,rect.right,rect.bottom);
size_t iLength = 0;
StringCchLength(LCDText,240,&Length);
SelectObject(hdcBack,hbmBackbuffer);
// Draw a black background to clear previous text
SelectObject(hdcBack,GetSysColour(1)); // Black
Rectangle(hdcBack,rect.left,rect.top,rect.right,rect.bottom);
// Set the font, tranparency and text colour
SelectObject(hdcBack,LCDFont);
SetBkMode(hdcBack,TRANSPARENT);
SetTextColor(hdcBack,0x0000ff00);
DrawText(hdcBack,LCDText,(int)iLength,&rect,DT_LEFT);
// display
BitBlt(hdc,0,0,rect.right,rect.bottom,hdcBack,0,0,SRCCOPY);
// cleanup
DeleteObject(hbmBackbuffer);
DeleteDC(hdcBack);
EndPaint(hWnd,&ps);
break;
}
这实际上非常有效。问题是'标签'可以显示3行40个字符,并且在每行的27个字符之后,到该行末尾的下一个字符在屏幕上方高出1或2个像素。它并不是立即显而易见的,但一旦你注意到它,它就会引起你的注意。
有没有人对此有任何想法或经验?
ps - 我手动将代码输入到论坛中,因此可能存在一些愚蠢的错别字,但真正的代码确实可以正常地解决对齐问题。
此致 戴夫。