リストボックスの左側にスクロールバーを出したい

[戻る]
tib 2002/11/21(木) 03:57:55
「WinNT4.0 sp6(英語版) + VC++ 5.0 sp3 + MFC」という環境です。

・プロジェクト新規作成でMFC App Wizard(exe)を選択
・ダイアログベースでプロジェクトを作成
・ダイアログにリストボックスを貼り付け
・リストボックスのプロパティを開き、
 Extended Styles Tab > Left Scrollbar checkboxをon
・ダイアログクラスのOnInitDialog()で
 CListBox::AddString()を使ってリストボックスにアイテムを
 (スクロールバーを出現させるのに十分な数)追加

このような手順でビルド・実行するとスクロールバーはリストボックスの右側に表示され
てしまいます。Left Scrollbar checkboxをoffにしてもやっぱりスクロールバーはリスト
ボックスの右側に表示されます(これはこれで納得できる)。

.rcファイルを開いてみると、確かにリストボックスには「WS_EX_LEFTSCROLLBAR」が設定
されています。リソースエディタで指定してもダメなら、と
ListView_SetExtendedListViewStyle()を使って明示的にWS_EX_LEFTSCROLLBARを設定して
みても結果は変わりませんでした。


ところが、同じ事を「Win2000 (日本語版) + VC++ 6.0 + MFC」という環境で試してみる
と、いとも簡単に期待通りの結果が得られました。しかしいくらこの環境で成功したとこ
ろで、要求はあくまで前述の環境で実現しなくてはなりません。

VC++5.0で、スクロールバーをリストボックスの左側に表示させる方法はないのでしょうか。

こん! 2002/11/21(木) 08:49:48
はじめまして

取り敢えず知らないんでちょっと調べてもしかしてと思うのは

comctl32.dll version 4.70 or later

かな?これはsp3で入ってるんでしょうか?

こん!<=^・^=>

dairygoods 2002/11/21(木) 09:41:31
CreateWindowExの説明に、WS_EX_LEFTSCROLLBARは、ヘブライ語やアラビア語などの
読み方向の制御をサポートするシステムで有効とあります。

tib 2002/11/21(木) 09:43:24
レスありがとうございます。

comctl32.dllのバージョンをどうやって確認したらいいか解らなかったのですが、この
ファイルを検索してバイナリエディタで開いてみたところ、
  [RegDll]
  ComponentName=IE40.Comctl32
  ComponentVersion=5.0
  AdvOption=36
という記述が見つかりました。version 5.0なのでしょう、きっと。

tib 2002/11/21(木) 09:56:45
>ヘブライ語やアラビア語などの読み方向の制御をサポートするシステムで有効
その記述、今確認しました。それどころか、

>他の言語では、このスタイルは無視され、エラーとして扱われます。
とまで書いてありました。うーむ、「無視され」まではいいけど
  ・エラーにはならなかった
  ・Win2000JP + VC++6.0では無視されなかった
の説明がつかないような...。ヘブライ語パックとアラビア語パックは以前抜いたし...。

tib 2002/11/21(木) 10:28:00
>ヘブライ語パックとアラビア語パックは以前抜いたし...。
というか、NT4.0 (英語版)の方にはヘブライ語パックが入ってます。英語OS+ヘブライ語
パックではダメで、ヘブライ語OSを入れないと有効になってくれないということでしょう
かね?

あ、関係ないかもしれないけど今NT4.0 (英語版+ヘブライ語パック)でイスラエルのwebサ
イトにアクセスしたらスクロールバーが左側にでてきたぞ?

謎が謎を呼ぶ...。

dairygoods 2002/11/21(木) 10:42:59
CListBox::SetLocale()なんてのがありますね。
ここにヘブライ語などを指定してみてはどうでしょう。

tib 2002/11/21(木) 12:26:01
>CListBox::SetLocale()
試してみました。
・コントロールパネルの地域設定でロケールを設定し、
 default localeとして読み込ませる
・SetLocale()で設定してみる

この2つの方法で、コントロールパネルから選択できる全てのロケール、MSDNで紹介され
ている全てのLCIDを試してみました。が、一つとしてスクロールバーが左側に来てくれる
ことはありませんでした。

tib 2002/11/25(月) 13:28:12
いろいろ試行錯誤を繰り返しましたが、結局、
・リストボックスはスクロールバーを強制的に非表示にする。
・リストボックスの左側に別途スクロールバーを設置。
・リストボックスとスクロールバーを管理するクラスを作成。

という手で対処しようと思います。お知恵をお貸しくださった皆様、ありがとうございま
した。

tib 2002/11/25(月) 13:28:39
[[解決]]
解決マーク入れるの忘れた。

古いスレッドには追加発言できません。