• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 656
  • Last Modified:

Problem in Disabling Checkbox in CListCtrl

Hi,
I have created checkbox in CListCtrl using SetExtendedStyle API. I want to know to disable the checkboxes so that user cannot select them.
Bye,
Bharadwaz
0
gbharadwaz
Asked:
gbharadwaz
  • 4
  • 2
  • 2
  • +1
1 Solution
 
ambienceCommented:
you cant do that directly , the check-boxes can only be cleared or set.

If you want to have disabled items etc. this requires custom-drawn or owner-drawn listCtrls i.e. manage the state and draw the checkbox yourself, i suggest custom-draw for this.

You can find samples on how to do that on www.codegur.com and www.codeproject.com
0
 
gilad_noCommented:
You can also set the item state to 0 to hide the check box.

0x0000 - Hide the check box
0x1000 - Cleared check box
0x2000 - Checked check box
0
 
migelCommented:
Hi!
imho the best way is to set State image consists of 3 items
and manually set ItemState with proper state image index
for example:

BOOL IsItemDisabled(HWND hList, int nItem)
{
     int nState = (int)::SendMessage(hList, LVM_GETITEMSTATE, (WPARAM)nItem,
          (LPARAM)LVIS_STATEIMAGEMASK);
     // Return zero if it's not checked, or nonzero otherwise.
     return ((BOOL)(nState >> 12) -1) == 2;
}

BOOL SetDisable(HWND hList, int nItem, BOOL bDisable)
{
     LVITEM lvi;
     lvi.stateMask = LVIS_STATEIMAGEMASK;

     /*
     Since state images are one-based, 1 in this macro turns the check off, and
     2 turns it on.
     */
     lvi.state = INDEXTOSTATEIMAGEMASK((bDisable ?3 : 1));
     return (BOOL) ::SendMessage(hList, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
}
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
ambienceCommented:
migel :
how would you create state images for the control, by default it creates two state images one for set state and one for clear state ????
0
 
migelCommented:
to ambience>>
Why by default??
you can set several state images not only two.
Just not use extended style but use SetImageList (..., LVSIL_STATE);
0
 
gbharadwazAuthor Commented:
Hi Migel,
   I am partially clear but not fully:) Do you mean to say that instead of using SetExtendedStyle I should use SetImageList() API. One more question is where should I invoke the two functions you have told. I am asking this because my list ctrl gets increased or decreased dynamically and I have to see all the check boxes are in disabled state.
0
 
migelCommented:
Hi!
>>Do you mean to say that instead of using SetExtendedStyle I should use SetImageList() API..
completly true
My functions is to API (hwnd as parameter)
I think that deriving class from CListCtrl and embed these functions in the class will be preffered way. Also you can set proper image list in this class without client class frustration :-)
0
 
gbharadwazAuthor Commented:
Thanks..it worked out:)
0
 
migelCommented:
but why B???
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now