2011-08-09 5 views
0

にCPENをバインドするVS2005 C++でのリストボックスにCPENオブジェクトをバインドする方法を誰もが知っていますか?リストボックス

は、私は、変換のいくつかの並べ替えとToStringメソッドとしてそれを行うことができますか?

私が選択するユーザーのためのさまざまなペンのカスタムリストを作成しています。

ありがとうございました。

COLORREF rgbRED = (255,0,0); 
    CPen penRed(PS_SOLID,3,rgbRED); 

    CDialog::OnInitDialog(); 
    ShowWindow(SW_SHOW); 
    UpdateData(); 
    lbLineWeight.InsertString(penRed); 
+0

私はあなたがMFCについて話していると仮定しているので、質問にタグを追加しました。 –

+0

は '自分はそれが私はそれが最高の状態でハイライトの非現実的な要約になるだろうとして、「_xx_時間/日で何かのcomplex_ _insert自分を教える」というタイトルのものを読んで回避するCPEN –

+1

のためのチュートリアルを持っている21 Days'にC++を教える読んでみてください。 – AJG85

答えて

2

2つのオプション。

  • (シンプル)の項目として文字列で、通常はCListBoxを使用し、実際のCPENなどのフリー機能(またはいくつかの他のクラスのメンバー)に文字列との間のリンクを維持し、あなたがいずれかを実行する必要があります現在選択されている項目(通常インデックス番号)とCPen情報との1対1の関連付け。

  • (もう少し複雑です)CListBoxから独自のクラスを派生させ、内部的にCPenデータを保持していれば、有効なCPenのリストをその新しいクラスに保存し、1対1の関連付けを行う必要があります選択されたアイテムと実際のCPenとを比較し、ボーナスとして、派生されたCListBoxをオーナー描画させることができ、stringを使用する代わりに、リストアイテムに各ペンの表現を描画することができます。

別取り払わは、アイテムと実際のアイテムとの間のリンクは、もう少し簡単にするために、各項目はCListBox(はCListBox :: SetItemData)にユーザデータとしてCPENを追加することができます。

幸運。

+0

私の考えを箇条書きのポイント#2と組み合わせると、アイコンやビットマップメンバーをヘルパー構造体に追加して、CImageListでそれを使用して、リストボックスの名前の隣に小さなアイコンを置くことができます。可能性は、GUIに関しては全く無限です。 – AJG85

+0

これらの行に沿ったような簡単な方法がありますか? COLORREF rgbRED =(255,0,0); \t CPen penRed(PS_SOLID、3、rgbRED); \t CDialog :: OnInitDialog(); \t ShowWindow(SW_SHOW); \t UpdateData(); \t lbLineWeight.InsertString(penRed); – jpavlov

+0

簡単な方法でリストボックスに追加する方法を示す例を教えてください。ありがとう。 – jpavlov

1

あなたが正しく理解しているとすれば、ユーザはCPenを他の場所で使用するために選択できるようにするCListBoxが必要です。

私はおそらく、ほとんどのヘルパークラスになるだろう:

struct PenHelper 
{ 
    CString m_displayName; 
    LOGPEN m_penProps; 

    bool CreatePen(CPen* pPen) 
    { 
     return pPen->CreatePenIndirect(&m_penProps) == 1; 
    } 
}; 

アイデアは、あなたが「ソリッドレッド」のような名前とそのプロパティで対応するLOGPEN構造体で複数のPenHelperstd::map各状の容器を持っている可能性があること名前に一致する。 CListBoxには、表示名文字列を追加します。 1つを選択すると名前で検索し、実際に対応するように作成機能を使用することができますCPen

猫を肌に触れるだけの方法の1つです。

編集:クイックノート。彼らはあなたのCListBoxで選択を行うときのためにあなたのメッセージマップでON_LBN_SELCHANGEを処理するために、それ以外の場合は発生しませんあなたがCreateコールでそれをLBS_NOTIFYスタイルを与えたことを確認してください。

関連する問題