テキストの読み込みは普通のファイル操作です。 textbufに読み込んだ後、改行文字を探して行先頭アドレスをlinebufにセットします。 また改行文字は'\0'に置き換えます。復帰文字'\r'があった場合それも置き換えます。
表示はWM_PAINTメッセージへの応答で行います。文字列の表示に使えるAPIはTextOut(),DrawText(),TabbedTextOut()などがあります。 このうちTextOut()はタブの展開が自動でできないので除外します。 行ピッチはフォントサイズから計算しています。
スクロールバーをつけるには、CreateWindow()時に指定するウィンドウスタイルに WS_VSCROLLとWS_HSCROLLを追加します。 なお、このスクロールバーは以前出てきたスクロールバー コントロールとは違います。 (スクロールバーコントロールは一個のウィンドウですが、 今回のスクロールバーはメインウインドウの一部です。)
そしてスクロール範囲を設定します。scrollset()関数でやってます。SetScrollRange() APIで 範囲の設定、SetScrollPos() APIでつまみの初期位置を指定します。 横スクロールの範囲指定のためにはテキストの最大桁数を知る必要があるので、 readtext()時に調べています。(変数maxlen)
スクロールバーが動かされた時の処理を追加します。MainWClass_OnVScroll()および MainWClass_OnHScroll()関数でやってます。ScrollWindow() APIはウィンドウをスクロールし、 その結果新たに見えるようになった場所にWM_PAINTを送ります。 WM_PAINT描画ルーチンもテキストの途中からの表示に対応できるよう変更します。 PAINTSTRUCT構造体のrcPaintメンバに描画範囲が入っているので、これを利用しています。
マウスだけでは不便なので、MainWClass_OnKey()関数内で、 キーボードの矢印キー等をスクロールバーメッセージに変換します。
次のページ
一つ上のページに戻る