VC控件篇(二)

来源:互联网 发布:淘宝卖家层级交易额 编辑:程序博客网 时间:2024/06/06 03:52

转自http://hi.baidu.com/bjwyl66/item/018b38cfd61f203a98b49886

以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。

1 使用ActiveX控件

以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。

1.1 控件的注册

不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件,按照以下步骤:

1. 在VC的Tools菜单下启动ActiveX Control Test Container;

2. 在ActiveX Control Test Container里打开菜单File\Register Controls…;

3. 弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮;

4. 选择待注册的控件文件,如:“C:\WINNT\system32\Macromed\Flash\swflash.ocx”即为Macromedia Flash的ShockwaveFlash控件文件;

5. 点击“打开”按钮,即完成以上控件的注册,我们可以在控件列表中发现它的名字为“ShockwaveFlash. ShockwaveFlash.1”;

以上操作画面如图所示:

图25 注册ActiveX控件

还有一种简单一点的办法,使用regsvr32注册之即可,如图示出注册画面:

图26 使用regsvr32注册ActiveX控件

对于某些软件,安装时即完成对自带控件的注册。例如:Macromedia Flash安装之后,你的Internet浏览器就可以播放动画了,你也可以在控件列表里找到ShockwaveFlash控件。那么这些软件是如何完成控件的自注册的呢(这也是常见的问题之一)?一种途径是使用安装程序,它们可以自动完成ActiveX控件的注册;另一种方法是利用程序调用DllRegisterServer()即可:

HMODULE hModule=LoadLibrary(sControlFilePath);  

 if(hModule)   

{   FARPROC DLLRegisterServer = (FARPROC)GetProcAddress(hModule "DllRegisterServer");   

        if(DLLRegisterServer)   

       {   HRESULT regResult = DLLRegisterServer();  

            if(regResult != NOERROR)  

                MessageBox(NULL "注册ActiveX控件时发生错误!" "警告" MB_OK|MB_ICONINFORMATION);  

         }   

      FreeLibrary(hModule); 

}  

1.2 引入控件

好了,目前为止,我们已经有Flash控件了,那么我们在程序中引入它:

1. 在对话框设计界面空白处右键,弹出菜单,选择Insert ActiveX Control…,如下所示:

图27 选择Insert ActiveX Control

2. 在Insert ActiveX Control窗口中,在控件列表中选择Shockwave Flash Object,如图所示:

图28 选择Shockwave Flash Object

1. 好了,现在的Flash控件成功引入!我们继续调整Flash控件的大小和位置:

图29 引入Flash控件

引入ActiveX控件,还有一种途径,就是通过Project\Add To Project\Componets and Controls…,然后选择Registered ActiveX Controls。在此不再赘述。

1.3 设置控件属性

面对这个新鲜的玩意儿,我们该设置设置属性,让它干干活。

界面确实变化了不少,Flash Properties标签页即列举了Flash控件的属性:

图30 Flash控件的Flash Properties标签页

All标签页则以值的方式列出了该控件的所有属性:

图31 Flash控件的All标签页

做过Flash的朋友可能对这些属性的含义要熟悉一点,例如:Quality用以设置动画的画面质量,Scale则指定动画的显示方式,Play和Loop决定动画是否一开始就播放以及是否循环播放,如此等等。

我们现在让这个控件播放一则动画,操作太简单了,将Movie URL设置成动画文件路径即可:

图32 设置Flash的Movie URL

运行程序,乖乖,该来的都来了:

图33 FlashPlayer运行界面

1.4 映射控件变量

小试牛刀,看来已初显成效,我们现在来更好地控制这个控件,第一步,映射变量:

1. 将控件的ID设置成IDC_FLASH_SCREEN;

2. 复习2.4节的内容,打开ClassWizard窗口;

3. 选择IDC_FLASH_SCREEN,双击之,不好,好像不太一样:

图34 提示窗口

VC可以自动每一个ActiveX控件封装出一个类作为未来的控件变量的类型,如果你还希望映射控件变量,那么选择“确定”。

4. 接下来的操作是为这个自动生成的类指定类名和文件名:

图35 确认类名和文件名

别找乐了,使用缺省的CShockwaveFlash就很好,我们继续。

5. 接下来的画面比较熟悉,我们选择Control和CShockwaveFlash:

图36 添加控件对象变量

ActiveX控件没有值变量,只有一个控件对象变量,这个变量的类型就是前面准备好的CShockwaveFlash,没问题,我们将Flash控件取名为m_FlashScreen。

1.5 响应控件事件

