⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch10.htm

📁 MAPI__SAPI__TAPI
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl = Null<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = False <br>
  &nbsp;&nbsp;&nbsp;&nbsp;Else<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;gnIndentlevel = 0<br>
  &nbsp;&nbsp;&nbsp;&nbsp;cStoreID = &quot;&quot;<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' get collection of information stores <br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objInfoStoreColl = objSession.InfoStores <br>
  &nbsp;&nbsp;&nbsp;&nbsp;nStoreCount = objInfoStoreColl.Count<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' walk through all stores to get folders <br>
  &nbsp;&nbsp;&nbsp;&nbsp;For nIter = 1 To nStoreCount<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFldrCnt = iFldrCnt + 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim Preserve FolderRec(iFldrCnt)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).StoreID = 
  objInfoStoreColl.Item(nIter).ID<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).FolderID = 
  &quot;&quot; ' no folder for a store!<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).Name = 
  objInfoStoreColl.Item(nIter).Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cStoreID = FolderRec(iFldrCnt).StoreID ' 
  hold this for the other folders<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' add to display control<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If bLoadCtrl = True Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl.AddItem 
  FolderRec(iFldrCnt).Name ' add to display<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' point to top of store and start loading<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set objRootFolder = 
  objInfoStoreColl.Item(nIter).RootFolder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set objFolderColl = objRootFolder.Folders<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set lobjFolders = objFolderColl<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoadFolder lobjFolders, ctrl<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gnIndentlevel = 0<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Next nIter<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Sub</font></tt> </p>
</blockquote>

<hr>

<p>You'll see that the routine in Listing 10.3 walks through all the attached message 
stores and calls the <tt><font FACE="Courier">LoadFolders</font></tt> routine to actually 
collect all the folders in a message store. This routine also allows you to pass an option 
list control (list box, combo box, or outline control). The routine will use this control 
to build an onscreen pick list of the available folders. </p>

<p>Now add the <tt><font FACE="Courier">LoadFolders</font></tt> routine from Listing 10.4 
to your project. </p>

<hr>

<blockquote>
  <b><p>Listing 10.4. Adding the <tt><font FACE="Courier">LoadFolders</font></tt> routine.<br>
  </b></p>
</blockquote>

<blockquote>
  <tt><font FACE="Courier"><p>Sub LoadFolder(aFolders As Object, Optional ctrl As Variant)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' look for folders in the collection<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim mobjFolder As Object<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim mFolderCol As Object<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim bLoadCtrl As Boolean<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;gnIndentlevel = gnIndentlevel + 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If IsMissing(ctrl) Or IsNull(ctrl) Then <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = False <br>
  &nbsp;&nbsp;&nbsp;&nbsp;Else<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set mobjFolder = aFolders.GetFirst<br>
  &nbsp;&nbsp;&nbsp;&nbsp;While Not mobjFolder Is Nothing<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFldrCnt = iFldrCnt + 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim Preserve FolderRec(iFldrCnt)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).StoreID = cStoreID<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).FolderID = 
  mobjFolder.ID<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderRec(iFldrCnt).Name = mobjFolder.Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' optionally load screen display<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If bLoadCtrl = True Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl.AddItem 
  Space(gnIndentlevel * 5) &amp; FolderRec(iFldrCnt).Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' look for nested folders<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set mFolderCol = mobjFolder.Folders<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoadFolder mFolderCol, ctrl<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' done with nested folders<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gnIndentlevel = gnIndentlevel - 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set mobjFolder = aFolders.GetNext<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Wend<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Sub</font></tt> </p>
</blockquote>

<hr>

<p>Notice that this routine is called recursively in order to collect all the folders that 
might be found <i>within</i> a folder. Since MAPI places no restrictions on how many 
levels of folders may be defined, you need to use a recursive routine to locate all the 
available folders. </p>

<p>Once you have built the folder collection, you'll need a method for pulling information 
out of the collection. Listing 10.5 shows a function that will take the friendly name of a 
folder and return the unique folder ID and store ID. Add this to your project. </p>

<hr>

<blockquote>
  <b><p>Listing 10.5. Adding the <tt><font FACE="Courier">GetFolderRec</font></tt> function.<br>
  </b></p>
</blockquote>

