コンボボックスの高さを変える方法とオーナー描画について

このQ&Aのポイント
  • コンボボックスの高さを変える方法と、オーナー描画を使用してコンボボックスに色を表示する方法について教えてください。
  • コンボボックスの高さをオーナー描画によって変えると、通常の状態よりも長くなってしまいます。また、コンボボックスに色を表示するためにオーナー描画を使用する必要があります。
  • コンボボックスの各項目の高さを変更するには、CB_SETITEMHEIGHTを使用します。しかし、コンボボックスが閉じられた状態で高さを変える方法はわかりません。また、オーナー描画を使用せずにコンボボックスの各項目に色を付ける方法もわかりません。アドバイスをお願いします。
回答を見る
  • ベストアンサー

コンボボックスの高さを変えたい

WinXP,SDKです。よろしくお願いします。 コンボボックスに色を何色か表示したいです。 いつもはオーナー描画にはしないのですが 色を付ける為にオーナー描画とすると どうしてもコンボボックスの高さがオーナー描画ではない時に比べて長くなります。(コンボボックスはドロップダウンリストです) コンボボックスに小さいフォントを与えても変化しませんでした。 MoveWindowしてもダメでした。 CB_SETITEMHEIGHTをすると、リスト部分の各項目の高さが変わりました。 コンボボックスが閉じられた状態の高さを変えるにはどうしたら良いのでしょうか。 もしくは、オーナー描画にしなくてもコンボボックスの各項目に色を付ける事が出来るのでしょうか。 画面の中でこのコンボボックスだけが異様に大きくておかしいです。 画面のフォントサイズは変えられません(大きなコンボボックスに合わせて画面全体大きくして…というのはNG) アドバイスをよろしくお願い致します。

  • mm666
  • お礼率92% (58/63)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんばんは。   >>コンボボックスが閉じられた状態の高さを変えるにはどうしたら良いのでしょうか。  オーナードローの場合はWM_MEASUREITEMメッセージを処理します。 LPMEASUREITEMSTRUCT lpMis = reinterpret_cast<LPMEASUREITEMSTRUCT>(lp); switch(uMsg) { case WM_MEASUREITEM: if(lpMis->CtlType == ODT_COMBOBOX) { if(lpMis->CtlID == IDC_COMBO1) { lpMis->itemWidth = /*縦幅*/; lpMis->itemHeight= /*横幅*/; } } } >>もしくは、オーナー描画にしなくてもコンボボックスの各項目に色を付ける事が出来るのでしょうか。  此れは多分出来ないと思います。

mm666
質問者

お礼

アドバイスありがとうございます! 今まで何年もSDKでプログラムを組んできましたが、このような事が出来るとは知りませんでした。 昨日一日中サイズを変える事が出来るかどうかネットで調べていたのですが、まったくこのような処理には出会えませんでした。 あまりにも思い通りに表示が変わったので感激です。 本当に助かりました。ありがとうございます。