ActiveX控件也具有自身的事件,例如我们的IDC_FLASH_SCREEN具有以下事件:

图37 ActiveX控件事件

事件的响应与标准控件一样,在此不再赘述。

1.6 调用控件方法

前面已经提及,不管是标准控件,还是ActiveX控件,都可以映射成对象变量。既然是对象,我们就可以调用成员函数(或曰方法,method)来完成特定的功能,下面我们结合FlashPlayer来学习CShockwaveFlash方法的调用。

通过3.4,我们可以发现VC已经帮我们准备了两个文件shockwaveflash.cpp和shockwaveflash.h,以及一个类CShockwaveFlash:

图38 CShockwaveFlash的类框架

VC会自动提取控件的所有方法和属性,并封装成我们所熟悉的成员函数形式。CShockwaveFlash为我们准备了不少的函数,我们先用一个熟悉点的试试:

void CShockwaveFlash::SetMovie(LPCTSTR lpszNewValue)  

 {       static BYTE parms[] = VTS_BSTR;      

 InvokeHelper(0x66, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,  lpszNewValue);   

}  

这个SetMovie()可以用来设置当前播放动画的URL,估计相当于属性窗口里面的Movie URL。我们使用这个SetMovie()结合“浏览”按钮来实现选择播放功能:

void CFlashPlayerDlg::OnBrowser()   

 {       CFileDialog FileDialog(true, ".swf", "", OFN_EXPLORER,  "Flash动画文件(*.swf)|*.swf|所有文件(*.*)|*.*||", this);             

        if(FileDialog.DoModal() == IDOK)      

        {           m_sFilePath = FileDialog.GetPathName();        

                  UpdateData(false);             

              m_FlashScreen.SetMovie(m_sFilePath);    

         }   

}   

嗯,运行FlashPlayer,运行界面如下所示,它现在已支持文件选择的功能了:

图39 支持点播的FlashPlayer

FlashPlayer程序至此打造完毕,以下向大家推荐一些比较有用的控件:

1.1 MsChart控件

控件名称:Microsoft Chart Control 6.0 (sp4)

控件类:CMsChart

控件简介:MsChart是微软制作的功能强大的图表工具,用它可以很方便的建立各种图表,包括各种二维、三维的饼图、折线图、直方图、折线图、面积图等。

应用图例:

图40 MsChart控件应用图例

1.2 DataGrid控件

控件名称:Microsoft DataGrid Control 6.0 (sp5)

控件类:CDataGrid

控件简介:DataGrid控件是由微软提供的数据表格控件,需要与ADODC控件配合使用。通过使用DataGrid控件,可以很方便地实现数据表记录的浏览、增加、删除和修改功能。

应用图例:

图41 DataGrid控件应用图例

1.3 MsComm控件

控件名称:Microsoft Communications Control version 6.0

控件类:CMsComm

控件简介:MSComm 控件提供了一系列标准通讯属性和方法,使用它可以建立起应用程序与串行端口的联接。

应用图例:

图42 MsComm控件应用图例

以上画面来源于笔者自行制作的手机通讯软件FreePhone,其底层采用MsComm控件,感兴趣的读者可以参见http://bluejoe.yeah.net。

1.4 Web浏览器控件

控件名称:Web浏览器控件

控件类:CWebBrowser2

控件简介:Web浏览器相信大家再也熟悉不过了,IE浏览器就内嵌了一个Web浏览器控件,这也就是为什么腾讯浏览器与IE如此相似的原因。通过使用Web浏览器控件,可以很方便地实现网页页面的浏览和显示。

应用图例:

图43 Web浏览器控件应用图例

1.5 ActiveMovie控件

控件名称:ActiveMovie Control Object

控件类:CActiveMovie3

控件简介:ActiveMovie是Microsoft公司开发的视频播放控件。该控件内嵌了Microsoft MPEG音频解码器和Microsoft MPEG视频解码器,播放控制更加简捷方便。

应用图例:

图44 ActiveMovie控件应用图例

2 结束语

控件是好东西,有了它,绝对会节省你的不少时间和精力。如果你正在为某个复杂的实现而苦恼万分,那么笔者建议你先上网查查是否已经有相应的控件可供下载使用。一个专业的控件往往会比你考虑得要周密得多,也要方便得多。而你的任务就是如何使用它,如何去推广它;当然,如果你有好的代码,譬如是一个底层硬件通讯的工程类,我也希望你会将这些东西封装成控件,然后贡献出来,让大家一块共享你的成就和快乐!

 

原创粉丝点击