Using ON_UPDATE_COMMAND_UI in Property Pages

Using ON_UPDATE_COMMAND_UI message maps in property pages is the same as in dialogs except for one extra step required.
You need to derive a class from CPropertySheet and intercept the WM_KICKIDLE messages.

1. Use class wizard to create a new class called CMyPropSheet with a base class of CPropertSheet.
2. In the header add the message function. afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM, LPARAM);
3. In the source file #include afxpriv.h
4. Add the message map ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
5. Implement the function.

LRESULT CMyPropSheet::OnKickIdle(WPARAM, LPARAM)
{
	SendMessageToDescendants(WM_WM_KICKIDLE, 0, 0, FALSE, FALSE);
	return 0;
}

The property sheet now passes all WM_KICKIDLE message to its property pages.

In the property page class, just add a message map for WM_KICKIDLE and call UpdateDialogControls.

LRESULT CMyPropPage::OnKickIdle(WPARAM, LPARAM)
{
	UpdateDialogControls(this, FALSE);
	return 0L;
}

Then all you need is ON_UPDATE_COMMAND_UI message maps.

P.S. This does not work for modeless property sheets. You need to trap the WM_IDLEUPDATECMDUI message in the property sheet's owner window and send it WK_KICKIDLE messages.

Date Posted: 08/13/98



Comments

  • Perfect! I looked far and wide for this.

    Posted by Legacy on 02/01/2002 12:00am

    Originally posted by: Zhiyong He

    Thanks very much.

    Reply
  • Thanks Tim!

    Posted by Legacy on 03/18/2001 12:00am

    Originally posted by: Artem

    /

    Reply
  • great! but why ContinueModal doesn't work?

    Posted by Legacy on 12/24/1999 12:00am

    Originally posted by: Xiang

    Just what i want! but why overriding ContinueModal() doesn't work? which works well in dlg based app. OnkickIdle works too there. I think the key is sending msg to propertypage

    Reply
  • A small change

    Posted by Legacy on 08/01/1999 12:00am

    Originally posted by: Jonathan Schafer

    I too have used this method.  However, instead of use SendMessageToDescendents, I use 
    
    

    CPropertyPage* pActivePage=GetActivePage();
    if (NULL==pActivePage)
    return lParam <= 2;

    return pActivePage->SendMessage(WM_KICKIDLE, wParam, lParam);

    This way, I only send the message to the active page, as it is the only one I'm interested in updating.

    Reply
  • Great!

    Posted by Legacy on 07/09/1999 12:00am

    Originally posted by: Ernie Cooper

    This was exactly what I was looking for. I have the "MFC Answer Book" which describes how to do it for dialogs but not for property sheets.

    Your post gets me what I need, thanks.

    Ernie Cooper

    Reply
  • Fantastic! Just what I was looking for.

    Posted by Legacy on 05/07/1999 12:00am

    Originally posted by: Whitney Kew

    Title says it all - this code was exactly what I was looking for. Good job, and thanks!

    Reply
  • Few typos

    Posted by Legacy on 03/22/1999 12:00am

    Originally posted by: Tim Lewis

    I think it should be OnKickIdle instead of OnIdleUpdateCommandUI. Also, should be WM_KICKIDLE instead of WM_WM_KICKIDLE.

    Picky, I know, but...

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: July 22, 2015 @ 2:00 p.m. ET / 11:00 a.m. PT Today's increasingly mobile workforce creates new challenges for organizations that rely heavily on collaboration. Businesses need to be both secure and collaborative, and they can't sacrifice one over the other. The plethora of devices and clouds used by mobile employees only complicates these challenges. Attend this eSeminar and learn how your business can enable mobile access to files from anywhere while it helps to maintain information …

  • Bonita BPM 7 is here! And for you, an in-depth tour of its innovation. In this webinar, we'll guide you through the brand-new features of this release and demonstrate them live. You will: Discover how business application implementation and maintenance is now even easier, with decoupling of process logic, business data and user interface Learn how to create "living applications" for business processes which present business data in custom views We recommend that you watch the half-hour recording of our …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date