VC++实现拨号上网程序 (转)[@more@]  

VC++实现拨号上网程序


    在Office2000中,就用户界面丰富程度而论,word以56个工具栏(Toolbar)、50个弹出式菜单(Popup Menu)雄居首位,但excel(工具栏40个、弹出式菜单51个)和Powerpoint(工具栏43个、弹出式菜单25个)也相差不远。大多数用户可能从来没有见过所有这些工具栏,甚至许多用户不知道Office提供了这么多命令工具。
  虽然我们可以用【视图/工具栏】菜单隐藏或显示一些工具栏,但这个菜单并没有列出全部的工具栏。对于Word,从【工具/自定义】菜单可以看到的工具栏稍微多几个,但仍远远不到56个。在Excel和PowerPoint也类似。那么,这些丢失的工具栏到哪里去了呢?如何才能看到这些工具栏?如何将这些工具栏显示到菜单中?
  一、工具栏背后的工具栏
  Office工具栏上的相当一部分按钮是所谓的下拉式按钮。单击这些下拉按钮会显示出子菜单。其中一部分子菜单比较特殊,上面带有灰色的横条(microsoft称之为″移动把手”)。例如Word【格式】工具栏的【字体颜色】按钮,单击它的小箭头并把鼠标移到移动把手上,灰条颜色变蓝并提示″拖动可使此菜单浮动”。按住移动把手可把菜单从工具栏拖下来,使之浮动,如图1所示。
  一旦菜单拖下来成为浮动的工具栏,【视图/工具栏】菜单下会自动列出该工具栏;如果关闭该工具栏,则菜单下面的名字也不见了。因此,如果要再次显示这个工具栏,还是要重复原来的拖动过程。
  二、用宏显示隐藏工具栏
  大多数可以拖下来的菜单与画图或颜色功能相关,而且要从【绘图】工具栏访问。下表给出其中一部分工具栏的标题及其名字:
  名字
  标题
  Fill Color
  填充颜色
  Line Color
  线条颜色
  Font Color
  字体颜色
  Shading Color
  底纹色
  Borders
  边框
  在宏中,可以通过名字访问这些菜单,或将这些菜单显示为浮动工具栏。例如,要显示【字体颜色】工具栏,可以用如下命令:
  Commandbars(″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/10752019/viewspace-974524/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752019/viewspace-974524/

VC++实现拨号上网程序 (转)相关推荐

  1. VC++实现拨号上网程序

    VC++实现拨号上网程序 大家知道,在Netants.DownLoad Expert等软件中都带有定时拨号上网下载软件的功能.而一般用户的拨号上网,利用的是Windows的Remote Access ...

  2. 用VC实现拨号上网的程序

    序:近日,有位朋友问到用VC实现拨号上网的程序,今天在网上无意中发现了这篇文章,于是便转载过来,希望对这位朋友有所帮助!       正文:             大家知道,在netants.dow ...

  3. 不借助第三方程序 无需ie拨号 自动实现adsl拨号上网【ALLyeSNO】

    以前我用的是路由内置的拨号程序,所以一打开路由就自动拨号上网了. 后来回到家里面路由没有带回家,只好装了一个星空互联的拨号程序,不过那个垃圾实在是太占内存 传闻还有溢出,于是我就采用了XP自带的ppp ...

  4. SIM300拨号上网与GPRS连接

    SIM300为内嵌TCP/IP协议的GPRS模块,可以实现GPRS通讯和拨号上网.其实到现在我还没有明白GPRS通讯是否=拨号上网? 我的板子由SIM300和STC单片机组成,在单片机里用程序实现发送 ...

  5. WINCE+6410 拨号上网

    我们现在的模块用的是USB接口,然后模拟成一个COM6进行通信,在CE的: 控制面板->网络连接 里要新建一个连接,选择"拨号连接"然后设置好区域代码,还有附加解调器命令+C ...

  6. linux下拨号时间,linux下拨号上网

    linux下拨号上网 发布时间:2007-11-15 15:28:37来源:红联作者:eometry 本文供参考学习.现在很少有人拨号上网,在linux下拨号上网的就更少了. 即便这样,我还是打算写一 ...

  7. linux下通过gprs模块拨号上网(转)

    这几天做了一下gprs拨号上网,模块是西门子的mc39i.我的系统是fedora core 6.其实很简单,我又有高手指导,:-).   首先从/usr/share/doc/ppp-2.4.4/scr ...

  8. 关于linux拨号上网的软件实现方案[原创]

    一.Linux上使用pppd来实现拨号上网.我们首先要确认 Linux 系统是否支持 PPP 功能.如果当前 kernel 不支持 PPP,需要重新编译生成一个支持 PPP 的 kernel.(所幸现 ...

  9. linux ppp拨号 USB,linux下ppp拨号上网

    转帖 如何用 Linux 拨号上网 一.Linux 上的 PPP Linux 中已经包括了点对点协议PPP,其主体是 pppd ,如果你已经使用过 Windows95 或 NT 的拨号网络,那么你已经 ...

最新文章

  1. java用构造方法定义book类_JAVA基础学习之路(三)类定义及构造方法
  2. PLS-00172: string literal too long
  3. L1为什么具有稀疏性
  4. JavaFX图表(五)之气泡图
  5. textview点击展开全部或收起,内容过长显示省略号,设置行间距,字间距,跑马灯显示
  6. java小数左右移_Java将小数位移至两倍
  7. 获取当前元素是第几个点击值
  8. 两道动态规划的作业题
  9. Intel IOMMU Introduction
  10. android 微信输入法表情,分析Android 搜狗输入法在微信和QQ中发送图片和表情
  11. 洛谷 U80455 逃跑的Seaway
  12. 改善睡眠的东西有哪些?促进睡眠的方法
  13. mysql批量抽取数据_批量从数据库是提取数据,并显示出来。
  14. iOS10 开发适配问题 看到的整理
  15. Java黑皮书课后题第3章:*3.31(金融:货币兑换)编写程序,提示用户输入从美元到人民币的兑换汇率,然后提示用户输入0表美元兑人民币、1表人民币兑美元。继而提示用户输入美元数量或人民币数量,兑换
  16. C++ Primer Plus 第九章编程题练习
  17. 就读体验丨香港科技大学工学院科技领导及创业(TLE)理学硕士学位课程(上)
  18. python tableview没有数据时的占位处理_iOS造轮子系列-TableView空数据显示占位图片 runtime实现...
  19. SQL Server 容易忽略的错误
  20. socket中的read返回0

热门文章

  1. 各个不同品牌水星路由默认密码
  2. 基于STM32的MPU6050
  3. nobone-sync ......js后watched一次后自动终止的原因
  4. ES数据库的搭建(包含踩坑记录)
  5. 用Python提取图片截图中的文字
  6. Android vivo手机安装失败的解决方式
  7. 微信pc端扫码支付前后端流程(Node.js)
  8. 逆元的定义用处以及简单求法
  9. Intel(R) Parallel Studio XE 2019 Update 1 for Linux* /make libintel64 出错
  10. 高仿三星s6 g920f 拆机图解