CTreeCtrlのスクロールバーの表示・非表示制御がおかしい
WindowsのMFCアプリをメンテナンスしています。
ダイアログウィンドウの中にCTreeCtrl
コントロールがあります。
ダイアログウィンドウのサイズが変更されたときに呼ばれるOnSize
ハンドラから、そのコントロールからの派生クラスのsetScrollbar
メソッドを呼び、そこでWin32 APIのShowScrollBar
をコールして垂直スクロールバーおよび水平スクロールバーの表示・非表示を制御しています。
しかし、それがちょっとどうもおかしいケースがあり、突き詰めていくと、下記の現象を捕らえました。
class CMyTreeCtrl : public CTreeCtrl
{
public:
void SetScrollbar();
};
void CMyTreeCtrl::SetScrollbar()
{
ShowScrollBar(SB_VERT, false);
ShowScrollBar(SB_HORZ, true);
}
class CMyDialog : public CDialog
{
public:
CMyTreeCtrl* m_pTreeCtrl;
afx_msg void OnSize(UINT nType, int cx, int cy);
};
void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
m_pTreeCtrl->SetScrollbar();
}
コードはこんな感じなのですが、ウィンドウの幅をドラッグするとこうなります。
幅を拡げていく途中で垂直スクロールバーが表示されてしまっている区間があります。
ShowScrollBar
を呼んでいるのはアプリ全体で上記の箇所だけです。
これはCTreeCtrl
コントロールのバグもしくは仕様でしょうか・・・?
回避方法があれば教えてください。