VC控件指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()函数,它的函数原型如下: