スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

にゅーてきすとえでぃたー4

2006年07月23日 17:30

ってことで、基本的な機能はさすがに全部終わりました~(´∀` )

結構バグが出てたんですけど、丹念につぶした結果、出なくなりましたъ(´д`)グッ

最後に実装した機能は
 ・範囲内の文字列の削除
 ・指定した位置に文字列を挿入
 ・指定した範囲の文字列の取得
 ・選択処理の補助
 ・マウスでの選択処理
かな。


バグで一番厄介だったのが「カレットの残像が残るバグ」でした。
これ、解決策がいいのが無いんだよね。。

SetCaretPos を短い間隔で呼んだとき、カレットがあった位置を TextOut とかで描画しなかった場合にカレットの残像が消されないままになることがあるってバグです。

回避方法はわかったんですけど、余りにも面倒なのと将来的に汎用性をなくしちゃうのでその回避方法は取れませんでした。

回避方法っていうのは、InvalidateRect や InbvalidateRgn を呼ぶときはカレットを消しておく(HideCaret を呼ぶ)っていう方法です。
カレットを表示する(ShowCaret を呼ぶ)タイミングは OnPaint の一番最後で呼んでやればOK

こうすればカレットの残像は残りません。


んが!全ての InvalidateRect や InvalidateRgn を自前のメンバ関数に置き換えるのも面倒だし、まして外部から呼ばれた場合はどうしようも無いのです。
では、どうすればいいのでしょうか。


上にも書きましたが、カレットのあった位置を描画しないから起きるわけです。
ですから、カレットのあった位置を描画しちゃえばOKなんですね。
要するに行末まで文字を描画しても、その後も背景色で塗りつぶしちゃえばOKなわけです。
あるけ は ExtTextOut 関数で文字列を渡す部分を NULL にして描画してます。
こうすればカレットの残像は残らないわけです。


あとは置換処理と検索処理のUIを書けば大体終わりなんです。
始めは FindText とかAPI使おうと思ってましたが、なぜか あるけ のシステムに乗せた場合メッセージ処理でバグが出るので自分でUIを作るはめになりそうです( ´Д⊂ヽ


けれども、今現在の機能で完璧にエディットボックス以上のものがあるので、実装は後回しでもいいかな~?って思ってます。



・・・・さて、いよいよチャレンジかな。。


blog_rank
スポンサーサイト


コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://angra.blog31.fc2.com/tb.php/63-7f884f55
    この記事へのトラックバック


    最近の記事


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。