関連するQ&A

  • あるコンボボックスを選択するともう一方のコンボボックスが自動的に決まる方法

    二つのコンボボックスがあります。 1つのコンボボックスをcb1、もう一方のコンボボックスをcb2とします。cb1の中にはA、B、Cという項目があります。 質問の内容は、例えばcb1のAを選択するとcb2の項目が自動でa、b、cになっている、cb1のBを選択するとcb2の項目が自動でd、e、fになっている、ということなのです。 こんな感じに自動的に状態が変化することは可能なのでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • コンボボックスの動きがおかしいのですが・・・

    ↑と↓キーを押したら次の項目にジャンプする命令を使っているのですがコンボボックスのところにくるとリストを1つ下げてジャンプしてしまうのですがリストを下げずにジャンプする方法がありましたら教えてください。(0-ドロップダウンコンボにするとcombo1.text = sortの命令でできたのですが、2-ドロップダウンリストに変えてやるとできないので2-ドロップダウンリストで動く命令でお願いします。)

  • MFCでのコンボボックスについて

    ご教授願いたくよろしくお願いします。 初歩的な質問ですみません。 何度やっても表示されません。 開発環境 OS:WindowsXP PP:VC++ 6.0 MFC 使用 質問 コンボボックスの初期値として、"F3"という文字を コンボボックスのテキストに表示させたいのです。 コンボボックスのリストから選択した項目の文字列を表示させたいのですが、できません。 コンボボックスのプロパティとしては、 タイプ:ドロップダウン オーナー描画:いいえ 初期描画で使用しているロジックとしては、 CString sss; m_cmb1.GetLBText(0, sss); m_cmb1.SetWindowText(sss); UpdateData(FALSE); ※m_cmb1は、CComboBox の変数です。 参考になるURLやロジックをお願いします!

  • Access2002のVBAコンボボックスについて

    お世話になります。 Access2002でフォームを作成しているのですがコンボボックスを使用する際VBAで項目を登録、入力不可にして選択のみできるようにできないのでしょうか? VBAではなくVB6のコンボボックスの場合Styleプロパティに 2(ドロップダウンリスト)を設定したら可能なのですがAccess2002のコンボボックスにはStyleプロパティがありません。 また、ほかの方法が在れば教えていただけませんでしょうか? 以上、よろしくお願いします。

  • コンボボックスについて

     先ほど質問した者です。javaの開発環境としてはj2sdk1.4.2_13を使用しています。 質問内容  コンボボックスのプログラム開始時の一番最初に、すでに選択されている項目を選択してもイベントは発生しないのですが、どうすればプログラム開始時に選択されている項目が表示されますか? 教えてください。よろしくお願いします。

  • コンボボックスのリストの位置

    VisualBasic 6.0のコンボボックスに、API(CB_SETDROPPEDWIDTH)を利用してドロップダウンリストの幅を広げて使っています。 このときコンボボックスが画面の右端にあったり、極端に広いリストにした場合に、リストの右端が画面からはみ出してしまいます。 リストがはみ出すときは、コンボボックスの位置を変えずにリストのみ左へずらしたいのですが、そのようなことはできるのでしょうか?  よろしくお願いいたします。

  • コンボボックスで困ってます。

    AS3.0でflashを作っている初心者です。 コンボボックスで、画面に表示される画像の切り替えを行いたいと思ってます。 画像をムービークリップにして、そのムービークリップのフレームとコンボボックスのデータを対応させ、表示を切り替えたいと考え、様々なサイトを参考にして、以下のように書いてみたのですが、うまくいきません。ずっとフレーム1の画像が表示されたままです。 my_cb.prompt = "選択"; my_cb.addItem( { label: "ピンク", data:1 } ); my_cb.addItem( { label: "赤", data:2 } ); my_cb.addItem( { label: "黒", data:3 } ); my_cb.addItem( { label: "青", data:4 } ); addChild(my_cb); my_cb.addEventListener(Event.CHANGE, changeFunction); function changeFunction(e:Event):void { mc.gotoAndStop(my_cb.selectedItem.data); } ムービークリップはそれぞれのフレームにstop();と書いてます。 書かないとアニメーションしてしまうので、書いているのですが、これがいけないのでしょうか…? どなたかご教授いただけないでしょうか。

    • ベストアンサー
    • Flash
  • コンボボックスのリストに水平スクロールバーを表示したい

    WinXP,SDKで開発しています。 今、最大サイズ画面の右側にあるコンボボックスのリスト部分が表示仕切れなくて困っています。 実際のコンボボックスは小さく、リスト表示の時に大きくしています。 SendDlgItemMessage(hwnd, IDC_COMBO1, CB_SETDROPPEDWIDTH, 240, 0L); このサイズで丁度リストの中身が見えるのですが、リストが画面からはみ出しています。 そこで、リストのサイズを200くらいにして(200で画面に収まります)水平スクロールを表示したいのですがうまく行きません。 ShowScrollBar() で表示出来るかと思ったのですが、渡すウィンドウハンドルが分からないのです。 おそらくリストのウィンドウハンドルだと思うのですが… このリストのウィンドウハンドルを取得する方法がよく分からないのです。 GetComboBoxInfo() という関数があるようなのですが、コンパイルエラーになってしまって先にすすみません。(定義されていない識別子) そもそも考え方を間違えているのでしょうか。 もっと簡単な方法がありますか? アドバイスをお願い致します。

  • Win32APIでかっこいいコンボボックスを作る

    基本的なコンボボックスを作る方法はわかったのですが、 InternetExplorerのようなコンボボックスを作りたいのです。 オーナードローをしてみても、リストボックスの方しか描けないようです。 (自分のやり方がまずいだけなのかも知れませんが) エディットの外枠の色と、下矢印のボタンの格好を変えたいです。 どなたかご存知ありませんか。

  • コンボボックスで選択した項目を保存する方法

    ダイアログ内にコンボボックスを作り、コンボボックス内の項目には、 TEXT("りんご"),TEXT("メロン"), TEXT("みかん")を表示させました。 先頭項目は、りんご・メロン・みかんの順です。 デフォルトでりんごにカーソルがありますが、 みかんを選択してダイアログを閉じ、再度ダイアログを呼出した時に、 みかんにカーソルがあるようにするには、 どのようにしたら良いのでしょうか? #SDK、Win98、Vc++で作成しています。 宜しくお願いします。

専門家に質問してみよう