TextOut

[戻る]
run 2002/11/20(水) 00:02:22
int a=30;
printf("%d",a);

といったことをpDC->TextOutでやりたいのですが
こういったことはできるのでしょうか?

初心者ですみません。

sugar 2002/11/20(水) 00:13:35
CDC::TextOut()は、引数に渡された文字列を出力します。
ですから、CString::Format()等で変数aの値を文字列に出力すればOKです。

run 2002/11/20(水) 00:21:16
回答ありがとうございます
ちょっとわからないので
すいませんが例などはありませんか?

RAPT 2002/11/20(水) 00:51:45
こんばんは、RAPTです。

int a = 30;
CString str = _T("");
str.Format(_T("%d"), a);
pDC->TextOut(str);

sugarさんのおっしゃることを、runさんの例題で解いてみました。

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0

run 2002/11/20(水) 01:01:30
RAPTさん回答ありがとうございます。
実行に成功しました。
今ほかのページなどで勉強していたのですが
sprintfではどうやって記述すればいいのでしょうか?

RAPT 2002/11/20(水) 01:13:51
こんばんは、RAPTです。~2

> sprintfではどうやって記述すればいいのでしょうか?
# ヘルプ見て、実際にコード書いてみれば分かると思うのだが。。

int a = 30;
TCHAR szBuff[MAX_PATH] = _T("");
sprintf(szBuff, _T("%d"), a);
pDC->TextOut(szBuff);

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0

run 2002/11/20(水) 01:26:13
int a=30;
char b;
sprintf(b,"%d",a);
pDC->TextOut(100,100,b);

これではだめなのでしょうか?

YuO [E-Mail] 2002/11/20(水) 02:10:10
だめです。
まず,"char"と"charの配列"の違いを認識してください。


ところで,
> sprintf(szBuff, _T("%d"), a);
これは惜しいですね。
_UNICODEが定義されているとコンパイル時にエラーになります。
_stprintf(szBuff, _T("%d"), a);
が正解です。

RAPT 2002/11/20(水) 02:27:34
こんばんは、RAPTです。~3

> pDC->TextOut(str);
訂正
# CDC::TextOut の引数調べてなかった(;´Д`)
# | virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );
# | BOOL TextOut( int x, int y, const CString& str );
int x = 0, y = 0;
pDC->TextOut(x, y, str);
pDC->TextOut(x, y, szBuff);
で。


> int a=30;
> char b;
> sprintf(b,"%d",a);
> pDC->TextOut(100,100,b);
これではだめです。バッファ不足です。ビルドは通ると思いますが、実行時の結果は
未定義です。メモリ内容が破壊され予期せぬ事態に見舞われる危険性があります。

sprintf(b,"%d",30);
の結果は、(' ' + '3' + '0' + '\0') の4バイトになります。

そのため、最低限、b[4] は必要です。中身が INT_MIN〜INT_MAX としたら、
Limits.h に、
| #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
| #define INT_MAX       2147483647    /* maximum (signed) int value */
とあるので、12バイトは必要なので、
char b[12];
とする必要があります。
# 必要に応じ、配列要素数はもっと多くても構いません。

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0

RAPT 2002/11/20(水) 02:31:06
# 遅かったか。。
YuOさん、フォローありがとうございます。

# C++では普段、Unicode + sprintf 使わないからなぁ…<言い訳
# _T() は、ほとんど癖で使っていますが。
# もはや、無いと、何か気持ち悪い(^^;

YuO [E-Mail] 2002/11/20(水) 02:31:58
> sprintf(b,"%d",30);
> の結果は、(' ' + '3' + '0' + '\0') の4バイトになります。

先頭に空白は入らないから3バイトです。

run 2002/11/20(水) 12:24:50
[[解決]]
お2人ともありがとうございました。
なんとかわかりそうです。

古いスレッドには追加発言できません。