Can I have win32 C checkboxes in a listbox control? - c

I have the following dialog:
IDD_REMINDERS DIALOGEX 20, 20, 102, 166
STYLE DS_SETFONT | WS_POPUP | WS_SYSMENU | WS_THICKFRAME
FONT 7, "Small Fonts", 0, 0, 0x0
BEGIN
LISTBOX IDC_REMINDERS_LIST, 1,12,100,152, LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "×",IDC_CLOSE,90,-1,12,11,WS_GROUP | NOT WS_TABSTOP
LTEXT "...", IDC_REMINDERS_CAP, 1,1,75,8
PUSHBUTTON "+", IDC_REMINDERS_NEW, 78,-1,12,11, WS_GROUP | NOT WS_TABSTOP
END
In this dialog I'd like to display checkboxes on the right side.
I was under the impression that calling the following code should add checkboxes to the listbox:
ListView_SetExtendedListViewStyleEx(hWndListView, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES);
Though, I now suspect I may be mixing up listboxes and listviews. Either way, I tried the same ListView_SetExtended call on a listview with the following code in the RC:
CONTROL "",IDC_KEYS,"SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDRAWFIXED | LVS_OWNERDATA | LVS_NOCOLUMNHEADER | WS_TABSTOP,4,64,250,136
Sadly, this listview refused to show checkboxes as well.
Is it possible to have checkboxes in a listbox? (Without going ahead and drawing them yourself. Which will work fine short term, but seems more of a hassle in terms of longer term OS compatibility.)
Can this work if the listbox is set to "owner draw"? (I'm using that due to custom text coloring.)

Related

Tristate CheckBoxes as labels for GroupBox elements in MFC dialog

I am working on this popup dialog and I am at the design stage:
I have three tristate checkboxes at the top and three group boxes with 4 checkboxes in each. The concept is simple:
If all 4 check boxes are ticked then the master checkbox is ticked.
If none of them are ticked then the master one is untickd.
If only 1 to 3 of them are ticked then the master one is set to intermediatery.
The user will be able to tick the master check box to bulk switch on all off all the associated checkboxes.
My question relates to the 3 static group boxes. I want those three lables changed into the 3 tri-state checkboxes as it will look nicer. When I played with WPF i had full control over how the labels looked for groupboxes but whatabout here in a MFC project?
This is the resource in my test project:
IDD_MFCAPPLICATION4_DIALOG DIALOGEX 0, 0, 309, 184
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Assignment Slips"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,199,163,50,14
PUSHBUTTON "Cancel",IDCANCEL,252,163,50,14
CONTROL "Main hall",IDC_CHECK1,"Button",BS_AUTO3STATE | WS_TABSTOP,18,7,43,10
GROUPBOX "Main hall",IDC_STATIC,7,23,94,82
CONTROL "Bible Reading",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,38,59,10
CONTROL "Initial Call",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,53,47,10
CONTROL "First Return Visit",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,67,69,10
CONTROL "Bible Study",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,82,51,10
GROUPBOX "Aux. Class 1",IDC_STATIC,107,23,94,82
CONTROL "Bible Reading",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,38,59,10
CONTROL "Initial Call",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,53,47,10
CONTROL "First Return Visit",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,67,69,10
CONTROL "Bible Study",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,82,51,10
GROUPBOX "Aux. Class 2",IDC_STATIC,207,23,94,82
CONTROL "Bible Reading",IDC_CHECK10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,39,59,10
CONTROL "Initial Call",IDC_CHECK11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,53,47,10
CONTROL "First Return Visit",IDC_CHECK12,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,68,69,10
CONTROL "Bible Study",IDC_CHECK13,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,82,51,10
GROUPBOX "Other",IDC_STATIC,7,108,94,69
CONTROL "Opening Prayer",IDC_CHECK14,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,126,66,10
CONTROL "Closing Prayer",IDC_CHECK15,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,141,62,10
CONTROL "Aux. Class 1",IDC_CHECK18,"Button",BS_AUTO3STATE | WS_TABSTOP,117,7,56,10
CONTROL "Aux. Class 2",IDC_CHECK19,"Button",BS_AUTO3STATE | WS_TABSTOP,217,7,56,10
CONTROL "Congregation Bible Study",IDC_CHECK16,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,17,156,76,17
END
Update
One posibility is to adjust the design style like this:
That is quite clear and avoids the need for a checkbox as the label of the group box. But I would prefer the original approach if at all possible.
Update
Looking at this answer I cameup with a solution:

Win API, How to write text inside a dialog box?

I'm creating a small program of my own on WinAPI, (to practice the WIN API programing)
and I wanted to create an "about us" box, like where it is told who built the program, which version is it and such...
I was able to create the window sucsessfully, though I could only created an empty window..
I was wondering how can I write text in the box?
This is my function that creates the dialog box, where ghInstance is the instance of the window :
void CreateDialogBox(HWND hwnd)
{
CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_TOPMOST, TEXT("DialogClass"), TEXT("About Us"), WS_VISIBLE | WS_SYSMENU | WS_CAPTION , 100, 100, 200, 150, NULL, NULL, ghInstance, NULL);
}
So how can I write inside that empty window some stuff?
Thanks!
This tutorial, provided by Microsoft (MSDN) themselves should come in handy:
http://msdn.microsoft.com/en-us/library/vstudio/bb384843.aspx
Take note of the WM_PAINT section. That's for drawing simple text.
You can also create controls on the window, for example:
C++ Win32 Multiline static label
If you are using MS VC++, you can try editing the pre-made About us in the resource script. Or you hand craft it in a resource script.
DialogboxName DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Us"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON 128,IDC_STATIC,14,14,21,20
LTEXT "Program by you, Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "Copyright (C) 2016",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "OK",IDOK,113,41,50,14,WS_GROUP
END
You can reference Charles Petzold Windows programming book, version 5 of it.

