環境
OS:WIN2000
VC++.NET
度々お世話になります。
CListCtrlで選択した行を一時的に選択不可にする方法を教えて下さい。
EnableWindowの様に扱いたいです。
どなたかご教授お願いします。
EnabelWindowのように関数を呼べばそうなるようなイメージなら
諦めた方が良いと思います。
CListCtrl自体にそういう機能は無かったはず。
全体に対して無効化する事は出来ますけどね。
中身の特定のアイテムだけを選択不可にするには
かなり作りこまないと駄目でしょう。
例えば、ユーザーがアイテムを選択するのを監視して
選択されては困る物が選択されたら強制的に選択を解除するような
プログラムを自分で組まないとできないと思います。
がーっ、また誤字
誤)
> EnabelWindowのように関数を呼べばそうなるようなイメージなら
正)
EnableWindowのように関数を呼べばそうなるようなイメージなら
>PATIOさん
返信ありがとうございます。
やはり作りこむしかないんですね。
それだと時間がかかりすぎるのであきらめます。
ありがとうございました。
敬具
LVN_ITEMCHANGINGあたりを捕捉して、
NMLISTVIEW構造体のiItemやuNewStateで判定して、
CListCtrl::SetItemState()で選択を解除する…とかで出来ませんかね?
# やったコトはないですが。
ちょっと試してみました。
void CListCtrlNoSelDlg::OnLvnItemchangingList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: ここにコントロール通知ハンドラ コードを追加します。
if(pNMLV->iItem == 1 && (pNMLV->uNewState & (LVIS_SELECTED|LVIS_FOCUSED))){
*pResult = TRUE;
} else {
*pResult = 0;
}
}
こんな感じで、フォーカスの設定と選択マークの表示は抑制できましたが…
CListCtrl::GetSelectionMark()では選択されていると返ってきました。
まぁ、見ての通りダイアログでやってみただけなんですが。