CEditの可視行の取得 – プログラミング – Home

通知
すべてクリア

[解決済] CEditの可視行の取得


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

こんにちは、はじめて質問させていただきます。
CEditで可視行の先頭は取得できますが可視行の範囲は取得できないでしょうか?

なにをしたいかというと、エディットボックスに表示されているテキスト内容が
スクロールする必要があるかどうかを知るために可視範囲が知りたいのです。

宜しくお願いします。


引用未解決
トピックタグ
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

MSDNより

GetFirstVisibleLine
エディット コントロールの 1 番上の可視の行を取得します。


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

>rinさん
ありがとうございませす。
先頭ではなく、範囲が知りたいのです。
たとえば1、2、3、4、5行あり、1~4行までは表示され、5行目は不可視という感じです。
何行表示されているのかがわからないのです。


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

CEditクラスのメンバのGetLineLengthで取れませんか?
試していないのでなんともいえませんが
エディット内の行数が取れるようです。
文字が設定されていない場合は戻り値は1です。

またLineLengthの方は指定した行の文字数が取れるようです。
以上


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

右端で折り返した場合、データ上の行数と、表示行数が一致しないから
「最大、何行表示できる」って関数はなかったかと。

折り返ししないようにスタイルを設定し、
エディットそのものの表示サイズを現在使用している文字サイズで割って
最大数を計算した上で、GetFirstVisibleLineとあわせて、
どこからどこまで表示されてるかを算出するというのはどうでしょうか?

あとは、
縦スクロールバーの情報を得て、現在値を常に最大値に移動させる
とか


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

なんとなく私の主観ですが
折り返したとしても恐らくスクロールを適用するかどうかの
判断に使用するのではないかと受け止めているのですが
そういう意味では上記のGetLineLengthで
問題ないような気がします。

もちろんデータなどを行数ごとに表示して
データ数として行数を取得したいのであれば
rinさんのおっしゃる方法でないと無理です。

あと補足ですがもしデータを行ごとに表示、
行数を取得したいのであればListCtrlなどのクラスの
使用をお勧めします。


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

>tera
GetLineLengthとはGetLineCountのことですよね?
それだとすべての行数が取れるので、どの範囲までが表示されているのかがわからないの
です。
1,2,3,4行まであったとしても、それがすべて可視領域に入っているのかどうかわからな
いのです。
何行まで表示できるかはじめから分っていれば問題ないのですが。

>rin
折り返しなしだとそれはそれは困ってしまうんですよ。
文字の高さ取得して、それとエディットコントロールとの高さを計算して
何行程度はいるかを調べるのがいいのかもしれないですね。


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

??
よくおっしゃっている意味がわかりにくいのですが
エディットボックスの高さが不定値ってことですか??

なんとなくですが先頭の行から文字数を
ループでまわして読んでいって空文字じゃなければ~
などで文字が入っているかチェックすれば
文字が入力、表示されている行数を取得出来るのでは
ないでしょうか??


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

私の調査ミスかもしれないのですが
CEdit::GetLineLength ってありますでしょうか?

http://www.google.co.jp/search?hl=ja&rls=GGLJ%2CGGLJ%3A2006-27%2CGGLJ%
3Aja&q=GetLineLength+CEdit&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
ひっかからないのですが・・・


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

>rinさん

GetLineCountの間違いです。
以上。


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

すみません。
色々調査してて返事が遅くなってしまい申し訳ないです。

>tera
そうです。エディットボックスは可変です。
ウィンドウが広げられるとエディットボックスも
それにおおじ広くしたいのですが
その場合に可視行が分らないのです。

なので、エディットボックスの高さと幅は分っても
不可視行があるのか無いのかが分らないのです。

不可視行がないならスクロールなし
不可視行があるならスクロールあり

の判断ができないのです。

説明不足ですみません。


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

>tera
抜けました。
空文字はないのですが。
やっぱり文字幅で折り返しをチェックするか
文字の高さから計算するしかないのかも知れないですね。


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

// 可視行の範囲を検索する
m_pInfoEdit->GetRect(&editRect);
for(cnt = 0; cnt <= m_pInfoEdit->GetLineCount(); cnt++)
{
index = m_pInfoEdit->LineIndex(cnt);
chaPt = m_pInfoEdit->PosFromChar(index);

//文字の先頭が表示範囲より外の場合
if(chaPt.y >= editRect.bottom)
{
bSCrollBar = true;
break;
}
}


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

間違えて送信してしまいました。
上記の処理で可視行かどうかをチェックできました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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