リストボックスの左側にスクロールバーを出したい – プログラミング – Home

リストボックスの左側にスクロールバーを...
 
通知
すべてクリア

[解決済] リストボックスの左側にスクロールバーを出したい


tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

「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で、スクロールバーをリストボックスの左側に表示させる方法はないのでしょうか。


引用未解決
トピックタグ
こん!
 こん!
(@こん!)
ゲスト
結合: 22年前
投稿: 49
 

はじめまして

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

comctl32.dll version 4.70 or later

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

こん!<=^・^=>


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

CreateWindowExの説明に、WS_EX_LEFTSCROLLBARは、ヘブライ語やアラビア語などの
読み方向の制御をサポートするシステムで有効とあります。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

レスありがとうございます。

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

>ヘブライ語やアラビア語などの読み方向の制御をサポートするシステムで有効
その記述、今確認しました。それどころか、

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

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

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

謎が謎を呼ぶ...。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

CListBox::SetLocale()なんてのがありますね。
ここにヘブライ語などを指定してみてはどうでしょう。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

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

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

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

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


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
Topic starter  

解決マーク入れるの忘れた。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました