zoukankan      html  css  js  c++  java
  • 属性页中的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);
  • 相关阅读:
    [LeetCode] 1190. Reverse Substrings Between Each Pair of Parentheses
    [LeetCode] 923. 3Sum With Multiplicity
    [LeetCode] 643. Maximum Average Subarray I
    [LeetCode] 669. Trim a Binary Search Tree
    [LeetCode] 1743. Restore the Array From Adjacent Pairs
    [LeetCode] 888. Fair Candy Swap
    [LeetCode] 1102. Path With Maximum Minimum Value
    [LeetCode] 1631. Path With Minimum Effort
    [LeetCode] 1522. Diameter of N-Ary Tree
    [LeetCode] 1376. Time Needed to Inform All Employees
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330142.html
Copyright © 2011-2022 走看看