Outlook Add-in(COM加载项)技术指南
Revision History:
| 
              
                
                  Version 
          
                                     | 
              
                
                  Date 
          
                   | 
              
                
                  Creator 
          
                   | 
              
                
                  Description 
          
                   | 
| 
                             | 
               | 
              
                郑昀
              
              
                 | 
              
                草稿
              
              
                 | 
      
        
          
            
              
                2.3.2
              
            
           
          
            
              .
            
            
              
              
            
          
          
            
              g_oForwardBHandler_Click
            
          
          
            
              事件
            
          
          
          
          
            
             
          
        
      
    
    这个按钮的名称是“转发”.
      
        
      
        这个对话框中的内容将根据您选中的上下文而定,更详细内容参见下面章节。简
        
          单的说,我们将根据您选中的项是邮件,还是便笺,或者日程,或者联系人,智能显示发送内容。
        
      
      
        
      
        
      
        “联系人列表”将从您的
      
      
        Outlook
      
      
        联系人中读取。
      
      
        
      
        
      
        
      
        第一个问题,如何确定当前用户选中的项是什么类型,邮件,还是联系人?
      
      
        
      
        首先我们通过
      
      
        
      
        
          Set oSelection = g_oExplorer.Selection 
      
          
      
        得到当前用户所选择的项。
      
      
        
      
        如果
      
      
        
          oSelection
        
      
      
        是
      
      
        
          Nothing
        
      
      
        ,那么表明用户没有选中任何东西。
      
      
        
      
        然后,用
      
      
        
      
        
          For Each oItem In oSelection 
      
          
      
        遍历这个
      
      
        Selection
      
      
        集合。这个集合中的每一个对象都应该是一个
      
      
        Item
      
      
        对象。我们可以通过这个
      
      
        Item
      
      
        对象的“
      
      
        MessageClass
      
      
        ”属性获知它是什么。它可能是:
      
      
        
      
        
          Ø
          
                     
          
        
      
      
        
          IPM.Note
          
                        
          
        
      
      
        
          邮件
        
      
      
        
          
      
        
          Ø
          
                     
          
        
      
      
        
          IPM.Contact
          
                          
          
        
      
      
        
          联系人
        
      
      
        
          
      
        
          Ø
          
                     
          
        
      
      
        
          IPM.StickyNote
          
              
          
        
      
      
        
          便笺
        
      
      
        
          
      
        
          Ø
          
                     
          
        
      
      
        
          IPM.Appointment
          
                 
          
        
      
      
        
          日程
        
      
      
        
          
      
        
      
        对于不同类型
      
      
        Item
      
      
        对象,我们获取它的不同属性。
      
      
        
      
        代码如下所示:
      
      
        
