白乔原创:VC之控件篇

这篇博客详细介绍了如何在VC中使用和自定义Windows标准控件,包括文本编辑框、控件属性设置、事件响应、控件子类化。同时,它也引导读者如何注册和使用ActiveX控件,如FlashPlayer,涵盖了控件注册、引入、属性设置、事件处理和方法调用。通过实例展示了如何创建一个简单的Flash浏览器,让读者掌握控件编程的基础知识。
摘要由CSDN通过智能技术生成

 

 

 

1 使用Windows标准控件

1.1 常见控件列表

Windows标准控件即普通控件,撰写此文时,笔者每天面对的Word就带了一脸的控件,当然你肯定也熟悉:字体选择下拉框、工具栏、滚动条、状态栏,如此等等。

常见的Windows标准控件在VC里就有:

图2 控件集窗口

通常这个控件集窗口在你的对话框设计界面的附近总能找到,如果找不到,在VC工具栏的任何空白处点击右键,在弹出菜单的Controls菜单项前面打上勾即可,如图所示:

图3 显示控件集窗口

你也许已经看到了,我们图1所示的FlashPlayer中有3个控件是Windows标准控件,好,我们先系统地学习一下怎么使用这3个控件。

1.2 引入控件

1. 准备对话框

对话框相当于控件的容器,我们当然要先准备一个对话框。好办,直接创建一个基于对话框的工程就是了:

图4 准备对话框Step 1

注意,在Step 2中要确认“3D Controls”和“ActiveX Controls”前面打上勾,如图所示:

图5 准备对话框Step 2

这样你的程序就支持三维控件和我们后面即将使用到的ActiveX控件了。如果去掉了勾,或者你面对的正是你师兄当年准备论文的旧的project,它好像并不支持ActiveX控件,那该怎么办呢(好多VC网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序文件的InitInstance()函数头部加上以下语句即可:

 

  1. BOOL CFlashPlayerApp::InitInstance()   
  2. {   
  3.     AfxEnableControlContainer();   
  4.   
  5. #ifdef _AFXDLL   
  6.     Enable3dControls();         // Call this when using MFC in a shared DLL   
  7. #else   
  8.     Enable3dControlsStatic();   // Call this when linking to MFC statically   
  9. #endif   
  10.   
  11. //…   
  12. }   

 

对话框准备好了,缺省情况下,它总会自动带上3个控件:2个按钮,“确定”与“取消”和一个“TODO: 在这里设置对话控制” 文本标签。

2. 准备文本编辑框

文本标签我们并不需要,那么就直接删除之。但我们需要一个文本编辑框,用以显示Flash文件路径。引入新的Windows标准控件很简单,只要简单地从控件集窗口选择相应的控件拖拽至对话框即可。好,我们拖来一个文本编辑框:

图6 引入文本编辑框控件

1.3 设置控件属性

引入来的控件,可以通过鼠标简单的拖拽调整其位置和大小,当然,你还可以通过属性对话框来设计这个控件。在控件上右击鼠标,弹出菜单:

图7 控件的属性窗口

这个菜单即将覆盖本教程的大部分内容,菜单最下面的三行分别为:

ClassWizard… 为控件创建类及变量

Events… 为控件映射事件

Properties 设置控件的属性

前两项后面的内容将要讨论到,我们现在只关心Properties(属性),点击它即可弹出文本编辑框的属性界面:

图8 文本编辑框的属性界面

我们按照以下的步骤进行控件的属性设置:

1. 在“General(普通)”标签页里将文本编辑框的ID修改成IDC_FLASH_FILE,而不是缺省的IDC_STATIC;

2. 在“Styles(样式)”标签页里将文本编辑框的Read-only打勾,这样我们的文本编辑框就显示成灰色,并且只读。也就是说,它的,内容只能由程序更改,用户不能手动输入;

3. 同理,在两个按钮的“General(普通)”标签页里,设置它们的Caption(标题),分别为“浏览…”和“退出”;

4. 在“浏览…”按钮的“General(普通)”标签页里,将它的ID设置成ID_BROWSER;

需要指出的是,每个控件都具有ID,就相当于每个人都具有一个身份证号。除了IDC_STATIC(它的值是-1),每个对话框的控件的ID都必须唯一,不能重复。一些特定的ID代表特定的含义,如:IDOK对应于“确定”按钮,IDCANCEL对应于“取消”按钮,IDC_STATIC则对应于一个匿名控件。MFC认识这些特定的ID,并赋值于指定的行为,例如:你可以不需要编写任何代码,就可以使用“确定”按钮关闭对话框,就是这个原因。

以上内容指引你如何修改控件的属性,包括它的ID、标题以及样式。这种修改都是所见即所得的,运行程序,你就会欣喜地发现,一切确实都改过来了。

1.4 映射控件变量

好了,你现在有了一个文本编辑框,可是如何使用它,你还是一无所知。那么,我们开始学习如何将控件映射成一个变量,这个过程即“映射控件变量”,或曰“绑定控件变量”。

映射控件变量是VC的一个很好的功能,有了它,你就可以象使用一个变量一样控制控件。映射成什么类型的变量,这依赖于你的控件。一般来说,一个控件可以映射成一个值变量(Value),也可以映射成一个控件对象(Control)。如:一个文本编辑框既可以映射成一个CString值,也可以映射成一个CEdit对象,CString是个字符串,而CEdit则是MFC为文本编辑框专门准备的控件类。

1.4.1 控件 -> 值变量

我们从简单的入手,先将我们的文件路径文本编辑框映射成一个普通的值变量,按照以下操作慢慢来:

1. 在编辑框上打开右键菜单(如图7所示),选择ClassWizard…,弹出以下界面:

图9 ClassWizard窗口

有点晕。先不管别的,因为我们要映射变量,我们就选择“Member Variables”标签页, 这儿可以看到当前对话框中的所有控件,包括我们的文本框和其它两个按钮;

2. 找到我们的IDC_FLASH_FILE,双击之(或者点击“Add Variable…”按钮),就弹出了映射控件变量窗口:

图10 添加控件值变量

该界面分别要求输入变量名、类别和变量类型,不用争了,我们选择Value和CString,将IDC_FLASH_FILE映射成CString m_sFilePath。

大功告成!可以同时观察VC程序代码中的变化:

 

  1. class CFlashPlayerDlg : public CDialog   
  2. {   
  3. // …   
  4. // Dialog Data   
  5.     //{ {AFX_DATA(CFlashPlayerDlg)   
  6.     enum { IDD = IDD_FLASHPLAYER_DIALOG };   
  7.     CString m_sFilePath;   
  8.     //}}AFX_DATA   
  9. }   
  10.   
  11. CFlashPlayerDlg::CFlashPlayerDlg(CWnd* pParent /*=NULL*/)   
  12. : CDialog(CFlashPlayerDlg::IDD, pParent)   
  13. {   
  14.     //{ {AFX_DATA_INIT(CFlashPlayerDlg)   
  15.     m_sFilePath = _T("");   
  16.     //}}AFX_DATA_INIT   
  17.     // …   
  18. }   
  19.   
  20. void CFlashPlayerDlg::DoDataExchange(CDataExchange* pDX)   
  21. {   
  22.     CDialog::DoDataExchange(pDX);   
  23.     //{ {AFX_DATA_MAP(CFlashPlayerDlg)   
  24.     DDX_Text(pDX, IDC_FLASH_FILE, m_sFilePath);   
  25.     //}}AFX_DATA_MAP   
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值