リストビューを用いて、データベースの表示を行っています。
キー番号は表示したくないので、LPARAMに設定し、連動させていますが
リストビューの行番号から連動しているLPARAMの取得方法が判りません。
何か、取得するためのマクロ等があるのでしょうか?
以下はリストビューにデータを登録しているコードになりあます。
BOOL GUI_CONTROL::AddListView(){
LVCOLUMN lvCol;
LVITEM item;
int nIndex,i,k,nCol,nData,nLineCount;
char szBuff[512];
char szTimeBuff[64];
//現在選択されているリストボックスのインデックスを取得する
nIndex = SendMessage(hListBox,LB_GETCURSEL,0,0);
//何も選択されていなければリターン
if(nIndex == LB_ERR){
return false;
}
//インデックスから選択されている素板コードをバッファに保存
SendMessage(hListBox,LB_GETTEXT,nIndex,(LPARAM)szBuff);
//カラムの全消去
for(i = 0;i < ntohs(Result.nShipmentCol);++i){
ListView_DeleteColumn(hList1,0);
}
//カラム位置の初期化
nCol = 0;
//ヘッダ情報の登録
for(i = 0;i < ntohs(Result.nShipmentCol);++i){
//管理番号と素板コード、削除フラグはスルーする
if(i == 0|| i == 1 || i == 8){
continue;
}
lvCol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvCol.fmt = LVCFMT_LEFT;
lvCol.pszText = (char *)lpShipmentHeader->lpStrage[i];
lvCol.cx = 125;
lvCol.iSubItem = nCol;
ListView_InsertColumn(hList1,nCol,&lvCol);
//カラム位置の繰上げ
nCol++;
}
//データ登録の下準備
//実際に登録されているカラムの列数
nData = 0;
//行数
nLineCount = 0;
ListView_DeleteAllItems(hList1);
//在庫情報の登録作業です
for(i = 0;i < ntohs(Result.nShipmentRow);++i){
//素板コードの照合作業、真ならば登録する
if(strncmp(szBuff,(char *)lpShipmentDataBase[i].lpStrage[1],sizeof(szBuff)) == 0){
for(k = 0;k < ntohs(Result.nShipmentCol);++k){
//管理番号と素板コードと削除フラグはスルーする
if(k == 0|| k == 1 || k == 8){
continue;
}else{
//アイテムの設定
if(k == 2 || k == 6){
//バグってる日付の成型を行います
memcpy(szTimeBuff,(char *)lpShipmentDataBase[i].lpStrage[k],10);
szTimeBuff[10] = '\0';
item.pszText = szTimeBuff;
}else{
item.pszText = (char *)lpShipmentDataBase[i].lpStrage[k];
}
item.iItem = nLineCount;
item.iSubItem = nData;
item.lParam = (LPARAM)lpShipmentDataBase[i].lpStrage[0];
if(nData == 0){
//1項目目のみLPARAMを有効にする。2項目目以降に設定するとデータが反映されない
item.mask = LVIF_TEXT | LVIF_PARAM;
ListView_InsertItem(hList1, &item);
}else{
item.mask = LVIF_TEXT;
ListView_SetItem(hList1, &item);
}
//サブアイテム番号(列数の繰上げ)
++nData;
if(nData == nCol){
//行数の繰上げ
++nLineCount;
//列数の初期化
nData = 0;
}
}
}
}
}
return true;
}