VC控件指南

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC控件

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()函数头部加上以下语句即可:

BOOL CFlashPlayerApp::InitInstance()

{ AfxEnableControlContainer();

#ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL

#else Enable3dControlsStatic(); // Call this when linking to MFC statically

#endif

//…

}

对话框准备好了,缺省情况下,它总会自动带上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_STA TIC则对应于一个匿名控件。MFC认识这些特定的ID,并赋值于指定的行为,例如:你可以不需要编写任何代码,就可以使用“确定”按钮关闭对话框,就是这个原因。

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

1.4 映射控件变量

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

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

1.4.1 控件-> 值变量

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

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

图9 ClassWizard窗口

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

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

图10 添加控件值变量

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

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

class CFlashPlayerDlg : public CDialog

{ // … // Dialog Data

//{{AFX_DATA(CFlashPlayerDlg)

enum { IDD = IDD_FLASHPLAYER_DIALOG };

CString m_sFilePath;

//}}AFX_DA TA }

CFlashPlayerDlg::CFlashPlayerDlg(CWnd* pParent /*=NULL*/) : CDialog(CFlashPlayerDlg::IDD, pParent)

{ //{{AFX_DA TA_INIT(CFlashPlayerDlg)

m_sFilePath = _T("");

//}}AFX_DATA_INIT

// …

}

void CFlashPlayerDlg::DoDataExchange(CDataExchange* pDX)

{ CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CFlashPlayerDlg)

DDX_Text(pDX, IDC_FLASH_FILE, m_sFilePath);

//}}AFX_DATA_MAP

}

下面我们先试试这个CString m_sFilePath的使用,如:

BOOL CFlashPlayerDlg::OnInitDialog()

{ CDialog::OnInitDialog(); m_sFilePath = "空即是色"; // …

}

遗憾的是,以上的代码是没用的!与Visual Basic不同,在VC的世界里,映射的值变量与实际控件的内容并不保持同步,欲使用映射的值变量就必须额外地使用到UpdateData()函数,它的函数原型如下:

相关文档
最新文档