リストビューのLPARAMの取得方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taketoshi
記事: 222
登録日時: 15年前
住所: 日本国

リストビューのLPARAMの取得方法について

#1

投稿記事 by taketoshi » 14年前

C言語、SDKを使っています。
リストビューを用いて、データベースの表示を行っています。
キー番号は表示したくないので、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;
}


taketoshi
記事: 222
登録日時: 15年前
住所: 日本国

Re: リストビューのLPARAMの取得方法について

#2

投稿記事 by taketoshi » 14年前

ググったところ以下のような形で自己解決致しました。

コード:

		item.mask = LVIF_PARAM|LVIF_TEXT;
		item.iItem = nIndex;
		SendMessage(hList1,LVM_GETITEM,0,(WPARAM)&item);
		wsprintf(szBuff,"%s",item.lParam);
		MessageBox(NULL,szBuff,NULL,MB_OK);
		//LPARAMを取得してくださいねそうしないと先に進みませぬ
		//ws.SetRequest(5,NULL);
		//ws.SendData();

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: リストビューのLPARAMの取得方法について

#3

投稿記事 by ISLe » 14年前

コード:

item.mask = LVIF_PARAM;
item.iItem = (アイテム番号);
item.iSubItem = 0;
ListView_GetItem(hList1, &item);
上記のコードでitem.lParamに取得できます。

#遅かった

taketoshi
記事: 222
登録日時: 15年前
住所: 日本国

Re: リストビューのLPARAMの取得方法について

#4

投稿記事 by taketoshi » 14年前

ISLeさん、前回に引き続きアドバイスありがとうございました。
おかげさまで少しずつ進めております。

閉鎖

“C言語何でも質問掲示板” へ戻る