如果您有VB 的编程(www.cppentry.com)经验,一定对VB所支持丰富的控件留下深刻的印象。这些就是ActiveX控件,一般是以 ocx后缀。由于ActiveX控件与开发平台无关,因此,用VC++(www.cppentry.com)编程(www.cppentry.com)开发的ActiveX控件即可在VB或其他平台上使用。用VC++(www.cppentry.com)中开发的ActiveX控件,代码简洁,运行速度快。VC++(www.cppentry.com)还可以直接控制底层的各种操作。用VB快速开发出漂亮的界面以及应用程序框架,再嵌用VC编写底层的各种操作的控件,已成为越来越多软件编程(www.cppentry.com)人员愿意采用的编程(www.cppentry.com)方法。
---- 拨号上网是编写网络应用软件常用的操作,程序在运行某些远程网上操作前,需要先拨号与网络连接,完成操作后由必须收线断开。在Windows 95/98的"拨号网络"中,虽然提供拨号功能,但无法直接让自己开发的应用程序来调。而在系统注册的常用的控件当中又没有提供。
---- 本方法是利用VC++(www.cppentry.com)制作一个拨号控件,提供拨号与收线功能。VC++(www.cppentry.com) 6.00提供控件的创建引导(MFC ActiveX ControlWizard)可以快速生成ActiveX 控件的程序框架。拨号功能是由VC++(www.cppentry.com)提供的 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中的 "MFCActiveX Control Wizard", 在Project name 项输入"Dialer" ,在Location 项会生成相应的路径。单击OK钮进入第二步,保留默认值。单击Next 进入最后一步,选中 Invisible at runtime (运行时窗口不可见),其余保持默认。按Finish 钮,弹出一个信息对话框,按OK钮完成工程项的创建。
---- 二、修改控件图标
---- 工程项自动生成一个15 X 15 Bitmap 的位图,该图将在VB 的资源工具箱中显示为一个图标。实际上图标可以显示到 25 X 25 大小尺寸的位图。您需要将该位图改为自己的位图。VC++(www.cppentry.com)集成开发环境提供绘图工具让您修改。
---- 三、定制控件界面
---- 在应用程序设计时,嵌入的控件会显示一个界面。工程项创建时自动生成一个椭圆例图。在这里我们要去掉画椭圆的代码,并增加如下代码来限制控件窗口的大小及画出控件设计时的显示图标:
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);
}