メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.512) CEdit応用4 行番号表示2  2004/10/25


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第512回 CEdit応用4 行番号表示2
 発行    2004年10月22日(金曜日)
 発行数   約2600

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。
・セキュリティ突破のため、暗号化された単語があります。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

{magclick}
/*========================================================*/
 今回のお題  << CEdit応用4 行番号表示2 >>
/*========================================================*/

 前回までに、行番号を表示させる領域を確保することができま
した。

 表示させることができれば、後は工夫次第で何とでもなります。

 が、再描画を行うタイミングに問題があります。

/*========================================================*/

 行番号を変更するタイミングとしては、

・先頭行が変わったとき
・最終行が変わったとき

 この2種類です。

 スクロールによって先頭行が変わったときと、

 最下行にどんどんと追記していき、表示されている最終行が増え
た時です。

 これは、タイマーで監視するのが簡単ですが、物足りない感じが
します。

 監視タイマーの間隔は短すぎない程度、100msぐらいに
したいところですが、これでは違和感があります。

 しかしあまり間隔を短くしすぎると、エディッタとしての動きに
ガタガタ感を与えることになりかねないので、あまり良くありませ
ん。

 以前、Java でエディッタを作ったときに、タイマーで監視する
ようにしました。が、かなり負荷がかかっていた記憶があります。

 なので、PreTranslateMessage で入力関係を監視したほうが、
面倒ですが、堅実です。


 監視するメッセージとしては、

・方向キー
・改行
・エディットの再描画
・行番号の再描画
・マウスホイール

 どれも万全ではないので、すべてのタイミングでチェックを入れ
たいところです。

 しかし重複(ちょうふく)する場合があるので、更新処理で
無駄な処理を実行しないようにする必要があります。

・先頭行
・最下行

 この2つを調べて、変化のあった場合のみ実行します。

 また、サイズ変更がかかった場合には無条件で再描画します。

/*========================================================*/

 ただし、マウスを使ってスクロールバーでスクロールした場合、
イベントでは拾えません。

 スクロールバーをドラッグしている間は、CWnd がすべてを内部
で行っている(と思う)ため、メッセージがまったく発生しなく
なります。

 しかしその開始時に、マウスをスクロールバー上で押したという
メッセージが拾えます。

 そのタイミングでこれでもかというタイマーを発生させ、そして
何かしらのメッセージが来たときにタイマーがONなら終了する、
ということにしましょう。

            if( msg == WM_NCLBUTTONDOWN ) {
                if( m_nTimer ) KillTimer( m_nTimer );
                m_nTimer = SetTimer( 2, 10, NULL );
            }
            else if( m_nTimer ) {
                KillTimer( m_nTimer );
                m_nTimer = 0;
            }

 これでスクロールバーでスクロールしている最中でも、行番号が
更新されるようになります。

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 今後の予定です。あくまでも予定です。

 大型計算機「LC」の仕上げとシェアウェア登録

 グラフィックエディッタ「あいすドロワ」の作成
 ファイル比較ツール「あいすでふ」の作成
 C言語解析ツール「しーますた」の作成

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は10月27日(水曜日)に、第513回をお送りします。
 お題は「あいすエディッタ Ver 0.0.0.1」

 エディッタとしての最低限のものを作り、まとめて見ましょう。

 といっても、ダイアログにコントロールを張るだけですが。。。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
地震対策 なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

ホームページ::あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

まぐまぐ::アイディー
0000020674

まぐまぐ::登録と解除
http://www.mag2.com/m/0000020674.htm

まぐまぐ::バックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

めーらっくす::アイディー
MM3E1AEE285AB4F

めーらっくす::登録と解除
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F 

めーらっくす::バックナンバー★最近のものならこちらが便利★
http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。