リストコントロールは、リソースに対して単一選択として定義されています。チェックボックスのある質問を含むCListCtrl
質問1
は、私は私のCListCtrl
の最初の列のヘッダーにあるチェックボックスを持っていると思います。 OnInitDialog
に私は私がチェックし、アクションと選択アクションが異なる目的のために使用されることを望むので、私は絶対に望んでいない拡張|LVS_EX_AUTOCHECKSELECT
に追加する場合それはヘッダのみのチェックボックスを提示
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
CString s;
s.LoadString(IDS_COLUMN1);
#ifndef HDS_CHECKBOXES
// Copied from Microsoft SDKs\Windows\v7.0A\Include\CommCtrl.h
#define HDS_CHECKBOXES 0x0400
#endif
CHeaderCtrl& header = *m_list.GetHeaderCtrl();
header.ModifyStyle(0, HDS_CHECKBOXES);
#ifndef HDF_CHECKBOX
// Copied from Microsoft SDKs\Windows\v7.0A\Include\CommCtrl.h
#define HDF_CHECKBOX 0x0040
#endif
LVCOLUMN lc = { 0 };
lc.mask = LVCF_FMT |LVCF_WIDTH |LVCF_TEXT | LVCF_SUBITEM;
lc.fmt |= HDF_CHECKBOX;
lc.cx = 96;
lc.pszText = (TCHAR*) (LPCTSTR)s;
m_list.InsertColumn(0, &lc);
を持っています。ときに、ユーザーの確認を変更または項目のチェックを外して
質問は2
私はブールとマークのものを設定する必要があります。しかし、私は、例えば、フォームのロード時にリストを塗りつぶすなど、アイテムを挿入するときにこのアクションを発生させたくないのですが、InsertItem
がOnItemChanged
に "未チェックアクション"をトリガーするので、意図せずにトリガーされます。
それはm_is_inserting
メンバーフラグを持つすべてのインサートを調整するように私を義務づけ:実際のユーザーのチェックを区別するためのより良い方法はあり
m_is_inserting = true;
m_list.InsertItem(i, m_array[i]->GetName());
m_is_inserting = false;
をしてLVN_ITEMCHANGED
ハンドラ
void CMyDialog::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->uChanged & LVIF_STATE)
{
if (pNMListView->uNewState & LVIS_SELECTED)
OnSelect();
else
{
if (pNMListView->iItem != -1)
{
if ((pNMListView->uNewState & LVIS_STATEIMAGEMASK) == 0x1000)
{
if (!m_is_inserting)
{
m_array[pNMListView->iItem]->m_active = false;
SetModified();
}
}
else if ((pNMListView->uNewState & LVIS_STATEIMAGEMASK) == 0x2000)
{
if (!m_is_inserting)
{
m_array[pNMListView->iItem]->m_active = true;
SetModified();
}
}
}
}
}
*pResult = 0;
}
に応じて反応/ InsertItem
の副作用からのアクションの選択を解除しますか?
質問3
チェック/チェックを外して状態を取得するためのより良い象徴的慣習がありますか?マジックナンバー0x1000
と0x2000
は意味がありません!
ありがとうございます。
関連(**質問2 **):http://stackoverflow.com/questions/28582698/differentiate-between-user-click-and-setchecked-in-clistctrl – sergiol