您的位置:首页 > 产品设计 > UI/UE

CProperytSheet中的ON_UPDATE_COMMAND_UI

2010-04-07 13:24 369 查看
需要从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;

  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: