|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第508回 CEditの応用1 最下行を取得 発行 2004年10月8日(金曜日) 発行数 約2600 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 先日、とんでもない目にあいました。 さる10月2日、日本発の地下鉄環状線「名城線」に乗ったとき のことです。 「終点」になって、おろされてしまいました。 環状線と入っても、途中で車庫に入る車両もあるのだなぁと、 のんきに降りて、次の電車を待ちました。 しかし次の電車も終点、車庫行きです。 今日は車庫行きが多いなぁと、のんきに見過ごして、次の電車を 待ちました。 しかし次の電車も終点、車庫行きです。 なんだか今日は当たり日だなぁと、のんきに見過ごして、次の 電車を待ちました。 しかし次の電車も終点、車庫行きです。 これはおかしい。 さすがのあゆしゃも、30分してそう思いました。 ★「お客さん、開通は10月6日からですよ」 今日は、2日・・・? 。。。しまった。。。(滝汗)! {magclick} /*========================================================*/ 今回のお題 << CEditの応用1 最下行を取得 >> /*========================================================*/ ★表示されている最下行を取得するには、 有効なクライアント座標を取得して、その一番下の座標を行番号 に変換します。 ★有効なクライアント座標を取得するには、 CEdit::GetRect を使用します。 これで CEdit のクライアント座標から、テキストが描画される 領域を取得できます。 つまり、マージンなどが設定されている場合、そのマージンを 差し引いたクライアント座標が取得できます。 CRect rc; pEdit->GetRect( &rc ); // 有効なクライアント座標を取得 あとは、座標を行番号に変換するだけです。 CPoint pt( rc.left, rc.bottom - 1 ); // 一番下のちょい上 int line_char = pEdit->CharFromPos( pt ); // 変換 int line = (line_char>>16) & 0x0FFFF; // 上位ワードが行番号 ★行番号の整合性をとるには、 CharFromPos で取得できる行番号は、本来の行番号の下位ワード ですので、6万行を超えるようなソースでは変になります。 そこで、CEdit::GetFirstVisibleLine を使用して、表示されて いる最初の行の行番号を取得し、それを使って整合性をとります。 int top = pEdit->GetFirstVisibleLine(); // 最初の行番号 line |= top & 0x0FFFFL; // 上位ワードをコピーする ただし、丁度64キロバイト境界にある可能性があるので、 最上位より最下行が小さいという矛盾がある場合、上位ワードを インクリメントします。 if( top > line ) line += 0x010000L; // 桁上げする はい、多分クリアー。 しかし、行番号の整合性とりは、あまり意味がありません。 6万以上のテキストファイルって、めったにありませんから。 下位ワードのインデックスの整合性を取るほうが重要です。 {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。あくまでも予定です。 大型計算機「LC」の仕上げとシェアウェア登録 グラフィックエディッタ「あいすドロワ」の作成 ファイル比較ツール「あいすでふ」の作成 C言語解析ツール「しーますた」の作成 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は10月13日(水曜日)に、第509回をお送りします。 お題は「CEditの応用2 選択順序を取得」 体育の日はお休みとしましょう。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 ようやく晴れた、また雨だ なんて大歓迎です。 {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 |