IColumnData
COM公式ドキュメント
IColumnData インターフェースは MMC 1.2 で導入されました。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IColumnData::SetColumnConfigData メソッドを使用すると、スナップインは列セット内の列について、永続化される幅、順序、非表示状態を設定できます。
| pColID | SColumnSetID* | in | データを設定する列セットの ID を格納する SColumnSetID 構造体へのポインター。 |
| pColSetData | MMC_COLUMN_SET_DATA* | in | 列セット内の列数、および設定する列データを格納する MMC_COLUMN_SET_DATA 構造体へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
解説(Remarks)
ユーザーがスコープ項目を選択し、その後スナップインが IColumnData::SetColumnConfigData を呼び出して、選択された項目のリストビューの列構成データを変更する場合を考えます。MMC は、ユーザーがその項目を選択解除して再度選択した後にのみ、変更をリストビューに適用します。MMC は同じ ID を持つすべての列セットにも変更を適用する点に注意してください。そのため、同じ列セット ID を持つ別の項目をユーザーが選択すると、MMC はその項目にも永続化されたデータを適用します。
IColumnData::SetColumnConfigData を呼び出すと、以前に保存されていたソート情報と列構成情報がクリアされます。
IColumnData::GetColumnConfigData メソッドを使用すると、スナップインは MMC によってメモリに保存されている列セット内の各列について、現在の幅、順序、非表示状態を取得できます。
| pColID | SColumnSetID* | in | データを取得する列セットの ID を保持する SColumnSetID 構造体へのポインター。 |
| ppColSetData | MMC_COLUMN_SET_DATA** | out | 取得した列データを保持する MMC_COLUMN_SET_DATA 構造体へのポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
解説(Remarks)
ユーザーがスコープ項目を選択し、その後、選択された項目のリストビューの列構成データを変更したとします。スナップインが IColumnData::GetColumnConfigData を呼び出してそのリストビューの列構成データを取得すると、ユーザーがその項目を選択解除しているかどうかにかかわらず、このメソッドは新しいデータを返します。
MMC_COLUMN_SET_DATA 構造体とその MMC_COLUMN_DATA 構造体の配列は、 GetColumnConfigData の呼び出し時に MMC によって 1 つの連続したメモリブロックとして割り当てられます。スナップインは、 MMC_COLUMN_SET_DATA へのポインターを指定して CoTaskMemFree を呼び出す必要があります。これによりメモリブロック全体が解放されます。
IColumnData インターフェースのメソッドによって設定および取得されるすべてのデータは、ストリームや記憶媒体ではなく、MMC によってメモリに永続化されます。このデータが .MSC コンソールファイルに保存されるのは、ユーザーが 保存 メニューコマンドをクリックしたときだけです。
IColumnData::SetColumnSortData メソッドを使用すると、スナップインは列セット内の列について、ソート対象の列とソート方向を設定できます。
| pColID | SColumnSetID* | in | ソートデータを設定する列セットの列セット ID を格納する SColumnSetID 構造体へのポインター。 |
| pColSortData | MMC_SORT_SET_DATA* | in | 列セットの列ソートデータを格納する MMC_SORT_SET_DATA 構造体へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
解説(Remarks)
ユーザーがスコープ項目を選択し、その後スナップインが IColumnData::SetColumnSortData を呼び出して、選択された項目のリストビューのソートデータを変更する場合を考えます。MMC は、ユーザーがその項目を選択解除して再度選択した後にのみ、変更をリストビューに適用します。MMC は同じ ID を持つすべての列セットにも変更を適用する点に注意してください。そのため、同じ列セット ID を持つ別の項目をユーザーが選択すると、MMC はその項目にも永続化されたデータを適用します。
MMC 1.2 は単一列のソートのみをサポートします。そのため、ソート列の数が 1 を超える場合、 SetColumnSortData は E_FAIL を返します。
IColumnData インターフェースのメソッドによって設定および取得されるすべてのデータは、ストリームや記憶媒体ではなく、MMC によってメモリに永続化されます。このデータが .msc コンソールファイルに永続化されるのは、ユーザーが 保存 メニューコマンドを選択したときだけです。
IColumnData::GetColumnSortData メソッドを使用すると、スナップインは列セット内の列について、ソート対象の列とソート方向をメモリから取得できます。
| pColID | SColumnSetID* | in | ソートデータを取得する列セットの ID を格納する SColumnSetID 構造体へのポインター。 |
| ppColSortData | MMC_SORT_SET_DATA** | out | 列セットの列ソートデータを格納する MMC_SORT_SET_DATA 構造体へのポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
解説(Remarks)
ユーザーがスコープ項目を選択し、その後、選択された項目のリストビューのソートデータを変更したとします。スナップインが IColumnData::GetColumnSortData を呼び出して同じソートデータを取得すると、ユーザーがその項目を選択解除しているかどうかにかかわらず、このメソッドは新しいデータを返します。
MMC_SORT_SET_DATA 構造体とその MMC_SORT_DATA 構造体の配列は、 GetColumnSortData の呼び出し時に MMC によって 1 つの連続したメモリブロックとして割り当てられます。スナップインは、 MMC_SORT_SET_DATA へのポインターを指定して CoTaskMemFree を呼び出す必要があります。これによりメモリブロック全体が解放されます。
IColumnData インターフェースのメソッドによって設定および取得されるすべてのデータは、ストリームや記憶媒体ではなく、MMC によってメモリに永続化されます。このデータが .msc コンソールファイルに永続化されるのは、ユーザーが 保存 メニューコマンドを選択したときだけです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IColumnData "{547C1354-024D-11D3-A707-00C04F8EF4CB}" #usecom global IColumnData IID_IColumnData "{}" #comfunc global IColumnData_SetColumnConfigData 3 var,var #comfunc global IColumnData_GetColumnConfigData 4 var,var #comfunc global IColumnData_SetColumnSortData 5 var,var #comfunc global IColumnData_GetColumnSortData 6 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IColumnData "{547C1354-024D-11D3-A707-00C04F8EF4CB}" #usecom global IColumnData IID_IColumnData "{}" #comfunc global IColumnData_SetColumnConfigData 3 sptr,sptr #comfunc global IColumnData_GetColumnConfigData 4 sptr,sptr #comfunc global IColumnData_SetColumnSortData 5 sptr,sptr #comfunc global IColumnData_GetColumnSortData 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。