| 
              
                ' ------------------------------------------------------------------ 
         
                 
              
                
                      
                
                ' 
         
                 
              
                
                      
                
                ' 
              
              
                如果选中了一项:
              
              
                 
              
                
                      
                
                '
                
                     
                
              
              
                那么首先判断是否是一封邮件,即
              
              
                oItem.MessageClass
              
              
                是
              
              
                "IPM.Note" 
         
                 
              
                
                      
                
                ' 
         
                 
              
                
                      
                
                For Each oItem In oSelection 
         
                 
              
                
                         
                
                
                  
                     
                  
                  If oItem.MessageClass = "IPM.Note" Then 
          
                   
              
                
                              
                
                 
              
                
                              
                
                ' get the current mail item 
         
                 
              
                
                            
                
                
                    
                
                Dim oCurMail As Outlook.MailItem 
         
                 
              
                
                              
                
                Set oCurMail = oItem 
         
                 
              
                
                              
                
                 
              
                
                              
                
                szContent = "
              
              
                主题:
              
              
                " & oCurMail.Subject & vbCrLf 
         
                 
              
                
                              
                
              
              
                
                              
                
                 
              
                
                          
                
                '
                
                     
                
              
              
                那么其次判断是否是一个联系人,即
              
              
                oItem.MessageClass
              
              
                是
              
              
                "IPM.Contact" 
         
                 
              
                
                         
                
                
                  
                     
                  
                  ElseIf oItem.MessageClass = "IPM.Contact" Then 
          
                   
              
                
                              
                
                 
              
                
                              
                
                ' get the current mail item 
         
                 
              
                
                              
                
                Dim oCurContact As Outlook.ContactItem 
         
                 
              
                
                   
                
                
                             
                
                Set oCurContact = oItem 
         
                 
              
                
                              
                
                 
              
                
                              
                
              
              
                
                              
                
                 
              
                
                          
                
                '
                
                     
                
              
              
                那么其次判断是否是一个便笺,即
              
              
                oItem.MessageClass
              
              
                是
              
              
                "IPM.StickyNote" 
         
                 
              
                
                        
                
                
                  
                      
                  
                  ElseIf oItem.MessageClass = "IPM.StickyNote" Then 
          
                   
              
                
                              
                
                 
              
                
                              
                
                ' get the current note item 
         
                 
              
                
                              
                
                Dim oCurNote As Outlook.NoteItem 
         
                 
              
                
                              
                
                Set oCurNote = oItem 
         
                 
              
                
                              
                
                 
              
                
                              
                
              
              
                
                              
                
                 
              
                
                          
                
                '
                
                     
                
              
              
                那么其次判断是否是一个日程,即
              
              
                oItem.MessageClass
              
              
                是
              
              
                "IPM.Appointment" 
         
                 
              
                
                         
                
                
                  
                     
                  
                  ElseIf oItem.MessageClass = "IPM.Appointment" Then 
          
                   
              
                
                              
                
                 
              
                
                              
                
                ' get the current appointment item 
         
                 
              
                
                              
                
                Dim oCurAppo As Outlook.AppointmentItem 
         
                 
              
                
                              
                
                Set oCurAppo = oItem 
         
                 
              
                
                          
                
                
                      
                
                 
              
                
                             
                
              
              
                End If 
         
                 
              
                
                          
                
                 
              
                
                      
                
                Next 
         
                 | 
      
        
      
        
          2.4.
        
      
      
        
          处理属性页事件
        
      
      
      
      
        
         
      
    
    在 VB 中,我们需要编写 NameSpace 对象和 Application 对象的 OptionsPageAdd 事件,来增加一个我们自定制的属性页,如下所示:
      
      
      
        
      
      
      
        
          
            
              2.4.1
            
          
         
        
          
            .
          
          
            
            
          
        
        
          
            g_oNS_OptionsPagesAdd
          
        
        
          
            事件
          
        
        
        
        
          
           
        
      
    
    
      
        它隶属于
      
      
        NameSpace
      
      
        对象。当用户单击我们正在监控的名称区的文件夹,然后选择了“属性”时,将触发
      
      
        NameSpace
      
      
        对象的
      
      
        OptionPagesAdd
      
      
        事件。
      
      
        
      
        本事件有两个参数,含义是:
      
      
        
      
        
          n
          
                     
          
        
      
      
        Pages
        
                     
        
      
      
        是
      
      
        Outlook
      
      
        属性页的一个集合;
      
      
        
      
        
          n
          
                     
          
        
      
      
        Folder
        
                     
        
      
      
        它是用户正试图检索其属性的文件夹。
      
      
        
      
        
      
        首先,通过调用
      
      
        
      
        
          Set oNewPage = CreateObject("TomosoftP.AdminPage") 
      
          
      
        创建对象,这是一个我们编写的
      
      
        ActiveX
      
      
        控件,实际上就是添加到
      
      
        PropertyPages
      
      
        集合中的子例程的属性页。
      
      
        
      
        
      
        其次,为我们创建的属性页传递默认数值。
      
      
        
      
        然后,通过把自身对象的引用进行:
      
      
        
      
        
          oNewPage.oAdmin = Me 
      
          
      
        将我们加载项的对象自身传递给新的属性页,因为这样才可以,当属性页上的属性被更改之后,允许
      
      
        ActiveX
      
      
        控件回调到加载项中。
      
      
        
      
        
      
        最后,通过
      
      
        
      
        
          Pages.Add oNewPage 
      
          
      
        将新的页面添加到
      
      
        PropertyPages
      
      
        集合中。
      
      
        Pages
      
      
        是输入参数。
      
      
        
      
        [
      
      
        版权声明:
      
      
        
      
        第二章部分文字引用自《
      
      
        Programming Microsoft Outlook and Exchange
      
      
        》一书,该书作者
      
      
        Thomas Rizzo
      
      
        ,特此声明
      
      
        ] 
     
        
      
        
      
        
          
            
              Disclaimers
            
          
          
            :
          
        
        
          
| 
              
                
                  Programmer’s Blog List
                
              
              
                
                  :
                
              
              
                 | 
| 
              
                                 | 
| 
              
                
                  
                    [MVPLeader]
                  
                  
                    Grace Zhang
                  
                   | 
| 
              
                 | 
      
        
          本文档仅供参考。本文档所包含的信息代表了在发布之日,
        
        
          
            
              zhengyun
            
          
        
        
          对所讨论问题的当前看法,
        
        
          
            
              zhengyun
            
          
        
        
          不保证所给信息在发布之日以后的准确性。
        
        
          
      
        
        
        
          
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12757


 
					 
					