Print Page | Close Window

Ribbon Control on Dialog Box

Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Command Bars
Forum Description: Topics Related to Codejock Command Bars
URL: http://forum.codejock.com/forum_posts.asp?TID=15276
Printed Date: 04 June 2024 at 1:09pm
Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com


Topic: Ribbon Control on Dialog Box
Posted By: EASX
Subject: Ribbon Control on Dialog Box
Date Posted: 30 September 2009 at 11:45pm
Hey I'm trying the trial and when I make the ribbon bar on my dialog box, I create everything in OnInitDialog();. I figure this has something to do with the buttons and everything else on the ribbon bar functioning properly, but I honestly have no clue how I could fix it. When I compile and launch my app, I can click any button, but as soon as I click a button or any sort of control, it all goes grey and I can't click any of them again. Could someone please explain what to do to fix this issue? I imagine its not a big fix, I just can't think of how to do it as I'm completely new to CodeJock and I'm just trying it out.


Please note this is on a dialog, not MDI or SDI.


Edit: Also, when I add the ribbon controls, it adds a lot of extra space to my dialog on the bottom. When I place something at the bottom of the dialog box in the editor and then compile and run, there is a lot of empty space at the bottom. I suppose this is also how I am implementing the code?



Replies:
Posted By: SuperMario
Date Posted: 01 October 2009 at 9:15am
Without seeing your project it is hard to say.  But I can guarantee that it will work, just a matter of seeing what you do wrong.  A few things to try.

Do you handle OnKickIdle?


ON_MESSAGE(WM_KICKIDLE, OnKickIdle)

.....

LRESULT CDialogSampleDlg::OnKickIdle(WPARAM, LPARAM)
{
    if (GetCommandBars()) GetCommandBars()->UpdateCommandBars();
    // If you use status bar
    if (m_wndStatusBar.GetSafeHwnd()) m_wndStatusBar.SendMessage(WM_IDLEUPDATECMDUI, TRUE);
    return 0;
}


As far as the empty space, maybe you need to handle the sizing.


ON_WM_SIZE()

void CDialogSampleDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialogSampleDlgBase::OnSize(nType, cx, cy);
    RepositionControls();
}

void CDialogSampleDlg::RepositionControls()
{
    if (m_bInRepositionControls || !m_bInitDone)
        return;

    CRect rcClientStart;
    CRect rcClientNow;
    GetClientRect(rcClientStart);

    if ((GetStyle() & WS_MINIMIZE) || (rcClientStart.IsRectEmpty()))
        return;

    m_bInRepositionControls = TRUE;

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);

    CRect rcBorders(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top,  rcClientStart.right - rcClientNow.right,
        rcClientStart.bottom - rcClientNow.bottom);

    if (rcBorders != m_rcBorders)
    {
       
        CPoint ptOffset(rcBorders.left - m_rcBorders.left, rcBorders.top - m_rcBorders.top);
        CSize szOffset(rcBorders.left + rcBorders.right - m_rcBorders.left - m_rcBorders.right,
            rcBorders.top + rcBorders.bottom - m_rcBorders.top - m_rcBorders.bottom);

        CRect rcWindow;
        GetWindowRect(rcWindow);
        rcWindow.BottomRight() += szOffset;

        Offset(ptOffset);
        m_szWindow += szOffset;
        m_szMin += szOffset;
   
        MoveWindow(rcWindow, TRUE);
    }

    m_rcBorders = rcBorders;

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

    m_bInRepositionControls = FALSE;
}




Posted By: EASX
Date Posted: 01 October 2009 at 11:58am
Hey SuperMario, thank you for your response!

I have attached my project so you can take a look at it, since you said its hard to say without seeing the project. Last night I was up changing stuff around, trying to figure how to fix it, so there may be a few issues somewhere in the code. But I just tried to compile and it compiled just fine. I couldn't figure how to add the code you suggested (when I tried adding it, it wouldn't work). So I figured giving you the source would probably be best.



Posted By: SuperMario
Date Posted: 01 October 2009 at 3:35pm
Haven't had time to look at the sample, here is an old one I dug up, I think all you need to do is update the rc2 file with code from a current ribbon sample.

http://forum.codejock.com/uploads/20080917_022718_ds.zip


Posted By: EASX
Date Posted: 01 October 2009 at 6:07pm
Originally posted by SuperMario SuperMario wrote:

Haven't had time to look at the sample, here is an old one I dug up, I think all you need to do is update the rc2 file with code from a current ribbon sample.

http://forum.codejock.com/uploads/20080917_022718_ds.zip


