Win32 DrawText奇怪的对齐问题

时间:2014-09-04 11:43:15

标签: c++ winapi drawtext

将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 - 我手动将代码输入到论坛中,因此可能存在一些愚蠢的错别字,但真正的代码确实可以正常地解决对齐问题。

此致 戴夫。

0 个答案:

没有答案