エディットコントロール – プログラミング – Home

エディットコントロール
 
通知
すべてクリア

[解決済] エディットコントロール


ハイド
 ハイド
(@ハイド)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

今メモ帳をつくっているのですが段数がわかるように左に縦線を入れ
段数を入れたいと思っています。
エディットコントロールに縦の線を入れたいのですがどうすれば
できるでしょうか?

win xp
win32 API
BCCコンパイラ


引用未解決
トピックタグ
oops
 oops
(@oops)
ゲスト
結合: 17年前
投稿: 28
 

エディットコントロールで不可能ではないけどやめとき

最初から自作で作るほうが絶対楽


返信引用
oops
 oops
(@oops)
ゲスト
結合: 17年前
投稿: 28
 

変な日本語なんは勘弁w


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> 最初から自作で作るほうが絶対楽

CodeGuruで実装例を探そうと思ったらBCCだしね。

どうしてもエディットコントロールで、というなら、
オーナードローやカスタムドローでやることになるけど、
少しは参考になるかな。

http://www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm

でも、もっと簡単にメモ帳を作るサンプルがあるので、
これに機能追加したほうがよっぽど楽。

http://www.kumei.ne.jp/c_lang/sdk/sdk_74.htm


返信引用
ハイド
 ハイド
(@ハイド)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

エディットボックスをサブクラス化をし
WM_PAINTで線は描くことはできたのですが
文字が書けなくなりました。
良い方法ないでしょうか?


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

TextOutやDrawTextを使えばよいでしょう。


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

無理にエディットコントロールをカスタマイズするのではなく、
3つのウィンドウに分けてはどうでしょう。
・段数表示ウィンドウ
・エディットコントロール
・縦スクロールバー
で、スクロールメッセージで、全部、同時スクロールすればあたかも1つのウィンドウ
のように見えます。


返信引用
ハイド
 ハイド
(@ハイド)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

bunさんの意見を参考に
ウインドウに縦のスクロールバーを付ける
ことにしました。
しかし、エディットコントロールの位置の
取得に困っています。
どのようにすればいいか教えてもらえないでしょうか?


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

> しかし、エディットコントロールの位置の
> 取得に困っています。
エディットコントロールのスクロールバーの位置は以下のメッセージで取得できます。
EM_GETFIRSTVISIBLELINE

なお、
話をややこしくしないために、前回の発言では触れませんでしたが、
・段数表示ウィンドウ
・エディットコントロール
・縦スクロールバー
のウィンドウを分ける場合、考え方は大きく2通りあります。

1つはエディットコントロールに全テキストを記憶させた上で、実際にスクロールさせ
る方式です。
この方式の場合は、エディットコントロールのプロパティでスクロールバーを表示した
方が楽ですね。
その上で、段数表示ウィンドウだけをエディットコントロールのスクロール位置に同期
します。

もう1つは仮想スクロール方式です。
つまり、エディットボックスのプロパティでスクロールバーを非表示とし、サイズの方
は常にウインドウサイズいっぱいに自動追従します(WM_SIZEメッセージで追従させる)。
そして、スクロールやサイズ変更のたびに、見えているはずの範囲だけをエディットコ
ントロールに再設定するわけです。
見えていないはずの部分は一切エディットコントロールには設定しません。

前置きが長くなりましたが、ハイドさんの質問内容からして、前者を検討中とみまし
た。
ただし、この方法はお勧めではありません。
なぜなら、メモ帳の場合、扱うテキストのサイズが巨大になる可能性があるため、テキ
ストサイズが大きくなるとエディットコントロールの反応が鈍くなり使用に耐えなくな
るからです。
実際に試してみたところ、私のマシンでは10MByteもあると、ほとんど使い物にならない
速度です。

後者の方法なら、どんなに巨大なテキストでも極端な速度低下は起きないわけです。
なので、後者の方法がお勧めです。


返信引用
ハイド
 ハイド
(@ハイド)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

bunさんご意見ありがとうございます。

>もう1つは仮想スクロール方式です。
>つまり、エディットボックスのプロパティでスクロールバーを非表示とし、サイズの方
>は常にウインドウサイズいっぱいに自動追従します(WM_SIZEメッセージで追従さる)。
>そして、スクロールやサイズ変更のたびに、見えているはずの範囲だけをエディットコ
>ントロールに再設定するわけです。
>見えていないはずの部分は一切エディットコントロールには設定しません。

これを参考させてもらい作成中なのですが、
ウインドウにスクロールバーを付けこれによりエディットコントロールを
スクロールさせるようにしたいと考えています。
ウインドウのWM_SIZEでSetScrollInfo()をつかいスクロールバーの設定を行い
ました。そしてWM_VSCROLLでnPosを設定しなおしScrollWindowでエディットコントロー
ルのクライアント領域をスクロールさせようとしています。
しかし スクロールバーを動かすと文字も消えエディットコントロールのカーソルまで
スクロールされるようになってしまいます。
何か良い方法はないでしょうか。


返信引用
ハイド
 ハイド
(@ハイド)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

うまくできました。ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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