No.1ベストアンサー
- 回答日時:
これは「オーナードロー」というテクニックになります。
例えばListBoxの描画をVBでは意識する必要がありませんが(マウスで選択するとハイライトしたり、ウインドウを再表示した時に再描画してくれたり等)、これはOSが勝手にやってくれるからなのです。
「オーナードロー」とは、このOSがやってくれる作業を自分で行う、ということになります。
自分で行えば背景色の変更も、前景色の変更も可能になります。
背景にビットマップを描画することも可能です。
>サブクラス化というやつをすればできるのでしょうか?
オーナードローをVB6で実現するには、サブクラス化が必須になります。
オーナードローのコントロールからWM_DRAWITEMというメッセージが送られてくるので、それを処理しなければいけないからです。
ただ、VB6標準のListBoxには「オーナードローを許可する」ListBoxというのがありません。
具体的に言うと
LBS_OWNERDRAWFIXED:(デフォルト)普通のListBox
LBS_OWNERDRAWVARIABLE:オーナードローが有効なListBox
という2つのウインドウスタイルがありますが、VB6標準のListBoxはLBS_OWNERDRAWFIXED固定になっています。
これを変える事は難しいので、CreateWindowEx()API関数を使って「一から(LBS_OWNERDRAWVARIABLEを有効にした)ListBoxを作成する」という作業が必要になります。
そのうえで、サブクラス化を行い、ウインドウプロシージャでWM_DRAWITEMを捕まえて、描画を行います。
しかも、描画にしてもVC++などでウインドウ描画(ブラシなど)の知識があればその辺は何とかなると思いますが、やったことが無いとかなり大変です。
なにせ、OSがやってくれたことを全部(に近い状態で)行わなくてはいけないのですから。
もしサブクラス化の知識もおありでないようでしたら、潔くListBoxを使うのはあきらめたほうがいいかもしれませんね(^^;
一応、参考になりそうなサイトを挙げておきます。
<<ボタンのオーナードロー>>
http://www5.ocn.ne.jp/~minute/article/vb/a2.html
このケースではCommandButtonですが、考え方は一緒です。
<<サブクラス化>>
http://www.galliver.co.jp/writing/susume_vb/tre9 …
ListBoxそのものではありませんが(MS提供のユーザーコントロールを使う)、参考になるサンプルとその情報があります。
いちばん簡単なのは、多少運用は面倒ですがListBoxの代わりにTreeViewなどを使う方法ですね。
時間があればListBoxでチャレンジしても構いませんが、サブクラス化一つとってもそれなりの知識が必要ですので、段階を踏んで知識を積み上げていくことをオススメします。
道標を立ててくださりありがとうございます。
VBのスキルレベルは、まだコントロールをきったりはったりのレベルですが、少しずつ上昇させていきたいと思います。
とりあえず参考リンクから、やっていきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルでこのようなことはできますか? 3 2022/07/10 19:57
- Access(アクセス) ACCESS2019 ナビゲーションウィンドウの色 1 2022/05/10 17:15
- Excel(エクセル) [テーマのフォント]、[見出しのフォント]、[本文のフォント]とは何ぞや? 2 2023/02/27 09:18
- PowerPoint(パワーポイント) PowerPointの箇条書きの既定のリストを変更する方法について 1 2022/12/15 18:41
- グループウェア 主にPCで使う、パスワードで共有できるカレンダー 5 2022/08/15 09:53
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- 弁護士・行政書士・司法書士・社会保険労務士 会計監査人設置会社の定めの登記 1 2022/06/05 17:15
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- その他(Microsoft Office) Excelの条件付き書式についての質問です。 2 2022/09/08 01:25
このQ&Aを見た人はこんなQ&Aも見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
EXCEL VBA リストボックスの列を指定してForeColorを変更する方法について
Excel(エクセル)
-
Excel VBA ListViewサブアイテムの文字色
その他(プログラミング・Web制作)
-
-
4
ACCESS リストボックスの字の色を変えたい
その他(データベース)
-
5
vba ListViewの選択色について教えてください
Excel(エクセル)
-
6
特定行の背景色を変えたいのですが
Visual Basic(VBA)
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
UserForm1.Showでエラーになります。
工学
-
10
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
11
vba listviewにおけるtextのAlingmentを中央にしたい
Excel(エクセル)
-
12
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
13
ExcelVBAでListViewが使用できない
Visual Basic(VBA)
-
14
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
15
ListViewで複数選択された項目を一度に削除する方法
Visual Basic(VBA)
-
16
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
17
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
18
条件に応じてコンボボックスの背景色を変えたいです
Excel(エクセル)
-
19
ListBoxで改行したい
Visual Basic(VBA)
-
20
VBAでListViewのフォントを変更する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CScrollViewの使用方法について
-
CStaticコントロールの静的イメ...
-
MFC ビットマップ描画で残像が残る
-
Minecraft 統合版(PC)の描画距...
-
MFCのタイマーのつかい方を教え...
-
VBAにGDI+を参照させる方法
-
InvalidateRectの使い方について
-
3Dシミュレータの開発言語
-
ビットマップを表示させる(MFC)
-
画面全体を再描画させたい
-
フォームにビットマップを表示
-
VB6,リストボックスの特定行の...
-
GDI+で高速な描画
-
ダイアログベースの再描画について
-
画面リサイズ時のちらつきをな...
-
StretchBlt関数について
-
MFCでOnPaintのタイミング
-
[VB.net] DataGridViewの列ヘッ...
-
コンボボックスの高さを変えたい
-
TextBoxに文字を書いても表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
[VB.net] DataGridViewの列ヘッ...
-
MFCでOnPaintのタイミング
-
NVIDIAのシェーダーキャッシュ
-
C++にて、塗りつぶされた円を描...
-
UpdateData( FALSE); による文...
-
VC++プログラムをつかったBMP画...
-
MFCのタイマーのつかい方を教え...
-
CStaticコントロールの静的イメ...
-
画面全体を再描画させたい
-
OneNote 2010 文字と描画がずれる
-
VBAにGDI+を参照させる方法
-
Labelの文字をスクロールする際...
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
テクスチャに半透明ポリゴンを...
-
Windowのちらつき防止
おすすめ情報