TextOut – プログラミング – Home

通知
すべてクリア

[解決済] TextOut


run
 run
(@run)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

int a=30;
printf(%d,a);

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

初心者ですみません。


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

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


返信引用
run
 run
(@run)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

回答ありがとうございます
ちょっとわからないので
すいませんが例などはありませんか?


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

こんばんは、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
 run
(@run)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

こんばんは、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
 run
(@run)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

int a=30;
char b;
sprintf(b,%d,a);
pDC->TextOut(100,100,b);

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

だめです。
まず,charとcharの配列の違いを認識してください。

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

こんばんは、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
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

# 遅かったか。。
YuOさん、フォローありがとうございます。

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

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

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


返信引用
run
 run
(@run)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

お2人ともありがとうございました。
なんとかわかりそうです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました