windows下用pango, 字符的位置不对

发布于 2022-08-18 23:42:47 字数 6169 浏览 6 评论 4

我在位置(100, 100)绘制布局。背景色和下划线的位置是对的,但字符画到下一行去了,不知道是不是pango的bug.附件是代码和图片。核心代码如下:

    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        {
            PangoFontMap* fontmap = pango_win32_font_map_for_display ();
            PangoContext* context = pango_font_map_create_context (fontmap);
            PangoLayout* layout = pango_layout_new (context);
            PangoFont* font = NULL;
            PangoAttrList* attrList = pango_attr_list_new ();
            PangoAttribute* attr ;

            PangoFontDescription* fontDesc = pango_font_description_new ();
            pango_font_description_set_size (fontDesc, 40*PANGO_SCALE);

               
            pango_layout_set_font_description (layout, fontDesc);
            readFile();
            //pango_layout_set_text (layout, textBuf, -1);

            attr = pango_attr_underline_new (PANGO_UNDERLINE_LOW);
            pango_attr_list_insert(attrList, attr);
            pango_layout_set_attributes (layout, attrList);
            pango_layout_set_markup (layout, textBuf, -1);
            SetTextColor(hdc,RGB(255,0,0));
            MoveToEx (hdc, 0, 0, NULL);
            LineTo (hdc, 100, 0);
            MyTrace ("paint  rotation %dn", rotation);
            SetBkMode (hdc, TRANSPARENT);
            drawLayout (hdc, layout, 100, 100, 1, 1, rotation);
        }

        EndPaint(hWnd, &ps);
        break;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

酷炫老祖宗 2022-08-28 10:56:14

帮顶~~~

凉宸 2022-08-28 10:51:35

pango颜色的错误。 是pango_win32_render_layout_line 这个函数中

        if (bg_set)
        {
            HBRUSH oldbrush;

            brush = CreateSolidBrush (RGB ((bg_color.color.red + 128) >> 8,
                        (bg_color.color.green + 128) >> 8,
                        (bg_color.color.blue + 128) >> 8));
            oldbrush = SelectObject (hdc, brush);
            Rectangle (hdc, x + PANGO_PIXELS (x_off + logical_rect.x),
                    y + PANGO_PIXELS (overall_rect.y),
                    PANGO_PIXELS (logical_rect.width),
                    PANGO_PIXELS (overall_rect.height));
            SelectObject (hdc, oldbrush);
            DeleteObject (brush);
        }

        if (fg_set)
        {
            brush = CreateSolidBrush (RGB ((fg_color.color.red + 128) >> 8,
                        (fg_color.color.green + 128) >> 8,
                        (fg_color.color.blue + 128) >> 8));
            oldfg = SelectObject (hdc, brush);
        }

水溶 2022-08-28 10:31:26

pango颜色的错误。 是pango_win32_render_layout_line 这个函数中

        if (bg_set)        {            HBRUSH oldbrush;            brush = CreateSolidBrush (RGB ((bg_color.color.red + 12 >> 8,                        (bg_color.color.green + 12 >> 8,                        (bg_color.color.blue + 12 >> );            oldbrush = SelectObject (hdc, brush);            Rectangle (hdc, x + PANGO_PIXELS (x_off + logical_rect.x),                    y + PANGO_PIXELS (overall_rect.y),                    PANGO_PIXELS (logical_rect.width),                    PANGO_PIXELS (overall_rect.height));            SelectObject (hdc, oldbrush);            DeleteObject (brush);        }        if (fg_set)        {            brush = CreateSolidBrush (RGB ((fg_color.color.red + 12 >> 8,                        (fg_color.color.green + 12 >> 8,                        (fg_color.color.blue + 12 >> );            oldfg = SelectObject (hdc, brush);        }

趁年轻赶紧闹 2022-08-28 10:12:56

知道了,windows下文字显示是默认顶对齐的,当pango内部认为是系统用的是基线对齐,所以出现错误。
显示开头 加一个     SetTextAlign(hdc, TA_BASELINE); 就可以啦。但pango不能改变颜色,还没搞清楚

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文