标签: textout

是否可以确定Windows为字体链接选择的字体?

假设您有两个或多个脚本中包含文本的字符串.当您使用GDI函数时TextOut,(现代版本)Windows将执行"字体链接".也就是说,GDI将使用您选择的字体绘制所需的字体,并以自动选择的适当字体绘制其余字体.例如,如果您的部分文本是英文(使用罗马字母),部分文本是中文(使用CJK字符),并且您选择了Arial,则英文部分将以Arial绘制,中文部分将使用用另一种具有CJK字形的字体绘制.

我的问题是,有没有办法确定哪种字体TextOut会选择(或选择)字体链接?

我必须使用低级Uniscribe API绘制一些文本,它不会自动进行字体链接.我已经实现了自己的字体链接,但有时候我的算法会选择TextOut与同一文本不同的字体.我试图更好地理解Windows算法,但我并不擅长在视觉上识别字体(特别是在不熟悉的脚本中).

winapi gdi font-linking textout

8
推荐指数
1
解决办法
2152
查看次数

显示亚洲字符(使用Unicode):在RichEdit控件中显示时与使用ExtTextOut相比,字符间距有所不同

这张照片说明了我的困境:

图片1

所有字符看起来都一样大小,但是在RichEdit控件中显示时,与我使用ExtTextOut时相比,它们之间的间距是不同的。

我想呈现与RichEdit控件中相同的字符(理想情况下),以保留换行位置。

谁能告诉我:

a)哪个更正确的表示形式?

b)为什么RichEdit控件显示的文本在亚洲字符之间没有空格?

c)有什么方法可以使ExtTextOut在绘制这些字符时重现RichEdit控件的行为?

d)如果我正在使用亚洲版本的Windows,这会有什么不同吗?

也许我很乐观,但是如果有人可以提供任何提示,我将非常感兴趣。

如果有帮助:

这是我的文字:

???????????1 2 3 4 5 6 7 8 9 0
Run Code Online (Sandbox Code Playgroud)

向亚洲读者表示歉意,这只是为了测试我们的Unicode实现,我什至不知道字符取自哪种语言,更不用说它们是否意味着任何意义了

为了通过将这些字符粘贴到RichEdit控件(例如,写字板)中来查看效果,您可能会发现必须滑动它们并将字体设置为“ Arial”。

我获得的富文本为:

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang2057 {\ fonttbl {\ f0 \ fnil \ fcharset0 Arial;}} {\ colortbl; \ red0 \ green0 \ blue0;} \ viewkind4 \ uc1 \ pard \ sa200 \ sl276 \ slmult1 \ lang9 \ fs22 \ u24555?\ u30340?\ u26837?\ u33394?\ u29392?\ u29432?\ u36339?\ …

windows unicode rtf richedit textout

5
推荐指数
1
解决办法
995
查看次数

使用C在窗口中显示字符串输出(在WIN32 API中)

我想要一个正确的方法,我可以输出一个字符串并在创建的窗口上显示它.我一直在使用textout()函数,但由于它只绘制窗口,一旦窗口最小化并恢复,窗口上显示的数据就会消失.此外,当要显示的数据超过Window的大小时,仅显示等于窗口大小的数据,并截断其他数据.还有其他方法可以在Window上输出数据吗?

c windows winapi textout

5
推荐指数
2
解决办法
1万
查看次数

如何更改TCanvas的textOut的高度?

我正在使用TextOut()在TCanvas上绘制文本,但我想要更大的字体.

我能做什么?

delphi textout

4
推荐指数
1
解决办法
1674
查看次数

如何使用 Win32 TextOut 绘制波浪形下划线

我正在编写一段代码,通过多次调用 TextOut 在屏幕上绘制文本。这是一个 C++ Win32 应用程序,我使用的是 Visual Studio 2012。在标记拼写错误等时,如何以 Word 的方式绘制波浪下划线?

TEXTMETRIC 有一个名为 tmUnderlined 的成员,它适用于普通下划线文本,但不适用于波浪下划线。我还发现微软的 RichEdit 控件支持波浪下划线,但我也不能使用它。

当然,我可以使用简单的正弦波创建一条路径,但在我这样做之前,我想检查是否有更标准的方法来做到这一点。

