用VC++6.0编写拨号程序

本文利用Visual C++ 6.0实现一个拨号程序,可作为VC学习者编程实践范例。介绍了利用VC++制作拨号控件的方法,包括建立工程项目、修改控件图标、制作控件界面等步骤,还说明了添加拨号库及头文件、属性、函数等内容,最后给出了VB的调用方法。

用VC++6.0编写拨号程序 作者:陈晓东 发布时间:2001/05/22 
 
 
 
文章摘要:
  本文利用visual c++6.0给出了一个拨号程序的实现,可以作为VC学习者编程实践的范例。 
        

--------------------------------------------------------------------------------
 
正文:   

用VC++6.0编写拨号程序   
  拨号上网是编写网络应用软件常用的操作,程序在运行某些远程网上操作前,需要先拨号与网络连接,完成操作后由必须收线断开。在Windows 95/98的"拨号网络"中,虽然提供拨号功能,但无法直接让自己开发的应用程序来调。而在系统注册的常用的控件当中又没有提供。
  本方法是利用VC++制作一个拨号控件,提供拨号与收线功能。VC++ 6.00提供控件的创建引导(MFC ActiveX ControlWizard)可以快速生成ActiveX 控件的程序框架。拨号功能是由VC++提供的 rasapi32.lib 的函数库支持的,函数及变量在 ras.h 文件头定义。函数RasDial()实现拨号功能,RasHangUp()用来终止拨号连接。函数调用方法:
DWORD dwRet = RasDial( NULL, NULL,
&rdParams, 0L, NULL, &hRasConn );
DWORD dwRet = RasHangUp( hRasConn );
其中:
rdParams 为 RASDIALPARAMS 结构,
主要参数定义如下:
DWORD dwSize 结构变量的大小;
TCHAR szEntryName[] 拨号网络中建立的连接名;
TCHAR szPhoneNumber[] 电话号码,
若采用 szEntryName 中定义的号码,置为NULL 值;
CHAR szCallbackNumber[] 回拨号码,不用时置为NULL;
TCHAR szUserName[] 用户名;
TCHAR szPassword[] 用户口令;
TCHAR szDomain[] 用户权限验证域,
若为'*'采用szEntryName 中定义的域进行验证。
HRasConn 是 HRASCONN 结构,作远程拨号连接句柄。

一、 建立工程项目

  启动CV++集成开发环境,打开"New"对话框,选中Projects中的 "MFC ActiveX Control Wizard", 在Project name 项输入"Dialer" ,在Location 项会生成相应的路径。单击OK钮进入第二步,保留默认值。单击Next 进入最后一步,选中 Invisible at run time (运行时窗口不可见),其余保持默认。按Finish 钮,弹出一个信息对话框,按OK钮完成工程项的创建。

二、修改控件图标

  工程项自动生成一个15 X 15 Bitmap 的位图,该图将在VB 的资源工具箱中显示为一个图标。实际上图标可以显示到 25 X 25 大小尺寸的位图。您需要将该位图改为自己的位图。VC++集成开发环境提供绘图工具让您修改。

三、 制控件界面

  在应用程序设计时,嵌入的控件会显示一个界面。工程项创建时自动生成一个椭圆例图。在这里我们要去掉画椭圆的代码,并增加如下代码来限制控件窗口的大小及画出控件设计时的显示图标:
