2006年1月26日 (木)
2006年1月21日 (土)
仮想リストビューのカラム幅の自動調節
オーナードローリストビュー(ひょっとしたら仮想リストビューかも)でヘッダーの区切り(ディバイダー)をダブルクリックしてカラム幅を自動調節しようとすると、仮想リストではなく、実リストビューの中身を見に行って、中身が何もなくて、幅がほぼ0になってしまう。
そこでHDN_DIVIDERDBLCLICKで正しい幅に設定してやろうとするとできるのだが、いったん幅0になった後に設定したサイズになる。つまり幅0になるのをHDN_DIVIDERDBLCLICKだけではとめられない。散々調べた範囲ではこれはまともにはとめようがない。
が、たとえば要素が0個とか1個のリストビューでカラム幅自動調節をしようとすると一瞬幅0になるものの、すぐに指定のサイズになる。そこで自動調節時にオーナードローを一時停止させればいったん幅が0になっているのがわからないくらい高速に自動調節できる。
そのためにはリストビューのヘッダーコントロールをサブクラス化し、WM_LBUTTONDBLCLKが来たらオーナードローを一時停止して、HDN_DIVIDERDBLCLICKで幅を設定する直前にオーナードローを再び再開するようにすればよい。
そこでHDN_DIVIDERDBLCLICKで正しい幅に設定してやろうとするとできるのだが、いったん幅0になった後に設定したサイズになる。つまり幅0になるのをHDN_DIVIDERDBLCLICKだけではとめられない。散々調べた範囲ではこれはまともにはとめようがない。
が、たとえば要素が0個とか1個のリストビューでカラム幅自動調節をしようとすると一瞬幅0になるものの、すぐに指定のサイズになる。そこで自動調節時にオーナードローを一時停止させればいったん幅が0になっているのがわからないくらい高速に自動調節できる。
そのためにはリストビューのヘッダーコントロールをサブクラス化し、WM_LBUTTONDBLCLKが来たらオーナードローを一時停止して、HDN_DIVIDERDBLCLICKで幅を設定する直前にオーナードローを再び再開するようにすればよい。
| 固定リンク | コメント (0) | トラックバック (0)

最近のコメント