文字がかさならないようにするためには – プログラミング – Home

文字がかさならないようにするためには
 
通知
すべてクリア

[解決済] 文字がかさならないようにするためには

固定ページ 1 / 4

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

SDIで作成しているんですが
座標をCArray<CPoint,CPoint>a;とし文字をCArray<CString,CString>b;に
多数のデータをいれて
表示したときに文字が重なったら表示しないように
する方法はありませんでしょうか?
なにか良い提案はないでしょうかよろしくお願いします。


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

この座標って、文字列を表示する際の起点となる位置のことですよね?
重なりを判定するなら、起点座標に加え、
文字列表示に必要な幅と高さも保持しておく必要があると思います。
CPointのアレイではなく、CRectのアレイの方がよいのでは?

ところで、
a[0] ⇒ 文字列b[0]を表示する時の起点
a[1] ⇒ 文字列b[1]を表示する時の起点
: :
a[n] ⇒ 文字列b[n]を表示する時の起点
と解釈しましたが、よい?


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
 

回答ではありません

CArray<CString,CString>b はCStringArray bでいいのでは?


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

ご返事ありがとうございます。
>a[0] ⇒ 文字列b[0]を表示する時の起点
>a[1] ⇒ 文字列b[1]を表示する時の起点
> : :
>a[n] ⇒ 文字列b[n]を表示する時の起点
>と解釈しましたが、よい?

はい そのとおりです

CRectってもし座標が左上が (10,10) で右下が (20,20) この間で
文字が表示されることになるのでしょうか?
pDC->TextOut(pDoc->a[1].x,pDoc->b[1].y,pDoc->b[1];
のような書き方をしているのですがどのように書いたらいいのでしょうか?

>CArray<CString,CString>b はCStringArray bでいいのでは?
すいません 初心者なもんで知りませんでした。m(__)m


返信引用
スマイル
 スマイル
(@スマイル)
ゲスト
結合: 22年前
投稿: 8
 

CRect Rect;
CDC::DrawText(pDoc->b[1], -1, &Rect, DT_LEFT | DT_VCENTER)
を使えばRectでクリッピングされます。


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

>CRect Rect;
>CDC::DrawText(pDoc->b[1], -1, &Rect, DT_LEFT | DT_VCENTER)
>を使えばRectでクリッピングされます。

クリッピングとは何でしょうか。
文字があるってゆうことを認識できるようになるとゆう意味でしょうか。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

> クリッピングとは何でしょうか。
その矩形からはみだす部分が描かれなくなるという意味です。

ところで文字が重なるかどうかはどう判断するんですか?
起点と起点を比較するんですか?


返信引用
スマイル
 スマイル
(@スマイル)
ゲスト
結合: 22年前
投稿: 8
 

文字があるってゆうことを認識はできないですが、
CRectの座標が左上が (10,10) で右下が (20,20) などの場合
それより外に描写されない(切れてしまう)ってことです。
CRectの配列をお互い重ならないように初期化すれば、
結果として、文字は重なりません。エクセルのセル(Cell)って感じかな

CDC::GetTextExtentも調べてください。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

> ところで文字が重なるかどうかはどう判断するんですか?
すいませんそれを聞かれてるんですね。

文字が重なるかどうかは、CDC::GetTextExtent() 等で寸法を得て、自分で
重なるか重ならないか計算する以外ないです。


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

ご返事ありがとうございます
やっぱり文字の周りの座標を得なければ
いけないのでしょうか。


返信引用
スマイル
 スマイル
(@スマイル)
ゲスト
結合: 22年前
投稿: 8
 

ヘルプにより

TextOut 関数を呼び出したときに、現在位置を更新したいときは、
SetTextAlign メンバ関数の nFlags に TA_UPDATECP を設定して呼び出します。
このフラグが設定されているときは、Windows は続く TextOut 関数の呼び出しで、x
と y を無視し、
代わりに現在位置を使います。

CDC::SetTextAlign
UINT SetTextAlign( UINT nFlags );

TA_UPDATECP テキスト出力関数呼び出し各回の後に、現在位置を更新します。
新しい位置は、テキストに外接する四角形の右辺の位置になります。
このフラグが設定されているときは、TextOut メンバ関数の呼び出しで指定された座標
は無視されます。

試してないですが、y方向はどうなんでしょうか?


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

これをつかえば座標点に密接した文字配置できますよね
これを使いたいのですがそこに文字があるのかを認識
させるためには文字周りの座標だけで良いのでしょうか?


返信引用
スマイル
 スマイル
(@スマイル)
ゲスト
結合: 22年前
投稿: 8
 

文字を描写する座標(開始点)から
CSize GetTextExtent( const CString& str ) const;で得た
CSize領域をCDC::GetPixelでくまなく調べる。
それで文字と同じRGBカラーがあればそこに文字があるという事でしょうか?

でもあまりおすすめな方法では、なさそうですが? ??);


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

CRectで指定した値の四角の中に点があるかどうか
を判定する方法はないのでしょうか?


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

クラス CRect について調べれば直(す)ぐに分る事ですが
CRect::NormalizeRect(), と CRect::PtInRect() とを組み合せれば
指定した点が矩形内部にあるかどうかの判定が出来ます


返信引用
固定ページ 1 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

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