属性页中的ON_UPDATE_COMMAND_UI

         我前面翻译了一篇文章简单的谈了一下 在对话框处理ON_UPDATE_COMMAND_UI 消息。又在 www.codeguru.com上看到在属性页中处理ON_UPDATE_COMMAND_UI 消息的方法和在对话框中稍有不同。两者的处理大体上一样。只是在属性页中还需要一个步骤。
         需要从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消息给它。
          
附: 这里还讨论几个有关属性页的问题

1
   如何在属性表的两个页之间传递数据?
       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;
}

2    如何让属性页具有两行标签?
       从CPropertySheet派生一个自己的类,添加一个PreCreateWindow的处理,然后在调用基类的处理前加如下代码:
      cs.style |= TCS_MULTILINE;

3    如何隐藏属性页的标题栏?
       从CPropertySheet派生一个自己的类,并覆盖OnInitDialog,在转到默认的情况以后,使用ModifyStyle来删除标题栏标志WS_CAPTION。
       ModifyStyle(WS_CAPTION,0);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值