zoukankan      html  css  js  c++  java
  • 属性页之间交换数据

            我在前面的文章属性页中的ON_UPDATE_COMMAND_UI 中提到了利用PSM_QUERYSIBLINGS来实现属性页之间数据的交换。在这里我把有关的问题再具体的说明一下,

            如果想知道怎样在Property Sheet的Property Page之间用PSM_QUERYSIBLINGS来交换数据,首先要看看函数CPropertyPage::QuerySiblings,实现如下:

    LRESULT CPropertyPage::QuerySiblings(WPARAM wParam, LPARAM lParam)
    {
       //先判断父窗口是否创建
       ASSERT(::IsWindow(m_hWnd));
       ASSERT(GetParent() != NULL);
       //向父窗口发送PSM_QUERYSIBLINGS消息
       return GetParent()->SendMessage(PSM_QUERYSIBLINGS, wParam, lParam);
    }
            我们发现,CPropertyPage::QuerySiblings函数的功能就是向父窗口发送PSM_QUERYSIBLINGS消息,而Property Sheet对PSM_QUERYSIBLINGS消息的默认处理就是发送PSM_QUERYSIBLINGS到每个Propperty Page,所以在每个Property Page里,我们都需要建立一个消息映射来捕捉PSM_QUERYSIBLINGS消息,同时添加消息处理函数。

    在CPropertyPage的派生类的.h文件里添加:
    //{{AFX_MSG(...)
    .....
    //}}AFX_MSG
    afx_msg LRESULT OnQuerySiblings(WPARAM wParam,LPARAM lParam);
    DECLARE_MESSAGE_MAP()

    在CPropertyPage的派生类的.cpp文件里添加:
    BEGIN_MESSAGE_MAP(CMyPropertyPage, CPropertyPage)
       ON_MESSAGE(PSM_QUERYSIBLINGS, OnQuerySiblings)
    END_MESSAGE_MAP()

    最后添加消息函数的实现:
    LRESULT CMyPropertyPage::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
    {
       // 在这里添加自己需要的额外处理
       return 0; // 函数返回任何值,返回0时就表示这个消息不再传递给其他的Property Page
    }

            如果想在父窗口Property Sheet中处理这个消息,同样在CMyPropertySheet类里添加对PSM_QUERYSIBLINGS消息的处理。但是在最后函数返回的时候一定要是函数Default(),否则就不能调用默认的处理行为。
    LRESULT CMyPropertySheet::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
    {
       // 在这里添加自己需要的额外处理
       return Default();
    }
            如果需要修改PSM_QUERYSIBLINGS消息的参数wParam和lParam的值, 同时发送改变的值到Property Page, 那么就必须要自己写代码发送PSM_QUERYSIBLINGS消息到每个Property Page.

    LRESULT CMyPropertySheet::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
    {
       // 改变wParam/lParam的值
       int nPages = GetPageCount();  //得到PropertyPage的个数
       LRESULT result = 0;
       //循环发送PSM_QUERYSIBLINGS消息到每个Property Page
       for (int page = 0; page < nPages && result == 0; ++page)
          result = GetPage(page)->SendMessage(PSM_QUERYSIBLINGS, wParam, lParam);
       return result;
    }

  • 相关阅读:
    hdu 4396(spfs/二维最短路)
    hdu 4360(最短路变形)
    hdu 3501(欧拉函数的应用)
    bnu 4359(数位dp)
    用Hermite插值方法估计积分值
    虞旦盛老师 的《数学分析续》课件
    数值积分中的梯形法则
    数值积分中的梯形法则
    辛普森三八律
    利用自然数的标准分解证明可数集合的所有有限子集形成的集合是可数集
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330136.html
Copyright © 2011-2022 走看看