void CDialerCtrl::OnDraw(CDC* pdc,
const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code
with your own drawing code.
//pdc- >FillRect(rcBounds,CBrush::FromHandle
((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
//限制控件窗口大小
if (rcBounds.Height!=25 ||
rcBounds.Width!=25)SetControlSize(25,25);
//显示位图
CBitmap bitmap;
CBitmap* pOldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pdc);
bitmap.LoadBitmap(IDB_DIALER);
pOldBitmap=MemDC.SelectObject(&bitmap);
pdc->BitBlt(0,0,48,48,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
}

四、 添加拨号库及头文件---- 将rasapi32.lib 及 ras.h 加到工程项。

五、 添加控件属性

  我们要在控件中设置一些属性来实现应用程序与控件的传递参数及控制动作。在Class Wizard 的 Automation 标签中 , Class name 项选中 CDialerCtrl ,单击 Add Property 按钮,增加控件属性。

六、 增加拨号及收线函数

bool CDialerCtrl::DialUp(){ //拨号函数
RASDIALPARAMS rdParams;
rdParams.dwSize = sizeof(RASDIALPARAMS);
lstrcpy( rdParams. szEntryName, m_netWorking);
lstrcpy( rdParams.szPhoneNumber, m_phone);
rdParams.szCallbackNumber[0] = '/0';
lstrcpy( rdParams.szUserName, m_userName );
lstrcpy( rdParams.szPassword, m_passWord );
rdParams.szDomain[0] = '*';
hRasConn = NULL; //hRasConn
为 HRASCONN 类型的变量;
DWORD dwRet = RasDial( NULL, NULL,
&rdParams, 0L, NULL, &hRasConn );
if ( dwRet == 0 ) {m_message="OK!";
m_returnCode = deRet; return true;}
//这里省去出错处理代码
return false;
}
bool CDialerCtrl::HandUp(){ //收线函数
DWORD dwRet = RasHangUp( hRasConn );
//这里省去出错处理代码
return true;
}

七、 增加动作函数

控件的Action 的值一有改变将自动运行该函数,Action 有两个动作:1.拨号 2.收线。
void CXiaXinDialCtrl::OnActionChanged() {
// TODO: Add notification handler code
if (m_action==1) DialUp(); //调用拨号函数
if (m_action==2) HandUp(); //调用收线函数
SetModifiedFlag();
}

八、 编译,链接,自动注册

  启动VC++的建立(build)动作,将实行编译,链接生成 Dialer.ocx 并自动注册到本机。这时您可以启动VB 开发平台 打开 Components 就可以看到刚注册的 Dialer ActiveX Control Module 。

九、 VB 的调用方法

在VB的开发中,您可以和通用的控件一样使用Dialer.ocx。调用方法如下:
Private Sub Command1_Click()
Dialer1.NetWorking = Text1.Text
Dialer1.UserName = Text2.Text
Dialer1.PassWord = Text3.Text
Dialer1.Phone = Text4.Text
Label5.Caption = "正在拨号..."
Dialer1.Action = 1
Labe15.Caption = Dialer1.Message
' 如果接通 窗口最小化
If XiaXinDial1.ReturnCode =
0 Then Form1.WindowState = 1
End Sub
 

 

目录 第一章 1·带图标的菜单 2·显示倾斜文字 3·文字的颜色渐变 4·设置并叠加透明图片 5·颜色渐变进度条 6·透明窗体 第二章 7·调色程序 8·颜色下拉框 9·模拟拷贝进程 10·通用对话框 11·窗体分割 12·实现QQ程序的抽屉效果 13·以动画方式弹出,关闭窗口 14·半透明窗体 15·获得指定点颜色 16·判知图片大小 17·图片的伸缩显示 18·浏览大图 19·放大局部图形 20·屏幕抓图 21·裁剪位图 22·填充区域图象 23·列表项的提示条 24·浮动的鼠标提示 25·控制工具栏的按钮组 26·工具栏上设置下拉按钮 27·使窗体保持在最前 28·模仿windows任务拦 29·定义光标热区 30·拖放选中对象 第三章 31·调节系统音量 32·控制混音效果 33·播放WAV文件 34·再现windows的CD播放器 35·小解霸--VCD经典控制 36·播放rm文件 第四章 37·文字逐个出现模仿打字 38·嵌入式时钟 39·程序中嵌入日历 40·毫秒级的控制 41·读写系统时间 42·同步网络时间 第五章 43·编写屏保程序 44·屏蔽系统热键和隐藏任务拦 45·动态调整屏幕分辨率 46·获取系统硬件信息 47·编辑注册表信息 48·重启动和关闭计算机 49·获取windows版本号和运行模式 50·枚举可用字体 第六章 51·向导程序 52·系统托盘程序 53·隐藏程序不被关闭程序发现 54·枚举系统正在运行的程序 55·启动并控制其他exe程序 56·禁止运行程序多个实力 57·禁止程序右上角各按钮 58·多线程方式同时进行多项任务 59·线程优先级示例==赛马 60·利用剪贴板实现exe程序间的数据交换 61·通过内存映射实现exe程序间的数据交换 62·通过消息机制实现exe程序间的数据交换 第七章 63·获取驱动器序列号 64·获取磁盘空间数据 65·判别并定位到光驱(软驱) 66·嫡归法遍历磁盘目录 67·获得文件属性 68·删除不为空的目录 69·快速检索指定文件 70·拷贝,删除和移动文件 71·读写INI文件 72·读写大块资料(二进制) 73·文件变更通知 第八章 74·格式化数字 75·中文大写数字 76·存取图象字段 77·ADO控制access数据库 78·SQL语句中设置时段检索条件 79·SQL语句中设置字符串检索条件 80·SQL语句中设置多个字符串检索条件 81·SQL语句嵌套 82·代码控制链接ODBC 第九章 83·获取网卡地址 84·获得主机名和IP地址 85·端口扫描 86·判断网址是否有效 87·枚举局域网内计算机 88·连续批量Ping测试 89·设置IE的标题 90·收发电子邮件 91·FTP上传下载 92·网络聊天WINSOCK-TCP 93·广播信息WINSOCK-UDP 94·电话拨号上网 第十章 95·进制转换 96·随机选号 97·统计中英文字符数 第十一章 98·鼠标位置追踪 99·代码控制光标 100·模拟鼠标单双击 101·模拟键盘输入 102·限定鼠标区域 103·截获鼠标移开事件 104·截获键盘信息 第十二章 105·产生程序序列号 106·建立一个快捷方式 107·设置程序为自动被执行 108·注册与卸载OCX 109·限定程序的使用时限 110·在IE工具栏中加入快捷图标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值