Click here to Skip to main content
Licence CPOL
First Posted 17 Jul 2004
Views 43,983
Bookmarked 18 times

Using the PSM_QUERYSIBLINGS message

By | 17 Jul 2004 | Article
Explains how to use the PSM_QUERYSIBLINGS message to share data between pages on a property sheet.

Introduction

The idea for this article came from a query in the VC++ forum. I hope someone does find this useful.

How to use PSM_QUERYSIBLINGS

If you want to know how to use the PSM_QUERYSIBLINGS message to send data between pages on a property sheet, the first step is to look at the CPropertyPage::QuerySiblings function.

LRESULT CPropertyPage::QuerySiblings(WPARAM wParam, LPARAM lParam)
{
   ASSERT(::IsWindow(m_hWnd));
   ASSERT(GetParent() != NULL);

   return GetParent()->SendMessage(PSM_QUERYSIBLINGS, wParam, lParam);
}

You will see all it does is sends a PSM_QUERYSIBLINGS message to the parent CPropertySheet. The property sheet's default behavior is to relay the PSM_QUERYSIBLINGS message to all of its child pages. So for each page, you would set up a message map entry to catch the PSM_QUERYSIBLINGS message, and add the function to handle it.

BEGIN_MESSAGE_MAP(CMyPropertyPage, CPropertyPage)
   ON_MESSAGE(PSM_QUERYSIBLINGS, OnQuerySiblings)
END_MESSAGE_MAP()

...

LRESULT CMyPropertyPage1::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
{
   // Do whatever you want done here. The wParam and lParam
   // parameters will have the values you specified in the
   // call to CPropertyPage::QuerySiblings()

   return 0; // returning anything but 0 stops the PSM_QUERYSIBLINGS
             // message from being sent to any more pages.
}

If you want the property sheet to handle the message, you would set up the sheet's message map to also catch the PSM_QUERYSIBLINGS message. Just be sure to call Default() so that the default handler gets called.

LRESULT CMyPropertySheet::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
{
   // Do what ever you want on the property sheet when the PSM_QUERYSIBLINGS
   // message is being handled. The wParam and lParam parameters will have
   // the values you specified in the call to CPropertyPage::QuerySiblings()

   return Default();
}

If you want to change the wParam and lParam values when your sheet handles the message, and pass the changed values onto the property pages, you will have to send the PSM_QUERYSIBLINGS message to each window yourself.

LRESULT CMyPropertySheet::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
{
   // change the wParam and/or lParam values

   int nPages = GetPageCount();
   LRESULT result = 0;
   for (int page = 0; page < nPages && result == 0; ++page)
      result = GetPage(page)->SendMessage(PSM_QUERYSIBLINGS, wParam, lParam);

   return result;
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

PJ Arends



Canada Canada

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionDynamically added pages don't receive message PinmemberMike Pulice13:03 19 Sep '05  
GeneralRefreshing property pages Pinmembermonimicki22:59 30 Nov '04  
GeneralNote: Transfering CStrings PinmemberColinDavies13:40 18 Jul '04  
GeneralRe: Note: Transfering CStrings PinmemberSteve Mayfield12:31 19 Jul '04  
GeneralRe: Note: Transfering CStrings PinmemberBlake Miller4:47 20 Jul '04  
Generalaltering message parameters PinmemberPaolo Messina6:45 18 Jul '04  
GeneralRe: altering message parameters PinmemberPJ Arends9:00 18 Jul '04  
GeneralBelieve me it is useful. PinmemberColinDavies20:28 17 Jul '04  
GeneralRe: Believe me it is useful. PinmemberPJ Arends20:33 17 Jul '04  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120517.1 | Last Updated 18 Jul 2004
Article Copyright 2004 by PJ Arends
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid