Dynamic DockBar Question

Hello!
I was able to get the code from the following github example working in my C++ plugin:

The plugin is using the following code:

enum { IDD = IDD_DIALOG };
CRhinoUiSeparator m_static1;
CButton m_check1;
CButton m_check2;
CButton m_check3;
CButton m_check4;
CRhinoUiSeparator m_static2;
CButton m_check5;
CButton m_check6;
CButton m_check7;
CButton m_check8;
CRhinoUiSeparator m_static3;
CButton m_check9;
CButton m_check10;
CButton m_check11;
CButton m_check12;

BOOL CTabbedDockBarDialog::OnInitDialog() {
if (m_scroller) {
CRect rect;
GetClientRect(rect);
m_scroller->SetDisplaySize(rect);
}
m_Resize.Add(IDC_STATIC1, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK1, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK2, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK3, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK4, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_STATIC2, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK5, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK6, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK7, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK8, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_STATIC3, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK9, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK10, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK11, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
m_Resize.Add(IDC_CHECK12, CRhinoUiDialogItemResizer::resize_lockleft | CRhinoUiDialogItemResizer::resize_lockright);
CRhinoTabbedDockBarDialog::OnInitDialog();
return TRUE;
}

void CTabbedDockBarDialog::DoDataExchange(CDataExchange* pDX) {
CRhinoTabbedDockBarDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC1, m_static1);
DDX_Control(pDX, IDC_CHECK1, m_check1);
DDX_Control(pDX, IDC_CHECK2, m_check2);
DDX_Control(pDX, IDC_CHECK3, m_check3);
DDX_Control(pDX, IDC_CHECK4, m_check4);
DDX_Control(pDX, IDC_STATIC2, m_static2);
DDX_Control(pDX, IDC_CHECK5, m_check5);
DDX_Control(pDX, IDC_CHECK6, m_check6);
DDX_Control(pDX, IDC_CHECK7, m_check7);
DDX_Control(pDX, IDC_CHECK8, m_check8);
DDX_Control(pDX, IDC_STATIC3, m_static3);
DDX_Control(pDX, IDC_CHECK9, m_check9);
DDX_Control(pDX, IDC_CHECK10, m_check10);
DDX_Control(pDX, IDC_CHECK11, m_check11);
DDX_Control(pDX, IDC_CHECK12, m_check12);
}

IDD_DIALOG DIALOGEX 0, 0, 218, 269
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VSCROLL | WS_HSCROLL
FONT 8, “MS Shell Dlg”, 400, 0, 0x1
BEGIN
LTEXT “Section One”, IDC_STATIC1, 7, 7, 193, 8
CONTROL “Check1”, IDC_CHECK1, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 17, 183, 10
CONTROL “Check2”, IDC_CHECK2, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 29, 183, 10
CONTROL “Check3”, IDC_CHECK3, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 41, 183, 10
CONTROL “Check4”, IDC_CHECK4, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 53, 183, 10
LTEXT “Section Two”, IDC_STATIC2, 7, 65, 193, 8
CONTROL “Check5”, IDC_CHECK5, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 75, 183, 10
CONTROL “Check6”, IDC_CHECK6, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 87, 183, 10
CONTROL “Check7”, IDC_CHECK7, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 99, 183, 10
CONTROL “Check8”, IDC_CHECK8, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 111, 183, 10
LTEXT “Section Three”, IDC_STATIC3, 7, 123, 193, 8
CONTROL “Check9”, IDC_CHECK9, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 133, 183, 10
CONTROL “Check10”, IDC_CHECK10, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 145, 183, 10
CONTROL “Check11”, IDC_CHECK11, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 157, 183, 10
CONTROL “Check12”, IDC_CHECK12, “Button”, BS_AUTOCHECKBOX | WS_TABSTOP, 17, 169, 183, 10
LTEXT “Bottom”, IDC_STATIC4, 7, 181, 193, 8, NOT WS_VISIBLE
END

My question is how I could adapt this using wrapper classes or something to generate the dockbar menu dynamically based upon objects in the drawing, with individual options similar to how the dockbar menu for the layers panel works. I want to be able to edit object attributes using the dockbar menu. Are there any specific resources I should check out for this?

Thanks,
Dru