「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で、スクロールバーをリストボックスの左側に表示させる方法はないのでしょうか。
はじめまして
取り敢えず知らないんでちょっと調べてもしかしてと思うのは
comctl32.dll version 4.70 or later
かな?これはsp3で入ってるんでしょうか?
こん!<=^・^=>
CreateWindowExの説明に、WS_EX_LEFTSCROLLBARは、ヘブライ語やアラビア語などの
読み方向の制御をサポートするシステムで有効とあります。
レスありがとうございます。
comctl32.dllのバージョンをどうやって確認したらいいか解らなかったのですが、この
ファイルを検索してバイナリエディタで開いてみたところ、
[RegDll]
ComponentName=IE40.Comctl32
ComponentVersion=5.0
AdvOption=36
という記述が見つかりました。version 5.0なのでしょう、きっと。
>ヘブライ語やアラビア語などの読み方向の制御をサポートするシステムで有効
その記述、今確認しました。それどころか、
>他の言語では、このスタイルは無視され、エラーとして扱われます。
とまで書いてありました。うーむ、「無視され」まではいいけど
・エラーにはならなかった
・Win2000JP + VC++6.0では無視されなかった
の説明がつかないような...。ヘブライ語パックとアラビア語パックは以前抜いたし...。
>ヘブライ語パックとアラビア語パックは以前抜いたし...。
というか、NT4.0 (英語版)の方にはヘブライ語パックが入ってます。英語OS+ヘブライ語
パックではダメで、ヘブライ語OSを入れないと有効になってくれないということでしょう
かね?
あ、関係ないかもしれないけど今NT4.0 (英語版+ヘブライ語パック)でイスラエルのwebサ
イトにアクセスしたらスクロールバーが左側にでてきたぞ?
謎が謎を呼ぶ...。
CListBox::SetLocale()なんてのがありますね。
ここにヘブライ語などを指定してみてはどうでしょう。
>CListBox::SetLocale()
試してみました。
・コントロールパネルの地域設定でロケールを設定し、
default localeとして読み込ませる
・SetLocale()で設定してみる
この2つの方法で、コントロールパネルから選択できる全てのロケール、MSDNで紹介され
ている全てのLCIDを試してみました。が、一つとしてスクロールバーが左側に来てくれる
ことはありませんでした。
いろいろ試行錯誤を繰り返しましたが、結局、
・リストボックスはスクロールバーを強制的に非表示にする。
・リストボックスの左側に別途スクロールバーを設置。
・リストボックスとスクロールバーを管理するクラスを作成。
という手で対処しようと思います。お知恵をお貸しくださった皆様、ありがとうございま
した。
解決マーク入れるの忘れた。