- - PR -
ListBoxのオーナードロー(OwnerDrawVariable)でスクロールが逆方向に見える
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-25 21:29
こんにちは。
ListBoxのオーナードロー(OwnerDrawVariable)でスクロールが逆方向に見える現象が直りません。 フォームにListBoxを貼り付けて、DrawModeをOwnerDrawVariableとして、以下のコードを追加します。
下へスクロールするときに水色の部分が逆方向へ動いているように見えます。 この現象はOwnerDrawFixedの場合は起きません。 なんとか方法はないものでしょうか? [ メッセージ編集済み 編集者: ジブ 編集日時 2005-11-25 21:32 ] | ||||||||||||
|
投稿日時: 2005-11-30 23:09
この現象は、なんともしがたいのでしょうか?
高さを可変にして自分でDrawしようとする場合は別なコントロールを使用すべきなのでしょうか? それともそもそも無理なものなのでしょうか? すべて自前で作るとすれば、どういう手順が必要になるのでしょうか? それとも、なにか大きな勘違いをしているのかな??? | ||||||||||||
|
投稿日時: 2005-12-01 00:23
たしかWindowsがウィンドウをアニメーション的に最大化したり、
スムースなスクロールとかするようになってから よく見かけるようになった現象ですよね。 違ったかな? それまでオーナードローのアプリが少なかっただけかな。 別の掲示板で同じ質問見たことある。 そこでは完璧ではないが多少改善したらしい。 see 高さ可変オーナードローリストボックスのスクロール挙動 | ||||||||||||
|
投稿日時: 2005-12-01 00:55
こんばんは。
実はジブさんのおっしゃる現象を検証するために ジブさんのコードを実行してみていたのですが、 私の環境では再現しなかったので、回答することを見合わせていました。 OwnerDrawVariableの場合もOwnerDrawFixedの場合も、挙動は同じでした。 特に、スクロールが逆方向に見える現象が起こることはありませんでしたが… 他の皆さんのところはどうなんでしょうね?
べつにオーナードロー自体は、最近できたテクニックではないですし 今まで極当たり前のように使われてきたはずですけれども。 私も今までWindowsアプリの製品開発では、オーナードローは多用してきてますし、 市販製品だって、オーナードローを見かけない方が稀のように思いますが。 | ||||||||||||
|
投稿日時: 2005-12-01 21:10
ありがとうございました。 .Net のListBoxだとOnVScrollがないかOverridableになっていないようでいろいろ試行錯誤の結果 WndProcでWM_VSCROLLを監視し、一時的に描画を停止して障害を回避しました。 SB_PAGEDOWNの描画で新しいページを下から出なく上から降ろしてしまうという初歩的なバグのようですね。
わざわざありがとうございました。 未記入さんのご紹介の掲示板でもとりあげられているように
「つまみとボタンの間をクリック」した場合はいかがでしょうか それともVS.Net2005とかで直っているものでしょうか? ともかく、応急避難的な対応でなんとかなりました。 ちらつきは仕方ないとあきらめてよしとしようと思います。 また、スムーズスクロールをOffにできるのであればそのほうがよさそうに思ったのですが ListBoxのプロパティとかにはみつけられませんでした。 それと、副産物としてスクロールがとても早くなりました。 とくにマウスホイールでの動作は耐えられないくらい遅かった(なんであんなに遅いんだろう、不思議なくらい遅い)のですが いっそ、SB_PAGEDOWNだけでなくすべてのWM_VSCROLLで同様にしたら (ちらつきをがまんすれば)早くなり、いらいら解消になりました。 いろいろ、ありがとうございました。 | ||||||||||||
|
投稿日時: 2005-12-01 22:43
何か最後の発言だけ取り上げて揚げ足取っているみたいだから、言い直そう。 Windowsがスムーズスクロールなどを行うようになった頃から、俺はこの現象を見かけるようになった。 こんなおかしな現象は、大きく取り上げられてもいいはずなのに、情報が少ないんだよな。 一応この現象に触れているものは見たことあるが、オーナードローを行っているプログラマーからの質問や意見や解決策みたいなのはめっちゃ少ない。 理由はなんだろう * 再現する環境だがオーナードローのプログラミングしない * 再現する環境だがオーナードローするアプリをもっていないので知らない こういったことからだろうか。 そういった観点から、オーナードローするアプリが少ないとか、オーナードローのプログラミングする人が少ないと考えました。 # 今は、スムーズスクロールが有効だと再現できると考えているが、プログラムを書いてまで事実確認しようとは思わない。 再現しない環境が多いかどうかは着目していませんでした。 以下の可能性もあるということか * 再現しない環境だ さらに * 再現する環境だがあきらめた、特に取り上げる気にならない * 俺が質問や意見や解決策を発見できていないだけ * 実はみんな解決策を知っているが、特に取り上げる気にならない [ メッセージ編集済み 編集者: 未記入 編集日時 2005-12-01 23:03 ] | ||||||||||||
|
投稿日時: 2005-12-01 23:15
どうなんでしょう。 私などがMSへ積極的にバグレポートをあげるべきなんでしょうね。 以前別件でなんどかメールを出したこともあったのですが、真剣に考えているのかよくわかりません。 最近はあきらめかけています。いかんですね。 サンプルコードを提示しようかなとも思いましたが、あまりに情けない応急処置なので とても気恥ずかしく書けずじまいでした。 とりあえずサンプルを
いらない定義がいっぱい残ってますが、ご容赦を。 また「なぜかスクロールバーが同期しないので」の件は
だけでOKだったんですが、なんだか気分的に好きになれない。 そもそもバグ回避なんで、なんでもいいんですけど。。。。。 [ メッセージ編集済み 編集者: ジブ 編集日時 2005-12-01 23:21 ] | ||||||||||||
|
投稿日時: 2005-12-01 23:44
関係なかったらゴメンなさい。
この問題ってWindowsのテーマによって発生したりしませんか? Windowsクラシックだと起きたりとか。 |