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

  • Java developers know that testing code changes can be a huge pain, and waiting for an application to redeploy after a code fix can take an eternity. Wouldn't it be great if you could see your code changes immediately, fine-tune, debug, explore and deploy code without waiting for ages? In this white paper, find out how that's possible with a Java plugin that drastically changes the way you develop, test and run Java applications. Discover the advantages of this plugin, and the changes you can expect to see …

  • Live Event Date: September 19, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT In response to the rising number of data breaches and the regulatory and legal impact that can occur as a result of these incidents, leading analysts at Forrester Research have developed five important design principles that will help security professionals reduce their attack surface and mitigate vulnerabilities. Check out this upcoming eSeminar and join Chris Sherman of Forrester Research to learn how to deal with the influx of new device …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds