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

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

  • When individual departments procure cloud service for their own use, they usually don't consider the hazardous organization-wide implications. Read this paper to learn best practices for setting up an internal, IT-based cloud brokerage function that service the entire organization. Find out how this approach enables you to retain top-down visibility and control of network security and manage the impact of cloud traffic on your WAN.

Most Popular Programming Stories

More for Developers

RSS Feeds

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