c++ winapi textout

3
推荐指数
1
解决办法
874
查看次数

WinApi DrawText 和 TextOut 无法显示 unicode 字符 U+5167

Windows 程序员您好!

我是使用 winapi 进行 Windows 编程的新手。我正在阅读这本非常好的书,当我使用 DrawText 和 TextOut 在客户区显示 unicode 字符 U+5167 (?) 时遇到了问题(显示为黑框)。神秘的是,这个特殊的 unicode 字符正确显示在 windows 标题区域中。当我使用 MessageBox 显示它时,这个 unicode 字符也能正确显示。最后,我尝试显示与此 unicode 相对接近的其他 unicode 字符,如 U+5166、U+5168、U+5157 和 U+5177;

这是标准定义的此 unicode 字符的链接。 http://unicode-table.com/en/#5167

注意:我正在使用 Visual Studio 2010 使用 Unicode 编译此代码

下面是我的代码。


#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("HelloWin");
    HWND hwnd;
    MSG msg;

    WNDCLASS wndclass;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = …
Run Code Online (Sandbox Code Playgroud)

unicode winapi drawtext textout

2
推荐指数
1
解决办法
2451
查看次数

在WM_COMMAND中使用TextOut()

您好,我正在尝试在WM_COMMAND案例中打印文本,因为我需要在按下按钮后打印文本.

这是我的代码:

switch(msg)
{
default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case 1:
        PAINTSTRUCT ps;
        HDC         hDC;
        hDC = BeginPaint(hwnd, &ps);
        {
            TextOut(hDC, 10, 50, "hello", 5);
        }
        EndPaint(hwnd, &ps);
        UpdateWindow(hwnd);
        break;
    }
    break;
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,它没有打印任何东西.谢谢,问候.

/////////////////////////编辑:

我可以在WM_COMMAND期间使用TextOut():

HDC         hDC;
hDC = GetDC(hwnd);
TextOut(hDC, 10, ypos, "Warnings: ", 10);
UpdateWindow(hwnd);
Run Code Online (Sandbox Code Playgroud)

谢谢你,对不起这个问题......

winapi textout

1
推荐指数
2
解决办法
2636
查看次数

C++ WinAPI TextOut() 更新文本

我正在使用 WinAPI 创建一个 Windows 应用程序。我正在使用该函数在处理窗口消息TextOut()时向用户显示更新的文本。WM_PAINT

case WM_PAINT:
{
     PAINTSTRUCT ps;
     HDC hdc;
     hdc = BeginPaint(hwnd, &ps);
     SelectObject(hdc, hfDefault);

     // display the user data in the window
     TextOut(hdc,10,70, "Points: 0", 9);
     TextOut(hdc,10,85, "Level: 0", 8);

     // ...
     EndPaint(hwnd, &ps);
}
break;
Run Code Online (Sandbox Code Playgroud)

如何更改调用TextOut()函数后打印的文本以及确定打印文本长度的最后一个参数?

我发现有关使用的所有内容都TextOut()与文本字体有关。

c++ windows winapi wm-paint textout

1
推荐指数
1
解决办法
2万
查看次数

LPCWSTR将无法在TextOut()方法上正确转换

整个代码片段......

#include <windows.h>
#include <string>
#include <vector>
using namespace std;
//=========================================================
// Globals.
HWND ghMainWnd = 0;
HINSTANCE ghAppInst = 0;
struct TextObj
{
    string s; // The string object.
    POINT p; // The position of the string, relative to the
    // upper-left corner of the client rectangle of
    // the window.
};
vector<TextObj> gTextObjs;

// Step 1: Define and implement the window procedure.
LRESULT CALLBACK
WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // Objects for painting.
    HDC …
Run Code Online (Sandbox Code Playgroud)

c++ wm-paint textout lpcwstr

0
推荐指数
1
解决办法
691
查看次数

标签 统计

textout ×9

winapi ×6

c++ ×3

windows ×3

unicode ×2

wm-paint ×2

c ×1

delphi ×1

drawtext ×1

font-linking ×1

gdi ×1

lpcwstr ×1

richedit ×1

rtf ×1