0

Builder C++ 6 を使用して Windows 用に作成された私のソフトウェアでは、ユーザーが編集してデータベースに保存された情報を含む .pdf 記事を作成する必要があります。この情報の一部は、設計された rect 内に描画する必要があるため、55max の文字列が rect 内の 1 行に収まるかどうかを確認する必要があります。そうでない場合は、改行 (\n) をどこに置くべきかを計算する必要があります。

通常、テキストはわずか 55 文字の rect 内に収まりますが、まれなテキスト ("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..." など) は、同じ量の文字を持ちながら、全体を台無しにしてしまうことがあります。つまり、文字列内の文字数を使用して改行するタイミングを決定することはできませんが、テキストの長さ (またはその他の測定単位) を使用して、文字列が大きくなるかどうかを確認できます。 rect コンテナーであるかどうかを示す .pdf。

GetCharABCWidths()、GetTextExtentPoint32() などの関数を試しましたが、成功しませんでした (いわゆる「論理ユニット」は、同じ文字列/文字に対して関数を使用するたびに異なり、それらの使用方法がわかりませんでした) 、または char の長さが明らかに異なっていても同じでした (「1」と「W」など)。

では、どうすればこれを行うことができますか?

4

2 に答える 2

1

最後に、 Length of a string in pixel のこの typ を使用して、やりたいことを実行できました。

より正確な測定値を取得するには、TextField に文字列を入力してから、その TextField のテキストの幅を測定します。

Borland C++ Builder に戻って、キャンバス内で String が占める量を示す関数 (Canvas->TextExtent) を見つけました。

それで、問題は解決しました!

于 2012-10-10T19:45:20.797 に答える
0

DrawText関数を使用することもできます。DT_CALCRECTフラグを関数に渡すだけです。またはGetTextMetrics-私はここで両方を使用しました。それらは単純な、バニラのwin32関数です。試してみたいwin32プログラムをサポートするコンパイラで動作します。VS、GCC、Borlandなど。

コードスニペット:

HDC hDC;
TEXTMETRIC textMetric;
HFONT   hFont, hOldFont;
int sizeInPpoints, lineHeight;
RECT textRect;
char *buffer = "Comprimento em pixels desta string!";

hDC = GetDC(hwnd);
sizeInPpoints = MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72);
hFont = CreateFont(-sizeInPpoints, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, "Courier New");
hOldFont = (HFONT)SelectObject(hDC, hFont);

GetTextMetrics(hDC, &textMetric);

lineHeight = textMetric.tmHeight; // character height in current font

textRect.left = textRect.right = textRect.top = textRect.bottom = 0;
DrawText(hDC, buffer, strlen(buffer), &textRect, DT_CALCRECT);

printf("Size of text calculated by DrawText: [%d x %d]\n", textRect.right, textRect.bottom);
printf("Height of text calculated by GetTextMetrics: %d\n", lineHeight);

出力:

Size of text calculated by DrawText: [280 x 16]
Height of text calculated by GetTextMetrics: 16
于 2012-10-10T20:01:40.690 に答える