WPF WrapPanel, GroupBox height

I've got a few GroupBoxes containing different number of controls, mostly TextBlocks and TextBoxes, and thereby of different heights.
I generate these GroupBoxes dynamically.
When the WrapPanel is quite narrow you could easily see that the GroupBoxes is of different heights but when the WrapPanel is resized, wider, the layout is rearranged (as it should) but at the same time the GroupBox rearranged gets the same height as the one to its left.
Is there a way to prevent this?
What i want to achieve.
------------ ------------
| BLOCK #1 | | BLOCK #1 |
------------ | |
------------ | |
| BLOCK #2 | | |
| | | |
------------ ------------
Thanks!
//Robert

ScrollViewer around zoom/pan window

ScrollViewer can automatically add horizontal/vertical scrollbars for a given element. Now, I have an image wrapped inside zooming/panning control. I want to add scrollbars to the view containing this zooming control. When the image is fully visible, the scrollbars should be invisible. When 10% of the image is visible, the scrollbar thumb should occopy 1/10 of the scrollbar (standard behavior).
The problem here is that I want the ScrollViewer to occupy the area of the zooming control, and adapt its values using the image inside this control. Perhaps this can be done using some kind of binding to the child of the zooming control? Or maybe using two ScrollBar instances instead?
Zoomed out
+----------------+
| |
| +-------+ |
| | image | |
| +-------+ |
| |
+----------------+
Zoomed in
+----------------+
| |
| image sc <- adapting to visibleHeight/imageHeight
| ro
| ll
| |
+---- scroll ----+ <- adapting to visibleWidth/imageWidth
Sigh. Solved it using a ScrollViewer. I had to set the CanContentScroll to True...

Relative control position in .NET / Visual Studio Editor

I am editing custom control in control editor of Visual Studio 2008
My custom control has datagrid view on the left and buttons on the right. I want my control when resized to keep button size constant always and keep them aligned to right border and only my datagrid control to be resized so that horizontal distances between borders and control remained the same. (See illustration below) I remember there was some feature in WinForms and Editor like anchors or other that would me to do that automatically. I just cannot find it in MSVS.
==============================
| **************** *button* |
| * datagridview * *button* |
| * * *button* |
| **************** |
==============================
=================================
| ******************* *button* |
| * datagridview * *button* |
| * * *button* |
| ******************* |
================================
Anchor the buttons right, top. Then anchor the datagrid left, right and top.
That should do it.
Have a look at
Control.Anchor Property
and
Form Anchor

Resources