0

私のデータベースには、GUID と名前フィールドを持つテーブルがあります。GUID は私の主キーです。「名前」データ フィールドを使用して、テーブルにクエリを実行し、ツリーにデータを入力できます。私の問題は、名前フィールドが一意ではないため、GUID + 名前の組み合わせを追跡するのが難しいことです。たとえば、ツリービューは次のようになります。

-Cities in America
 |
 -Cities in Oregon
      |
      +Milwaukee
      +Salem
 |
 -Cities in Wisconsin
      |
      -Milwaukee
      -Madison

オレゴン州のミルウォーキー市には、ウィスコンシン州とは異なる GUID があります。ユーザーがいずれかのミルウォーキーをクリックしたときに、どちらが選択されたかを追跡するにはどうすればよいですか? データベースを再クエリして、その都市に関連する他のフィールドを取得できるように、その選択の GUID を知る必要があります。

4

2 に答える 2

3

ツリービューにアイテムを挿入するときに、lParamを含めることができます。これは32ビットのアイテムであるため、GUIDを直接保存することはできませんが、(1つの例として)ツリーにアイテムを挿入するときにGUIDの配列を作成し、lParamの配列にインデックスを保存することができます。

ユーザーがアイテムをクリックすると、そのアイテムが選択され、TVN_SELCHANGEDメッセージが表示されます。このメッセージには、(とりわけ)TVITEMアイテムの一部として挿入したlParamを含むへのポインタが含まれています。次に、それを使用してGUIDを検索できます。

于 2012-11-14T23:42:28.050 に答える
1

プロパティを使用Tagして GUID を格納できます。Control.Tag プロパティを参照してください。

編集: MFC CTreeCtrl については、CTreeCtrl::SetItemData
を参照 してください。32 ビット値のみを格納するため、タグを追跡するには、すべてのタグのインデックスを作成する必要があります。ベクトルを使用してタグを格納SetItemDataし、タグへのポインターを指定できます。ベクトルで。

于 2012-11-14T23:44:24.203 に答える