CProperytSheet中的ON_UPDATE_COMMAND_UI

来源:互联网 发布:windows日程提醒软件 编辑:程序博客网 时间:2024/06/06 09:20

需要从CPropertySheet派生类,并拦截消息WM_KICKIDLE。
  1、利用Class Wizard常见一个新类CMyPropSheet,其基类为CPropertySheet。
  2、在头文件中添加消息函数:
   afx_msg LRESULT OnKickIdle(WPARAM wParam, LPARAM lParam);
  3、在源文件中包含afxpiv.h
  4、添加消息映射 ON_MESSAGE(WM_KICKIDLE, OnKickIdle);
  5、实现函数
  LRESULT CMyPropSheet::OnKickIdle(WPARAM, LPARAM)
  {
   SendMessgeToDescendants(WM_KICKIDLG, 0, 0, FALSE, FALSE);
   return 0;
  }
  属性表现在将所有的WM_KICKIDLE消息传递给属性页,在属性页类中,添加WM_KICKIDLE的消息映射,并调用UpdateDialogjControls
  LRESULT CMyPropPage::OnKickIdle(WPARAM, LPARAM)
  {
   UpdateDialogjControls(this,FALSE);
   return 0;
  }
   接下来就是和对话框类似的处理ON_UPDATE_COMMAND_UI 消息映射。
   对无模式属性表不起作用,需要在属性表的所有窗口中处理WM_IDLEUPDATECMDUI消息,并发送WM_KICKIDLE消息给它。
  
  如何在属性表的两个页之间传递数据?
   CPropertyPage有一个成员函数QuerySiblings(WPARAM, LPARAM)。应用程序可以使用这个函数。QuerySiblings生成一条PSM_QUERYSIBLINGS消息,它传递给所有的兄弟,也就是属性表上的其他属性页。
   一般可创建一个所有页可见的枚举,如:
  enum{QUERY_MY_STRING, QUERY_SOMETHING_ELSE,.......}
  然后,在一个属性页需要其他属性页中的信息时,使用代码:
  CString myString;
  if(lL == QuerySiblings(QUERY_MY_STRING,(LPARAM)&myString))
  {
   ....//获取字符串
  }
  提供字符串的页处理PSM_QUERYSIBLINGS消息:
  LRESULT CPageThatHasString::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
  {
   if(QUERY_MY_STRING == wParam)
   {
   *((CString *)lParam) = _T(“Test String“);
   return 1L;
   }
   else
   return 0L;
  }

原创粉丝点击