<blockquote>
  <tt><font FACE="Courier"><p>Public Function GetFolderRec(cFolderName As String) As 
  FolderType<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' take name, return structure<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim x As Integer<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim y As Integer<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' start w/ a blank return<br>
  &nbsp;&nbsp;&nbsp;&nbsp;GetFolderRec.StoreID = &quot;&quot;<br>
  &nbsp;&nbsp;&nbsp;&nbsp;GetFolderRec.FolderID = &quot;&quot;<br>
  &nbsp;&nbsp;&nbsp;&nbsp;GetFolderRec.Name = &quot;&quot;<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;y = UBound(FolderRec) ' get total recs in array<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' walk through array<br>
  &nbsp;&nbsp;&nbsp;&nbsp;For x = 0 To y - 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Trim(UCase(FolderRec(x).Name)) = 
  Trim(UCase(cFolderName)) Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetFolderRec = 
  FolderRec(x)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Function<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Next x<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Function</font></tt> </p>
</blockquote>
<div align="center"><center>

<table BORDERCOLOR="#000000" BORDER="1" WIDTH="80%">
  <tr>
    <td><b>Warning</b></td>
  </tr>
  <tr>
    <td><blockquote>
      <p>This routine will return the folder record of the first folder with the name you 
      request. Because MAPI allows users to define two folders with the same name, this routine 
      may not always return the results expected. This works fine for most projects, but you 
      should keep it in mind when developing MAPI search tools.</p>
    </blockquote>
    </td>
  </tr>
</table>
</center></div>

<p>You also need some tools for collecting and accessing all the discussion messages in a 
folder. Listing 10.6 shows the routine that you can use to collect all messages into a 
local user-defined type. Add the routine to your project. </p>

<hr>

<blockquote>
  <b><p>Listing 10.6. Adding the <tt><font FACE="Courier">OLEMAPIGetMsgs</font></tt> 
  routine.<br>
  </b></p>
</blockquote>

<blockquote>
  <tt><font FACE="Courier"><p>Public Sub OLEMAPIGetMsgs(cFolderName As String, Optional ctrl 
  As Variant)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' get all the discussion messages<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim uFolder As FolderType<br>
  &nbsp;&nbsp;&nbsp;&nbsp;ReDim MsgRec(0)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim bLoadCtrl As Boolean<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objFolder = Nothing<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objMsgColl = Nothing<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objMsg = Nothing<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;iMsgCnt = 0<br>
  &nbsp;&nbsp;&nbsp;&nbsp;uFolder = GetFolderRec(cFolderName)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' check for optional control<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If IsMissing(ctrl) Or IsNull(ctrl) Then <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl = Null<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = False <br>
  &nbsp;&nbsp;&nbsp;&nbsp;Else<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bLoadCtrl = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl.Clear<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' now walk through folder to find discussion msgs<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If uFolder.Name = &quot;&quot; Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to locate 
  folder!&quot;, vbExclamation, uFolder.Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' open store, folder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objFolder = objSession.GetFolder(uFolder.FolderID, 
  uFolder.StoreID)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If objFolder Is Nothing Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to open folder!&quot;, 
  vbExclamation, uFolder.Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' get message collection<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objMsgColl = objFolder.Messages<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If objMsgColl Is Nothing Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;No messages in folder&quot;, 
  vbExclamation, uFolder.Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' ok, get first message<br>
  &nbsp;&nbsp;&nbsp;&nbsp;On Error Resume Next<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objMsg = objMsgColl.GetFirst<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' now walk through folder to get all discussion msgs<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Do Until objMsg Is Nothing<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If objMsg.Type = &quot;IPM.Discuss&quot; 
  Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iMsgCnt = 
  iMsgCnt + 1<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim 
  Preserve MsgRec(iMsgCnt)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgRec(iMsgCnt).Subject 
  = objMsg.Subject<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgRec(iMsgCnt).Topic 
  = objMsg.ConversationTopic<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgRec(iMsgCnt).ConvIndex 
  = objMsg.ConversationIndex<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgRec(iMsgCnt).MsgID 
  = objMsg.ID<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgRec(iMsgCnt).Date 
  = objMsg.TimeReceived<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' optionally 
  load control<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If bLoadCtrl 
  = True Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl.AddItem 
  objMsg.ConversationIndex<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set objMsg = objMsgColl.GetNext <br>
  &nbsp;&nbsp;&nbsp;&nbsp;Loop<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Beep ' tell 'em you're done!<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Sub</font></tt> </p>
</blockquote>

<hr>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -