レポート表示の時、アイテムの切り替え処理 – プログラミング – Home

レポート表示の時、アイテムの切り替え処...
 
通知
すべてクリア

レポート表示の時、アイテムの切り替え処理


たくろ
 たくろ
(@たくろ)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

VC++6.0 MFC WinXp sp2

CListViewで選択しているアイテムを切り替え(反転)を行いたいのですが、
何故か文字列部分は切り替わるのですが、イメージ(アイコン)部分は切り替わりません。
アイコン表示の時は上手くいきますが、
レポート(詳細モード)の場合は上手くいきません。
何が間違っているのでしょうか。

// 選択の切り換え処理
CListCtrl& ListCtrl = GetListCtrl();
for(int i = 0; i<ListCtrl.GetItemCount(); i++){

// 状態を取得
   if( ListCtrl.GetItemState(i, LVIS_SELECTED) == FALSE ){
ListCtrl.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);// 選択状態
}else{
ListCtrl.SetItemState(i, 0, LVIS_SELECTED);// 選択解除
}
}


引用解決済
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

エクスプローラでも、リストにフォーカスがない状態で
項目を選択すると同じようにアイコンに色がつかないですね。
バグじゃないでしょうか。

というわけで、切り替え処理の前に、
ListCtrl.SetFocus();
としてみるとよいようです。(WinXP)


返信引用
たくろ
 たくろ
(@たくろ)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

dairygoods さん
回答ありがとうございます。

これは仮想リストビューに変更してから、おかしくなりました。
下記の記述にオカシイ箇所がありましたら、指摘してください。

void CCADExplorerView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
int iItemIndex= pItem->iItem;

// 文字を設定
if( pDispInfo->item.mask & LVIF_TEXT ){

// ファイルサイズを取得を文字列に変更
char FileSize[256] = { };
int Size = m_DLNameInfoList[iItemIndex].FileSize / 1000;

// 3桁区切りでカンマを挿入
char AddkanmaFileSize[256] = ;
IntToCommaSeparateString( AddkanmaFileSize , Size);
sprintf(FileSize, %s KB, AddkanmaFileSize);

// ファイルの更新日時を取得
CString FileTime;
FileTime.Format(%04d/%02d/%02d %02d:%02d,
m_DLNameInfoList
[iItemIndex].FileStatus.m_mtime.GetYear(),
m_DLNameInfoList
[iItemIndex].FileStatus.m_mtime.GetMonth(),
m_DLNameInfoList
[iItemIndex].FileStatus.m_mtime.GetDay(),
m_DLNameInfoList
[iItemIndex].FileStatus.m_mtime.GetHour(),
m_DLNameInfoList
[iItemIndex].FileStatus.m_mtime.GetMinute() );

// フォルダモード
switch( pDispInfo->item.iSubItem )
{
case 0 :
strcpy( pDispInfo->item.pszText,
m_DLNameInfoList[iItemIndex].FileName ) ;
break ;
case 1 :
strcpy( pDispInfo->item.pszText,
FileSize ) ;
break ;
case 2 :
strcpy( pDispInfo->item.pszText,
m_DLNameInfoList[iItemIndex].FileExt ) ;
break ;
case 3 :
strcpy( pDispInfo->item.pszText,
FileTime ) ;
break ;
default :
break ;
}
}

// イメージを設定
if ( pDispInfo->item.mask & LVIF_IMAGE ) {

CString FileExt = m_DLNameInfoList[iItemIndex].FileExt;
FileExt.MakeUpper();
for(int i = 0; i < WILDCARD_NUM; i++ ){
if( FileExt == gIconExt[i] ){
pItem->iImage = i;
break;
}
}
}

*pResult = 0;
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました