CListCtrlで選択行だけを選択不可にするには? – プログラミング – Home

CListCtrlで選択行だけを選択不...
 
通知
すべてクリア

[解決済] CListCtrlで選択行だけを選択不可にするには?


こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

環境
OS:WIN2000
VC++.NET

度々お世話になります。

CListCtrlで選択した行を一時的に選択不可にする方法を教えて下さい。
EnableWindowの様に扱いたいです。

どなたかご教授お願いします。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

EnabelWindowのように関数を呼べばそうなるようなイメージなら
諦めた方が良いと思います。
CListCtrl自体にそういう機能は無かったはず。
全体に対して無効化する事は出来ますけどね。
中身の特定のアイテムだけを選択不可にするには
かなり作りこまないと駄目でしょう。

例えば、ユーザーがアイテムを選択するのを監視して
選択されては困る物が選択されたら強制的に選択を解除するような
プログラムを自分で組まないとできないと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

がーっ、また誤字

誤)
> EnabelWindowのように関数を呼べばそうなるようなイメージなら

正)
EnableWindowのように関数を呼べばそうなるようなイメージなら


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>PATIOさん
返信ありがとうございます。

やはり作りこむしかないんですね。
それだと時間がかかりすぎるのであきらめます。
ありがとうございました。

敬具


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

LVN_ITEMCHANGINGあたりを捕捉して、
NMLISTVIEW構造体のiItemやuNewStateで判定して、
CListCtrl::SetItemState()で選択を解除する…とかで出来ませんかね?

# やったコトはないですが。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

ちょっと試してみました。

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()では選択されていると返ってきました。
まぁ、見ての通りダイアログでやってみただけなんですが。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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