Mesoscopic Programming

タコさんプログラミング専門

Programming Tips #5 ツリービューのスクロール位置の設定

ツリービューコントロールのスクロール位置を変更する際の注意点を述べる。
TreeView_Select() で選択項目を変更すると TVN_SELCHANGED イベントが発生するが、このイベント処理が終わる前にスクロール位置を変更してはならない。
アプリ終了時にツリービューのスクロール位置を保存しているので、起動時にこれを復帰させようとして分かった。
仕方がないので以下のように初期化中フラグで対処した。

LRESULT TreeView :: OnTvnSelChanged()
{
    if ( bFirst )
    {
        bFirst = FALSE;

        SetScrollPos( hTree, SB_HORZ, GetProfInt( sectionName, keyHorzPos, 0 ), FALSE );
        SetScrollPos( hTree, SB_VERT, GetProfInt( sectionName, keyVertPos, 0 ), FALSE );
    }
}

以上。