VC++實現撥號上網程式 (轉)

worldblog發表於2007-12-06
VC++實現撥號上網程式 (轉)[@more@] 

VC++實現撥號上網


    在2000中,就介面豐富程度而論,以56個工具欄(Toolbar)、50個彈出式選單(Popup Menu)雄居首位,但(工具欄40個、彈出式選單51個)和(工具欄43個、彈出式選單25個)也相差不遠。大多數使用者可能從來沒有見過所有這些工具欄,甚至許多使用者不知道Office提供了這麼多命令工具。
  雖然我們可以用【檢視/工具欄】選單隱藏或顯示一些工具欄,但這個選單並沒有列出全部的工具欄。對於Word,從【工具/自定義】選單可以看到的工具欄稍微多幾個,但仍遠遠不到56個。在Excel和PowerPoint也類似。那麼,這些丟失的工具欄到哪裡去了呢?如何才能看到這些工具欄?如何將這些工具欄顯示到選單中?
  一、工具欄背後的工具欄
  Office工具欄上的相當一部分按鈕是所謂的下拉式按鈕。單擊這些下拉按鈕會顯示出子選單。其中一部分子選單比較特殊,上面帶有灰色的橫條(稱之為″移動把手”)。例如Word【格式】工具欄的【字型顏色】按鈕,單擊它的小箭頭並把滑鼠移到移動把手上,灰條顏色變藍並提示″拖動可使此選單浮動”。按住移動把手可把選單從工具欄拖下來,使之浮動,如圖1所示。
  一旦選單拖下來成為浮動的工具欄,【檢視/工具欄】選單下會自動列出該工具欄;如果關閉該工具欄,則選單下面的名字也不見了。因此,如果要再次顯示這個工具欄,還是要重複原來的拖動過程。
  二、用宏顯示隱藏工具欄
  大多數可以拖下來的選單與畫圖或顏色功能相關,而且要從【繪圖】工具欄訪問。下表給出其中一部分工具欄的標題及其名字:
  名字
  標題
  Fill Color
  填充顏色
  Line Color
  線條顏色
  Font Color
  字型顏色
  Shading Color
  底紋色
  Borders
  邊框
  在宏中,可以透過名字訪問這些選單,或將這些選單顯示為浮動工具欄。例如,要顯示【字型顏色】工具欄,可以用如下命令:
  Commanars(″Font Color″).Visible = True
  再舉一個例子。如果經常要為Word文件加上彩色標註,則最好能訪問【字型顏色】、【線條顏色】、【填充顏色】和【標註】四個工具欄。可以寫一個子過程:
  Sub ShowCalloutToolbars(OnOrOff As Boolean)
  CommandBars(″Callouts″).Visible = OnOrOff
  CommandBars(″Font Color″).Visible = OnOrOff
  CommandBars(″Line Color″).Visible = OnOrOff
  CommandBars(″Fill Color″).Visible = OnOrOff
  End Sub
  然後用如下兩個命令分別顯示和隱藏上述四個工具欄:
  ShowCalloutToolbars True
  ShowCalloutToolbars False
  當然,用宏來顯示或關閉某些隱藏工具欄,在許多其他情形下也是很有幫助的,這些應用場合就有待讀者自己去發現了。
  三、在選單中列出隱藏工具欄
  如前所述,【檢視/工具欄】選單是不顯示隱藏工具欄的,也不存在定製該選單加入額外工具欄的方法,但這並不是說我們不能將這些工具欄顯示在自己建立的選單中。接下來介紹的方法可以在【檢視/工具欄】選單下面加上一個【隱藏工具欄】選單。圖2顯示的是Word中的【隱藏工具欄】選單,在其他Office應用中也相似。
  首先我們需要一個宏AutoExec,該宏在Word啟動的時候自動執行,AddHiddenToolBarsOption,後者在檢視選單的【工具欄】下面增加 【隱藏工具欄】 選單。AutoExit在Word關閉的時候執行,呼叫RemoveHiddenToolBarsOption,刪除【隱藏工具欄】選單。
  Sub AutoExec()
  CustomizationContext = NormalTemplate
  AddHiddenToolBarsOption
  End Sub
  Sub AutoExit()
  CustomizationContext = NormalTemplate
  RemoveHiddenToolBarsOption
  End Sub
  Sub AddHiddenToolBarsOption()
  ' 在檢視選單的'工具欄'下面增加'隱藏工具欄'選單項
  RemoveHiddenToolBarsOption
  With CommandBars(″View″)
  With .Controls.Add(Type:=msoControl彈出式, _
  Before:=.Controls(″工具欄(&T)″).Index + 1)
  .Caption = ″隱藏工具欄(&H)″
  .OnAction = ″ListHiddenToolbars″
  End With
  End With
  End Sub
  Sub RemoveHiddenToolBarsOption()
  On Error Resume Next
  CommandBars(″View″).Controls(″隱藏工具欄(&H)″).Delete
  End Sub
  ListHiddenToolbars在使用者單擊【隱藏工具欄】的時候執行,它的任務是:找出未在【檢視/工具欄】選單列出的工具欄,用這些工具欄的標題構造【隱藏工具欄】的子選單。
  Sub ListHiddenToolbars()
  Dim ExistingBars As String
  Dim TBar As CommandBar
  Dim Ctl As CommandBarControl
  Dim HiddenBarList As CommandBarControl
  Set HiddenBarList = CommandBars.ActionControl
  那麼,它是如何得知哪一個工具欄該顯示或隱藏呢?首先,對於已經顯示在【檢視/工具欄】下的工具欄,ListHiddenToolbars用如下程式碼生成一個標題列表:
  With CommandBars(″View″).Controls(″工具欄(&T)″)
  For i = 1 To .Controls.Count - 1
  ExistingBars = ExistingBars & _
  .Controls(i).Caption & vbCr
  Next
  End With
  ' 清空新建立的子選單
  For Each Ctl In HiddenBarList.Controls
  Ctl.Delete
  Next
  在這個For迴圈中,程式遍歷【檢視/工具欄】選單,在ExistingBars變數中儲存所有已顯示工具欄標題,各標題之間以vbCr分隔。(可以用其他字元分隔,但用vbCr有利於。)以後程式就可以利用ExistingBars來避免工具欄重複顯示了。
  接下來的是下面這個Fox迴圈:
  For Each TBar In CommandBars
  If TBar.BuiltIn = True And _
  TBar.Type = msoBarTypeNormal And
  TBar.Enabled = True And _
  TBar.Visible = False And _
  InStr(ExistingBars, TBar.NameLocal & vbCr) = 0 Then
  With HiddenBarList.Controls.Add
  .Caption = Replace(TBar.NameLocal, ″&″, ″&&″)
  .Parameter = TBar.Name
  .OnAction = ″DisplayToolbar″
  End With
  End If
  Next
  ' 加入'自定義'命令
  With HiddenBarList.Controls.Add(ID:=797)
  .BeginGroup = True
  End With
  End Sub
  這個For迴圈的任務是:遍歷整個CommandBars集合,對於每一個CommandBar:
  1. 檢查BuiltIn屬性是否為True,以排除所有自定義工具欄。
  2. 檢查Type屬性是否為msoBarTypeNormal(即0),以排除選單條(Menu Bar)、彈出式選單,確保只顯示那些″真正的”工具欄。
  3. Enabled屬性值也必須為True,以保證只顯示那些可用的選單。例如不在全屏顯示方式下時,【關閉全屏顯示】工具欄是不應該顯示的。
  4. 一些工具欄,如【功能鍵展示】,即使它是可見的,其名字也不會顯示在【檢視/工具欄】選單下,因此還必須檢查Visible屬性是否為False。
  5. 最後,程式檢查工具欄標題是否出現在ExistingBars中,若出現的話,說明該工具欄標題已經顯示在【檢視/工具欄】選單下面了。
  如果所有上述檢查透過,就可以在【檢視/隱藏工具欄】子選單下新增一個工具欄標題。前面程式碼中的最後一個With用於在子選單的底部加上【自定義】命令。
  從【隱藏工具欄】子選單選擇一個工具欄名字時觸發DisplayToolbar過程。DisplayToolbar的功能是檢查Parameter值(ListHiddenToolbars將它設定為工具欄名字),顯示對應的工具欄。
  Sub DisplayToolbar()
  On Error Resume Next
  With CommandBars.ActionControl
  CommandBars(.Parameter).Visible = True
  If Err Then
  MsgBox ″不能顯示″ & .Parameter, _
  vbExclamation, ″隱藏工具欄″
  End If
  End With
  End Sub
  最後,對於Excel和PowerPoint,要在【檢視】選單下顯示類似的【隱藏工具欄】選單,只需將Word中的AutoExec和AutoExit分別用下面的Auto_Open和Auto_Close替換即可:
  Sub Auto_Open()
  AddHiddenToolBarsOption
  End Sub
  Sub Auto_Close()
  RemoveHiddenToolBarsOption
  End Sub(浙江 俞良松)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989045/,如需轉載,請註明出處,否則將追究法律責任。

相關文章