I'm getting the exact same issue with that one. And when I attempt to add a 2nd tab and write anything in it, it doesn't appear until I minimize the ribbon control then click on the tab (in which case its still locked out, and it ONLY shows when the ribbon control is supposed to be hidden).


Edit: Everything is now drawing PERFECTLY, but I still can't click it, it keeps everything locked out. And the size issue has been corrected as well.


Posted By: EASX
Date Posted: 04 October 2009 at 4:30pm
Sorry for the double post.


Its all drawing perfectly. Now the issue is when I click on the checkbox, it auto-unchecks itself.

When I use the code:

void CDialogSampleDlg::OnCheckbox (UINT nID)
{
       m_bCheckbox[nID - ID_BUTTON_CHECKBOX1] ^= 1;
}


the checkbox's all automatically uncheck themselves (except 3... which is extremely random). And when I use the code:

void CDialogSampleDlg::OnCheckbox (UINT nID)
{
       m_bCheckbox[nID - ID_BUTTON_CHECKBOX1] = 1;
}


then the checkbox stays clicked no matter what (of course, since it equals 1, I just did this to show something is wrong within this function).


I have even tried something like this:

void CDialogSampleDlg::OnCheckbox ()
{
       m_bCheckboxTest ^= 1;
}


and used ON_COMMAND and ON_UPDATE_COMMAND_UI instead (for the OnUpdateCheckbox function). But the same issue occurs. Do you think you may know what is the issue is?

I've also tried:

void CDialogSampleDlg::OnCheckbox ()
{
     if (  m_bCheckboxTest = 0 )
         m_bCheckboxTest = 1;
    else
         m_bCheckboxTest = 0;
}



But again, it doesn't stay checked. Is this just a bug and CodeJock Ribbon controls shouldn't be used on dialog boxes?


Posted By: SuperMario
Date Posted: 05 October 2009 at 9:13am
I don't see where you update the command:

From header:
void OnUpdateViewShowHide(CCmdUI* pCmdUI);
void OnViewShowHide(UINT nID);
BOOL m_bOptions[6];

Source:
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_RULER, ID_VIEW_THUMBNAILS, OnUpdateViewShowHide)
ON_COMMAND_RANGE(ID_VIEW_RULER, ID_VIEW_THUMBNAILS, OnViewShowHide)

ZeroMemory(&m_bOptions, sizeof(m_bOptions));

void CMainFrame::OnViewShowHide(UINT nID)
{
    m_bOptions[nID - ID_VIEW_RULER] ^= 1;
}

void CDialogSampleDlg::OnUpdateViewShowHide(CCmdUI* pCmdUI)
{
    pCmdUI->SetCheck(m_bOptions[pCmdUI->m_nID - ID_VIEW_RULER] ? TRUE : FALSE);

}

If that don't he;[ post your sample again and we will fix it.


Posted By: EASX
Date Posted: 06 October 2009 at 2:26am
Ok its fixed. Thank you! I was forgetting the "? TRUE : FALSE" and the ZeroMemory.

Now one last question ( I think ), when I try to do anything like:

if ( bCheckbox = TRUE )
{
       // Code in here
}


It doesn't work and the code messes up again. Where can I add the code to make my app do something when the checkbox is checked? And I'm actually using:

ON_COMMAND

and
ON_UPDATE_COMMAND_UI


for a single checkbox.

My functions look like:

void CDialogSampleDlg::OnViewShowHide ( )
{
    bCheckbox ^= 1;
}


and

void CDialogSampleDlg::OnUpdateViewShowHide ( CCmdUI* pCmdUI )
{
    pCmdUI->SetCheck ( bCheckbox ? TRUE : FALSE );
}


So how/where would I add code to make it do something when checked? I know I can't put it in OnViewShowHide or OnUpdateViewShowHide, as it messes up and the checkbox doesn't operate properly after that. And when I tried putting the code in OnInitDialog, it of course didn't work. But I was trying any options I had.

Also, I put ZeroMemory in my OnInitDialog. It works, but is that where you wanted me to put it?


Posted By: Oleg
Date Posted: 12 October 2009 at 12:39pm

You need

 
if ( bCheckbox == TRUE )
{
       // Code in here
}
 
instead of
 
if ( bCheckbox = TRUE )
{
       // Code in here
}


-------------
Oleg, Support Team
CODEJOCK SOFTWARE SOLUTIONS


Posted By: EASX
Date Posted: 12 October 2009 at 3:07pm
Alright thanks, it works perfectly... I felt like the answer was right in front of me. I feel so foolish 



Print Page | Close Window

Forum Software by Web Wiz Forums® version 12.04 - http://www.webwizforums.com
Copyright ©2001-2021 Web Wiz Ltd. - https://www.webwiz.net