リストコントロールのチェックボックスのクリックを無効にする方法 – プログラミング – Home

リストコントロールのチェックボックスの...
 
通知
すべてクリア

[解決済] リストコントロールのチェックボックスのクリックを無効にする方法


リンゴ
 リンゴ
(@リンゴ)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

リストコントロールのチェックボックスのクリックを無効にする方法で悩んでいます。
ダイアログボックスのリストコントロールへ次のようにチェックボックスをつけています。

DWORD dwStyle = m_lList01.GetExtendedStyle();
dwStyle |= LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
m_lList01.SetExtendedStyle(dwStyle);

ダイアログ描画の際には該当の行へチェックを入れて、クリックを無効にして表示を行い
たいのですが、良い方法が見つかりません。無効時にはチェックをグレー化にするのが望
ましいのですが、クリックの無効を先決に考えています。

  皆様のアドバイス宜しくお願いします

開発環境:WinXP(SP2) VC++6.0 MFC


引用未解決
トピックタグ
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

>該当の行へ
該当の行とは?

>チェックを入れて
誰が?ユーザが?プログラムが?

>クリックを無効にして表示を行いたいのですが、良い方法が見つかりません。
既にチェックされている状態はどうるするのか?

>無効時にはチェックをグレー化にするのが望ましいのですが、クリックの無効を先決に
考えています。
マウス左ボタンクリックを掴まえて、その該当する行ならクリックを受け捨てればいい。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

リンクしておきますね
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200808/08080007.txt


返信引用
リンゴ
 リンゴ
(@リンゴ)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

レスありがとうございます。

>該当の行とは? 
>誰が?ユーザが?プログラムが?
 DBの様なレコードが何件か有り、そのデーターのフラグ条件によりチェックが入ります
 ます。チェックを入れるのはダイアログ描画のタイミングでプログラムが行います。

>既にチェックされている状態はどうるするのか?
 マウスを無効にしてクリックされても消されないようにしたいです。

>マウス左ボタンクリックを掴まえて、その該当する行ならクリックを受け捨てればいい。
 実装方法が分かりません。参考になるソースはないでしょうか?

 重ねてのお願いですが宜しくお願いします。


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

LVN_ITEMCHANGINGについて調べてみてはどうでしょう?
取り値で変更を禁止することもできるっぽいですが。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

ユーザーがチェックをONOFFしないのなら

チェックボタン風のビットマップをON,OFFの二つ用意し
それを状態に合わせて表示する

だけで十分かも


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

> 実装方法が分かりません。参考になるソースはないでしょうか?

ですか。
最も当たり前な方法は「サブクラス化」することです。
SubclassWindow()について調べてください。

サブクラス化できれば、リストコントロールにWM_LBUTTONDOWNを処理
させるかどうかをコードできます。

別な方法として、
LVS_EX_CHECKBOXESを「外して」チェックがらみの部分を
自前でコードするという方法もあります。
もちろんチェックボックス等を自分で描画しなければなりませんので
オーナードローにする必要があるでしょう。


返信引用
リンゴ
 リンゴ
(@リンゴ)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

 レスありがとうございました。

 いろいろ試して見て仲澤サマのサブクラス化で方法で対処しました。

 CListCtrlを規定クラスにCListCtrlSubを作成し、メンバ変数のタイ
プをCListCtrlSubとしました。

 CListCtrlSub内で下記の様に各々のマウスイベントを捕らえてクリッ
クを阻止しました。OnLButtonDown内の様に場合によっては使い分けが可
能となります。

void CListCtrlSub::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_bFlag){
return;
}
CListCtrl::OnLButtonDown(nFlags, point);
}

void CListCtrlSub::OnLButtonDblClk(UINT nFlags, CPoint point)
{
return;
CListCtrl::OnLButtonDblClk(nFlags, point);
}

void CListCtrlSub::OnRButtonDown(UINT nFlags, CPoint point)
{
return;
CListCtrl::OnRButtonDown(nFlags, point);
}

void CListCtrlSub::OnRButtonDblClk(UINT nFlags, CPoint point)
{
return;
CListCtrl::OnRButtonDblClk(nFlags, point);
}

 皆様のおかげで解決をする事が出来ました。

 ありがとうございました。


返信引用
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

OnLButtonDblClk()
OnRButtonDown()
OnRButtonDblClk()

return; で無条件終了するならば、これに続く
CListCtrl::On~ は必要無いですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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