問題タブ [ccombobox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CComboBox の並べ替え
そのため、既存のアプリケーションで CPP の歯を削ろうとしています。
私はちょっとした障害に遭遇しました。以下に示すように、コンボボックスの項目が順番に追加されています。ただし、出力は
ここでCComboBoxのドキュメントを見てきました。それでも、なぜこれがこの結果を生み出しているのかについて、私はまだ混乱しています。
c++ - MFC の CComboBox に CString 以外のオブジェクトを追加する方法はありますか?
CString
メンバー変数を持つオブジェクトを に追加しようとしていますCCombobox
。のリスト項目として文字列以外の別のメンバー変数を必要とするツールとインターフェイスしようとしているため、文字列を追加することはできませんCComboBox
。以下は私がやろうとしていることです。
の文字列のみを表示したいのですmyOwnObject
が、オブジェクト全体をリストボックスに入れて、他のツールが他のメンバー変数に到達できるようにします。
c++ - オーバードロー プロパティを使用して CCombobox を作成中にデバッグ アサーションが失敗しました
次のコードで CCombobox を作成しようとしています:
しかし、「Debug Assertion Failed」というエラーメッセージが表示されます
ファイル:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winctrl1.cpp, Line 271
この問題は、フラグ付きの CCombobox を作成しようとした場合にのみ発生しますCBS_OWNERDRAWFIXED
。Owner Drawn プロパティをfixedに設定して CCombobox をプログラムで作成する方法を教えてください。
c++ - CCombo Box ドロップダウンの幅を設定する方法
CCombo Boxの子孫であるクラスを使用しています。ドロップダウン リスト の最大許容幅を設定するにはどうすればよいですか?
私がインターネットサーフィンから結論付けたのは、CCombo Boxクラスにはそのようなメソッドがないということです。誰かがこの点で私を助けてください。
前もって感謝します。
mfc - CComboBox::SetItemHeight() は、項目とコントロールの両方の高さを増加させます
の子孫であるクラスを使用していCComboBox
ます。次のコードを使用しCComboBox::SetItemHeight
てコンボボックス項目の高さを設定するメソッドを呼び出すと、問題が発生します。
アイテムの高さを設定しますが、コントロール (ドロップダウン リスト) の高さも増加し、新しい高さはダイアログ ボックスで設定した高さよりも大きくなります。次のコードも試しました。
しかし、それはアイテムの高さではなく、編集コントロールの高さを設定します。ドロップダウン リストの高さを乱さずにコンボボックス項目の高さを設定するにはどうすればよいですか?
c++ - GetSel メソッドは、CEdit コントロールで常にゼロを返します
MFC アプリケーションでCEdit
は、ダイアログのコントロールがサブクラス化されます。別のダイアログには、そのテキスト ボックスに値を送信する数値キーパッドがあります。エディット コントロールでテキストが強調表示されている場合、GetSel
メソッドは強調表示されているテキストの開始インデックスと終了インデックスを返し、これはキーパッドからの値に置き換えられます。これはうまくいきます。
サブクラスCEdit
がカスタムCComboBox
コントロールの一部になると、コンボボックスGetSel
のコントロールのメソッドは常に 0 を返します。CEdit
原因と解決策が分からないようです。そして、どんな助けにも感謝します。ありがとう。
アップデート:
強調表示されたテキストを取得しようとするコードは次のとおりです。
コンボは次のようにサブクラス化されます。
そして CEdit コントロール:
c++ - CComboBox がドロップダウン時に CurSel を選択しない
ダイアログにアルファベット順に並べ替えられたコンボボックスがあります。このコンボには複数の文字列が含まれていますが、一部は大文字と小文字が異なって重複しています。つまり、「オン」と「オン」、「オフ」と「オフ」があります。これは冗長に思えるかもしれませんが、現時点では重要ではありませんが、理由があります。
重複は明らかに、大文字の文字列が最初にリストに次々と表示されます。すなわち:
オフ
オフ
オン
の上
ユーザーが「オン」(小文字) を選択すると、正しいインデックスが設定されCurSel
、正しい文字列が表示されます。ただし、コンボボックスの矢印をクリックしてリストをドロップダウンすると、強調表示されませんCurSel
が、その前の大文字の文字列が強調表示されます。以下の画像を参照してください。
これは、ドロップダウンで選択されたものです。
これは、ドロップダウンを展開するときにコンボボックスで選択されるものです。
メッセージをキャプチャしON_CBN_DROPDOWN
、cursel 値を確認しましたが、期待どおりです。
また、このリスト内の文字列を大文字と小文字を区別して検索できるように、このコンボボックスを既にサブクラス化しています。これは、正常に実装されていないことがわかっているため、問題の原因である可能性があります。
しかし、この段階で文字列がcursel値をオーバーライドする理由がわかりませんか? CurSel
値は、関連する項目を選択するために使用される値であってはなりませんか?
これを修正する方法についてのアイデアは大歓迎です。
編集:CBN_DROPDOWN
を上書きし
てメッセージをキャプチャしようとしましたOnWndMsg
。このメッセージが表示されると、メニューをドロップダウンする前に、現在選択されている項目 (正しい項目) を取得します。次に、メニューをドロップして、SetCurSel
以前に取得したものを呼び出します。
この種の機能は機能しますが、フォーカスを消すか、ドロップダウンの矢印をもう一度クリックしてドロップダウンを非表示にすると、テキスト ボックスに間違った項目が表示されます。これは有効な方法ですか、それとも私は完全にここから外れていますか? ドロップダウンが折りたたまれたときに送信されるメッセージは?
EDIT 2:コードプロジェクト から大文字と小文字を区別するコンボボックスを実装しましたが、うまく機能します。