Wiard控件讲解
- 格式:doc
- 大小:274.00 KB
- 文档页数:14
Wizard控件的使用Wizard控件的使用分类: AspDotNet2008-11-08 15:11 2005人阅读评论(6) 收藏举报Wizard控件的使用:Wizard控件使用多个步骤来描绘用户的输入信息,该控件内的每个步骤均会给一个StepType。
可以在当步骤到Complete时,对所有的数据进行处理。
事件:需要隐藏信息的时候,可以在中间步骤中使用WizardStepChanged事件,其它的事件如点击完成、取消、下一步和上一步的时候的事件等。
TemplateWizardStep,提供一个允许用户自定义模板生成步骤的方法。
对它的访问,不能通过像其它步骤一样的直接访问方式,二是要通过它的模板ID来访问。
所以,如果在Wizard中的步骤采用这个方式,访问数据的时候,要注意。
下边看看一般的做法:拖控件到设计视图,点击智能标签的Auto Format为其设置格式。
这里采用彩色型,Colorful。
然后是添加步骤,在智能标签中选择:Add/Remove WizardSteps...,如图:步骤中的title表示名字,其余的,AllowReturn:是否运行步骤间通信,EnableTheming:是否允许使用主题,EnableViewState:是否允许保存往返信息,SkinID:使用的皮肤ID,StepType有好几种,一般来讲,Auto会自动检测为开始步骤还是中间步骤,但是完成步骤一定要手动选择Complete。
在这里,第三步,我们使用了一个由模板步骤(TemplatedWizardStep)自定义的步骤,由于访问它的数据,需要通过其ID 来访问,使用设置ID为mb。
如图:在完成步骤,手动选择Complete,如图:完成后,步骤算是添加好了,但是每一步骤还没有具体内容。
首先解决向导的字体太小的问题。
将Wizard控件拖大,但是,这个时候,发现左边的导航和右边的内容同时增大,需要将SideBarStyle下的Width属性指定宽度,根据具体情况而指定,这里指定100px。
MultiView 和View Web 服务器控件概述发送反馈MultiView和View Web 服务器控件用作其他控件和标记的容器,并提供了一种可方便地显示信息的替换视图的方式。
本主题包括:方案背景代码示例Class Reference方案可以使用MultiView和View控件执行如下任务:根据用户选择或其他条件提供备选控件集。
例如,您可能允许用户从一个源(feed) 列表中选择,其中每个源都在独立的View控件中配置。
然后可以显示包含用户选择的源的View控件。
可以使用MultiView和View控件作为创建多个Panel控件的一种替代方法。
创建多页窗体。
MultiView和View控件可以提供与Wizard控件相似的行为。
Wizard 控件尤其适合于创建用户分步骤填写的窗体。
Wizard控件还支持更多内置UI 元素(如页眉和页脚)、“上一页”和“下一页”按钮以及模板。
如果要创建根据条件(而不是按顺序)更改的显示,或者不需要Wizard控件支持的额外功能,则可以使用MultiView控件来代替Wizard。
返回页首背景MultiView控件用作一个或多个View控件的外部容器。
View控件又可包含标记和控件的任何组合。
MultiView控件一次显示一个View控件,并公开该View控件内的标记和控件。
通过设置MultiView控件的ActiveViewIndex属性,可以指定当前可见的View控件。
呈现View 控件内容未选择某个View控件时,该控件不会呈现到页面中。
但是,每次呈现页面时都会创建所有View控件中的所有Web 服务器控件的实例,并且将这些实例的值存储为页面的视图状态的一部分。
无论是MultiView控件还是各个View控件,除当前View控件的内容外,都不会在页面中显示任何标记。
例如,这些控件不会以与Panel控件相同的方式来呈现div元素。
这些控件也不支持可以作为一个整体应用于当前View控件的外观属性。
Wizard 使用简单教程杰赛网络优化部:林明烽一、 建立一个新工程 工程基本数据:无线参数:技术参数数据整个工程的基本数据概要:新建工程完成:二、 导入地图 注:地图的边界越大,生成的地图数据也大。
所以预测前须合理的定义地图边界,请参考本节第3点(合理的定义地图边界)。
地图的原始格式:1. 更改工程的经纬度格式:2. 导入地形(terrain)数据Import地图数据Bin的计算输入East – West 和 North – South 的值:Load地图:3. 合理的定义地图边界地图的精度越高,生成的地图也大。
所以可先导入低数据精度的地图,已确定地图的合理精度,在导入正确精度的地图。
即在进行bin计算时,把地图的精度设置比实际地图的精度低数倍,如下图显示地图。
参考本章第2点(导入地形(terrain)数据。
更新地图的边界:地图的边界更新了:显示地图:保存整个工程。
4. 合理导入地形(terrain)数据确定地图的边界后,把Bin的计算按地图的实际精度输入进行计算,输入正确的East – West 和 North – South 的值,再重新倒入地形的数据(Import-)load)。
参考本章节第2点。
5. 合理导入地貌(Clutter)数据导入过程和导入地形(terrain)一样,请参考本章节第2点。
(1) 在Import过程中不同的是,如下图所示:(2) 在Load的过程中,不同的是如下图所示;三、 编辑基站数据选中Add site的功能键,在项目框内点击就可以新增一个站点了。
编辑基站参数:应用到的基站数据库包括三个文件:* .cel; * .tx; * .cdma2000。
对应如下图所示:*.cdma2000参数的编辑,其他的参数值可为默认值:*.tx文件其他参数的编辑:选择天线:*.cdma2000参数的编辑,参考上面。
链路预算:再Tx中增加3dB的馈线损耗,点击Add Component。
ATL开发复合控件1 创建工程框架1.1 创建工程框架(测试环境VC6。
0)首先得用A TL COM AppWizard向导创建一个控件框架,工程名为DemoAltControl,(如图1所示)(图1)1.2 然后点周[OK],进入项目参数设置界面,对于习惯MFC的朋友,大家给选择Supper MFC这个项(如图2所示)图21.3项目参数设置为完成点击[Finish]图31.4 项目列出所要生成的文件1.5项目为我们生成的文件如下图显示2 项目控件对象下面为我们,我们的项目控件对象2.1 选择菜单[Inert ->New A TL Object],弹出A TL Object Wizard 对话框。
2.2 从左边的Category(类别)列表中选择Controls(控件),然后选择Composite Control2.3 单击[Next]按钮弹出由四个属性页组成的A TL Object Wizard 对话框,在这里我们可以对即将创建的组件进行设置,在Name页中的Short Name 字段输入xulu向导将同步为我们设定该对象的类名,CPP文件名,头文件名,和主接口名,同时还有在注册表表中的类型名以及ProgID等等,如上图所示2.4在Attributes中属性页中选择支持Support Connection Points(连接点)选项让向导加入支持事件的代码(这个事件尤其重要)2.5 在Stock Properties属性页中对库存属性进行添加,(本文为了方便只添加了一个属性)2.6 单调[确定] 关闭A TL Object Wizard 完成控件的设置2.7 看看伟大的向导为我们生产了什么?如下图所示接口类Ixulu ,事件类_IxuluEvents2.8 我们先看一下到此为止我们做了什么东西,选择运行我们选择ActivesControl Test Contaniner 打开VC6自带测试程序在界面单击鼠右键选择插入Inert New Control选择我们刚才创建项目接口”xulu Class”然后选择[ok]测试程序将插入这个控件如下图所示,就是向导为我们做的3 添加控件3.1 为我们在VC工程中选择,资源视图,选择Dialog 下的IDD_XULU 这里创建接口时向导为我们创建的,我们在这里添加控件,首先,调整一下,这个容器的大小,使用满足我们的需要3.2为控件添加一个按钮住窗口中拖一个按钮我就不多说了吧^,^3.2 为按钮添加一个消息事件在类视图中选择CXulu右键选择“add windows Message Handler“然后选择IDC_TEST_BUTTON,再选择BN_CLICKED,然后点[add and edit]3.3为刚才生成的事件添加测试代码LRESULT OnClickedTest_button(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {// TODO : Add Code for control notification handler.::AfxMessageBox("hello ");return 0;}然后运行我们测试一下效果4 改控件的背景4.1 这次同样选择CXulu类鼠标右键选择“add windows Message Handler“,这次我们选择CXulu 为其添加WM_PAINT事件然后“add and edit”向导为我们添加也如下代码LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {// TODO : Add Code for message handler. Call DefWindowProc if necessary.return 0;}我们更改一下这个函数,为其添加代码LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {if ( ! IsIconic() )//无它会CPU会到100%{m_clrBackColor=123;//这里背景PAINTSTRUCT ps;HDC hDC = BeginPaint(&ps);RECT rcClient;GetClientRect(&rcClient);//use color, used by system for coloring titile barHBRUSH hbr=CreateSolidBrush(m_clrBackColor);FillRect(hDC,&rcClient,hbr);TextOut(hDC,0,0,"test textout ",strlen("test textout"));DeleteObject(hbr);EndPaint(&ps);bHandled=TRUE;}return 1;}4.2 运行一下,看看我们的测试效果4.3 因为我们前面已经加入了库存属性的背景色,所以我们可以不用写这行代码“m_clrBackColor=123;//这里背景”我们把它去掉测试一下我们使用[Edit]菜单下为更改控件的背景操作如下在菜单EDIT->Porperties。
第9章基本控件使用9.1 编辑框类9.1.1 编辑框类的结构及方法编辑框控件看起来是个非常简单的矩形窗口,但它具有许多功能。
编辑框控件有两种形式:单行编辑框控件和多行编辑框控件。
MFC在类Cedit中提供标准的Windows编辑框控件服务,Cedit是CWnd类直接派生来的,它具有CWnd的所有功能,其在MFC类库中的层次位置如下图:象大多数包含标准Windows控件的MFC类一样,Cedit类的结构比较复杂。
当创建Cedit 类的对象时,MFC自动赋予该对象一个标准的Windows编辑框控件,它定义了CEdit对象,其中包括方法原型。
CEdit类的定义源代码如P206所示。
9.1.2 编辑框类的应用实例例题:使用MFC AppWizard创建如下图所示的基于对话窗的应用程序,实现算术运算的计算器功能。
1.使用AppWizard建立应用程序框架2.使用资源编辑器建立对话框void CCalculatorDlg::OnButton1(){char aa[10],bb[10];double a,b,c;char cBuffer[50];m_a.GetWindowText(aa,10);m_b.GetWindowText(bb,10);a=atof((LPCTSTR)aa);//将字符串aa转化成数值存入a中b=atof((LPCTSTR)bb);// L表示long指针,P表示指针,C表示常量,T表示Win32宏c=a+b;_gcvt(c,10,cBuffer);//将浮点数据c转换成字符串存入cBuffer数组中m_c.SetWindowText(cBuffer);//UpdateData(FALSE);}void CCalculatorDlg::OnButton2(){char aa[10],bb[10];double a,b,c;char cBuffer[50];m_a.GetWindowText(aa,10);m_b.GetWindowText(bb,10);a=atof((LPCTSTR)aa);//将字符串aa转化成数值存入a中b=atof((LPCTSTR)bb);// L表示long指针,P表示指针,C表示常量,T表示Win32宏c=a-b;_gcvt(c,10,cBuffer);//将浮点数据c转换成字符串存入cBuffer数组中m_c.SetWindowText(cBuffer);//UpdateData(FALSE);}void CCalculatorDlg::OnButton3(){char aa[10],bb[10];double a,b,c;char cBuffer[50];m_a.GetWindowText(aa,10);m_b.GetWindowText(bb,10);a=atof((LPCTSTR)aa);//将字符串aa转化成数值存入a中b=atof((LPCTSTR)bb);// L表示long指针,P表示指针,C表示常量,T表示Win32宏c=a*b;_gcvt(c,10,cBuffer);//将浮点数据c转换成字符串存入cBuffer数组中m_c.SetWindowText(cBuffer);//UpdateData(FALSE);}void CCalculatorDlg::OnButton4(){char aa[10],bb[10];double a,b,c;char cBuffer[50];m_a.GetWindowText(aa,10);m_b.GetWindowText(bb,10);a=atof((LPCTSTR)aa);//将字符串aa转化成数值存入a中b=atof((LPCTSTR)bb);// L表示long指针,P表示指针,C表示常量,T表示Win32宏c=a/b;_gcvt(c,10,cBuffer);//将浮点数据c转换成字符串存入cBuffer数组中m_c.SetWindowText(cBuffer);//UpdateData(FALSE);}void CCalculatorDlg::OnButton5(){m_a.SetSel(0,-1);m_a.ReplaceSel("");m_b.SetSel(0,-1);m_b.ReplaceSel("");m_c.SetSel(0,-1);m_c.ReplaceSel("");//UpdateData(FALSE);}void CCalculatorDlg::OnButton6(){OnOK();}9.2 菜单类9.2.1 菜单菜单允许用户用一种标准的方法与Windows应用程序进行交互:一个样式一致的用户界面对象——菜单栏。
对话框来添加和修改学生基本信息,如图。
[例Ex_Ctrl6SDI] 创建并使用学生基本信息对话框(1)用MFC AppWizard(exe)创建一个默认的单文档应用程序Ex_Ctrl6SDI。
创建此对话框类为CStuInfoDlg。
(3)将[OK]和[Cancel]按钮的标题改为“确定”和“取消”。
(4)打开对话框网格,参看图的控件布局,为对话框添加如表所示的一些控件。
(1)打开ClassWizard的Member Variables页面,看看Class name是否是CStuInfoDlg,选中所需的控件ID号,双击鼠标。
依次为下列控件增加成员变量。
如表所示。
(2)为CStuInfoDlg类添加一个BOOL型成员变量m_bMale,并在CStuInfoDlg类设置该变量的初始值。
如下面的代码:CStuInfoDlg::CStuInfoDlg(CWnd* pParent /*=NULL*/): CDialog(CStuInfoDlg::IDD, pParent){m_bMale = FALSE;//{{AFX_DATA_INIT(CStuInfoDlg)…//}}AFX_DATA_INIT}代码中,//{{AFX_DATA_INIT(CStuInfoDlg)和//}}AFX_DATA_INIT之间的代码是控件变量的初始化代码,并由MFC ClassWizard自动管理。
(3)用MFC ClassWizard为CStuInfoDlg类添加WM_INITDIALOG消息映射,并添加下列初始化代码:BOOL CStuInfoDlg::OnInitDialog(){CDialog::OnInitDialog();// 设置单选按钮初始选中状态if (!m_bMale)CheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_FEMALE);elseCheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_MALE);// 这里对专业组合框进行初如化m_comboSpecial.AddString( "机械工程及其自动化" );m_comboSpecial.AddString( "电气工程及其自动化" );m_comboSpecial.AddString( "计算机科学" );m_strSpecial = "计算机科学";// 对出生年月初始化m_tBirth = CTime(1986, 1, 1, 0, 0, 0);UpdateData(FALSE);return TRUE; // return TRUE unless you set the focus to a control }(4)用MFC ClassWizard为单选按钮IDC_RADIO_MALE添加BN_CLICKED的消息映射,并增加下列代码:void CStuInfoDlg::OnRadioMale(){m_bMale = TRUE;}(5)用MFC ClassWizard为单选按钮IDC_RADIO_FEMALE添加BN_CLICKED的消息映射,并增加下列代码:void CStuInfoDlg::OnRadioFemale(){m_bMale = FALSE;}(6)用MFC ClassWizard为按钮IDOK添加BN_CLICKED的消息映射,并增加下列代码:void CStuInfoDlg::OnOK(){UpdateData();m_strName.TrimLeft();m_strNo.TrimLeft();if (m_strName.IsEmpty())MessageBox("必须要有姓名!");else if (m_strNo.IsEmpty())MessageBox("必须要有学号!");elseCDialog::OnOK();}(1)打开Ex_Ctrl6SDI单文档应用程序的菜单资源,添加顶层菜单项“测试(&T)”,在其下添加一个菜单项“学生基本信息(&U)”,ID为ID_TEST_STUINFO。
使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。
在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。
所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。
Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。
表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。
Windows标准控件在以下环境下提供:•Windows 95•Windows NT 3.51及以后版本•Win32s 1.3•注意:•Visual C++ 4.2及以后版本不再支持Win32s。
(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。
这种控件过去被称为OLE 控件。
本书将在专门的章节中来讲述关于ActiveX控件的知识。
这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。
(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:•类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。
•类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。
•类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。
在本章我们仅讲述第一类控件,即Windows标准控件。
所涉及的内容包括各个控件的使用及相应的技巧。
第3章常用控件控件是在系统内部定义的用于和用户交互的基本单元。
在所有的控件中,根据它们的使用及Visual C++6.0对其支持的情况,可以把控件分为Windows普通控件(如编辑框、列表框、组合框等)、MFC扩展控件和ActiveX控件。
ActiveX控件可以理解成是一个OLE(Object Linking and Embedding,对象连接与嵌入)组件,它既可用于Windows应用程序中,也可用于Web页面中。
本单重点介绍在MFC应用程序中经常使用的控件,主要有静态控件、按纽、编辑框、列表框、组合框、滚动条、进展条、旋转按纽控件、滑动条、日期时间控件、列表控件和树控件。
3.1 创建和使用控件在MFC应用程序中使用控件不仅简化编程,还能完成各种常用功能。
为了更好地发挥控件的作用,还必须理解和掌握控件的属性、消息以及创建和使用的方法。
3.1.1 控件的创建方法控件的创建方式有以下两种:一种是在对话框模板中用编辑器指定控件,也就是说,将对话框看作控件的父窗口。
这样做的好处是显而易见的,因为当应用程序启动该对话框时,Windows系统就会为对话框创建控件,而当对话框消失时,控件也随之清除。
另一种是编程方式,即调用MFC相应控件类的成员函数Create来创建,并在Create函数指定控件的父窗口指针。
例如,下面的示例过程是使用编程方式来创建一个按纽。
【例3.1】创建一个名为CreateButton的基于对话框的应用程序,用编程方式创建一个对话框,并在对话框上安装一个按纽控件。
制作步骤如下:1 创建基于对话框的应用程序CreateButton。
2. 将项目工作区切换到ClassView选项卡,展开所有结点,右击CCreateButtonDlg类名,弹出快捷菜单。
从快捷菜单中选择Add Member Variable(添加成员变量)命令。
对出现的对话框,作以下操作:(1)在Variable Type(变量类型)编辑框中输入CButton(MFC按纽类)。
Panel控件的应用Panel控件是一个容器控件,可以用来动态建立控件或者显示和隐藏在Panel控件中的控件。
一、技术要点分析Panel控件常用属性如下:1、BackImageUrl属性:设置获取的背景图像2、Horizontalalign属性:设置获取在该控件中控件的排列位置3、Wrap属性:可以确定当行的长度超过面板宽度时该控件的项是否自动在下一行继续Login控件常用属性如下:1、UserName属性:获取用户输入的用户名2、Password属性:获取用户输入的密码;3、RememberMeSet属性:获取或设置一个值,指示是否将持久性身份验证Cookie 发送到用户的浏览器4、DestinationPageUrl属性:获取或设置在登录成功时向用户显示的页面URL5、FailureAction属性:获取或设置在登录失败时发生的操作CreateUserWizard控件常用属性如下:1、UserName属性:获取用户输入的用户名2、Password属性:获取用户输入的密码;3、ConfirmPassword属性:获取用户输入的第二个密码4、Email属性:获取或设置用户输入的电子邮件地址5、Question属性:获取或设置用户输入的密码恢复确认问题6、Answer属性:获取或设置最终用户对密码的恢复确认问题的答案7、ConfirmPasswordRequiredErrorMessage属性:获取或设置当前用户将确认密码文本框留空时所显示的错误信息8、EmailRegularExpression属性:获取或设置用于验证提供的电子邮件地址的正则表达式9、PasswordRegularExpression属性:获取或设置用于验证提供的密码的正则表达式10、QuestionAndAnswerRequired属性:获取一个值,指示用户是否必须输入密码确认问题和答案11、QuestionRequiredErrorMessage属性:获取或设置由于用户未输入密码确认问题而显示的错误信息12、UserNameRequiredErrorMessage属性:获取或设置当用户名文本框留空时所显示的错误消息二、实现过程1、绘制表格(3行1列)2、输入说明性文字3、添加三个超链接控件LinkButton(会员登录界面,会员注册界面,密码修改界面)4、在表格的第三行添加三个Panel控件,控件里分别放置Login,CreateUserWizard和ChangePassword控件并设置Panel.Visible = false5、添加代码三、======================华丽分割线,各函数代码如下======================?[Copy to clipboard]Download itaosha-com.txtprotected void LinkButton1_Click(object sender, EventArgs e)//会员登录界面{Panel1.Visible=true;Panel2.Visible=false;Panel3.Visible=false;}protected void LinkButton2_Click(object sender, EventArgs e)//会员注册界面{Panel1.Visible=false;Panel2.Visible=true;Panel3.Visible=false;}protected void LinkButton3_Click(object sender, EventArgs e)//密码修改界面{Panel1.Visible=false;Panel2.Visible=false;Panel3.Visible=true;}四、截图1、PageLoad2、Login3、CreateUserWizard4、ChangePassword。
控件示例1■第一步用AppWizard建立一个基于对话框的MFC应用程序。
将新建工程命名为TestCtrl1,在AppWizard的Step 1对话框中选择Dialog based选项,其它按照默认设置。
AppWizard自动建立一个作为应用程序主窗口的对话框模板IDD_TESTCTRL1_DIALOG及其对应的对话框类CTestCtrl1Dlg。
提示:对该对话框的使用与普通对话框并没有什么不同,只不过在程序启动后对话框会自动显示出来,而当用户关闭对话框后,应用程序也就终止了。
如果读者观察CTestCtrl1App::InitInstance函数就会发现,该函数调用DoModal来显示一个CTestCtrl1Dlg对话框,并使m_pMainWnd指针指向CTestCtrl1Dlg对象,从而使该对话框成为程序的主窗口。
■第二步设计IDD_TESTCTRL1_DIALOG对话框模板。
删除该模板上除Cancel按钮以外的控件。
并根据图6.2和表6.5,向IDD_TESTCTRL1_DIALOG对话框模板中加入控件。
表6.5 控件属性控件类型ID 标题其他属性静态图片IDC_STATIC_BITMAP Type列表框选择Bitmap 选中Center image属性静态文本IDC_STATIC_TITLE 标题缺省组框缺省选择图片缺省单选按钮IDC_RADIO1 女士选中Group属性单选按钮IDC_RADIO2 夫妇缺省组框缺省选择标题缺省单选按钮IDC_RADIO3 女士选中Group属性单选按钮IDC_RADIO4 夫妇缺省组框缺省改变缺省复选框IDC_CHECK1 同时改变缺省命令按钮IDC_BUTTON_ALTER 修改选中Default button属性命令按钮IDCANCEL 关闭缺省提示:因为顺序添加的单选按钮被看成是一组,该组中只有一个单选按钮能被选中;而本例中IDC_RADIO1和IDC_RADIO2为一组,IDC_RADIO3和IDC_RADIO4为一组,因此一定要选中IDC_RADIO3的Group属性。
VC常用控件简介传统控件的用法:.1.1 传统控件的控件通知消息控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息.传统控件的通知消息实际上是通过WM_COMMAND消息发给父窗口的(滚动条除外),在该消息的wParam中含有通知消息码(如BN_CLICKED)和控件的ID,在lParam中则包含了控件的句柄.利用ClassWizard可以很容易地为控件通知消息加入消息映射和消息处理函数,这在上一章中已经演示过了.传统控件的消息映射宏是ON_XXXX,其中XXXX表示通知消息码,如BN_CLICKED.ON_XXXX消息映射如下所示,该宏有两个参数,一个是控件的ID,一个是消息处理函数名.ON_XXXX(nID, memberFxn)消息处理函数的声明应该有如下形式:afx_msg void memberFxn( );例如,某按钮的BN_CLICKED消息的消息映射及其处理函数的声明如下所示ON_BN_CLICKED(IDC_ADD,OnAdd)afx_msg void OnAdd( );有时,为了处理方便,需要把多个ID连续的控件发出的相同消息映射到同一个处理函数上.这就要用到ON_CONTROL_RANGE宏.ON_CONTROL_RANGE消息映射宏的第一个参数是控件消息码,第二和第三个参数分别指明了一组连续的控件ID中的头一个和最后一个ID,最后一个参数是消息处理函数名。
例如,要处理一组单选按钮发出的BN_CLICKED消息,相应的消息映射如下所示:ON_CONTROL_RANGE(BN_CLICKED, IDC_FIRST, IDC_LAST, OnRadioClicked)函数OnRadioClicked的声明如下,该函数比上面的OnAdd多了一个参数nID以说明发送通知消息的控件ID.afx_msg void OnRadioClicked(UINT nID);ClassWizard不支持ON_CONTROL_RANGE宏,所以需要手工建立消息映射和消息处理函数.提示:事实上,在使用ClassWizard时只要运用一个小小的技巧,就可以把不同控件的通知消息映射到同一个处理函数上,也可以把一个控件的不同通知消息映射到同一个处理函数上.这个技巧就是在用ClassWizard创建消息处理函数时,指定相同的函数名即可.此方法的优点在于控件的ID不必是连续的,缺点是处理函数没有nID参数,因而不能确定是哪一个控件发送的消息.6.1.2 静态控件静态控件包括静态正文(Static Text)和图片控件(Picture)。
1.membership简介membership,真的很有趣,很方便,很有用。
介绍给大家。
在 应用程序中,Membership 类用于验证用户凭据并管理用户设置(如密码和电子邮件地址)。
Membership 类可以独自使用,或者与FormsAuthentication 一起使用以创建一个完整的Web 应用程序或网站的用户身份验证系统。
Login 控件封装了Membership 类,从而提供一种便捷的用户验证机制。
Membership 类提供的功能可用于:1)创建新用户。
2)将成员资格信息(用户名、密码、电子邮件地址及支持数据)存储在Microsoft SQL Server 或其他类似的数据存储区。
3)对访问网站的用户进行身份验证。
可以以编程方式对用户进行身份验证,也可以使用Login 控件创建一个只需很少代码或无需代码的完整的身份验证系统。
4)管理密码。
包括创建、更改、检索和重置密码等等。
可以选择配置 成员资格以要求一个密码提示问题及其答案来对忘记密码的用户的密码重置和检索请求进行身份验证。
默认情况下, 成员资格可支持所有 应用程序。
默认成员资格提供程序为SqlMembershipProvider 并在计算机配置中以名称AspNetSqlProvider 指定。
SqlMembershipProvider 的默认实例配置为连接到Microsoft SQL Server 的一个本地实例。
2.membership在sql server中的设置要使用membership,需要对数据库进行一些设置,使用过membership的朋友知道,数据库中有一些固有的表、视图和存储过程,我们自己的表中没有这些东西。
不过,我们可以通过向导来创建它们,那就是aspnet_regsql.exe,一般来说它位于:C:\WINDOWS\\Framework\v2.0.50727(我的就在这里)它既可以创建数据库中的选项,也可以移除这些设置。
wpf wizard用法(二)WPF Wizard用法WPF Wizard是一种常用的界面设计模式,主要用于分步引导用户完成复杂任务或流程。
本文将介绍几种使用WPF Wizard的常见用法,方便开发者快速上手。
创建WPF Wizard使用WPF Wizard需要借助或其他界面库来实现。
以下是创建WPF Wizard的基本步骤:1.在XAML文件中添加一个Grid控件,作为Wizard的根容器。
2.添加一个TabControl控件,用于切换显示不同步骤的内容。
3.在TabControl中添加多个TabItem,每个TabItem代表一个步骤。
4.在每个TabItem中,添加对应的内容,可使用Grid来布局控件。
5.设置TabControl的样式,通常设置为只显示选中的TabItem。
实现步骤切换按钮为了使用户可以方便地在不同步骤之间切换,可以在界面中添加步骤切换按钮。
以下是相关实现步骤:1.在每个步骤的TabItem中添加两个按钮,一个用于上一步,一个用于下一步。
2.在按钮的Click事件中,通过设置TabControl的SelectedIndex属性实现步骤的切换。
参考代码:<Button Content="Next" Click="NextButton_Click" /> <Button Content="Previous" Click="PreviousButton_Click" />private void NextButton_Click(object sender, RoutedEvent Args e){int currentIndex = ;if (currentIndex < - 1){= currentIndex + 1;}}private void PreviousButton_Click(object sender, RoutedE ventArgs e){int currentIndex = ;if (currentIndex > 0)= currentIndex - 1;}}实现数据校验在每个步骤完成后,通常需要对用户输入的数据进行校验。
17.1.2Wizard控件(1)Wizard控件远比MultiView控件更富魅力。
它同样支持每次显示几个视图中的一个,但它还包含一系列自定义的内建行为,包括导航按钮、带有分步链接的侧栏、样式和模板。
通常,向导表示一个任务,用户在其间进行线性移动,从当前步骤前进到下一步(或者在做更正时退回到上一步)。
的Wizard控件还支持非线性导航,也就是说,它允许你根据用户提供的信息忽略某些步骤。
默认情况下,Wizard控件提供导航按钮并在左边提供一个带有每个步骤链接的侧栏。
设置Wizard.DisplaySideBar属性为false可以隐藏侧栏。
一般情况下,当需要强制线性导航并阻止用户跳离固定的次序时,会用到这样的设置。
你可以用任意的HTML控件或 控件来提供每一步骤的内容。
图17-4显示了Wizard的编辑区域,你可以向已生成的Wizard实例添加内容。
1. 向导步骤在里创建向导,只需用<asp:WizardStep>标签定义它们的步骤和内容即可。
每个步骤都有一些基本信息。
表17-2显示了一些重要的属性。
表17-2向导步骤属性属性描述Title步骤的描述性名称。
这个名称用在侧栏作为链接显示的文字Step Type步骤的类型,它的值来自WizardStepType枚举。
这个值确定要为这个步骤显示的导航按钮的类型。
可选项包括Start(显示Next按钮)、Step(显示Next和Previous按钮)、Finish(显示Finish和Previous按钮)、Complete(不显示按钮,如果启用了侧栏也会把它隐藏)、Auto(步骤的类型按它在集合中的位置推断)。
默认值是Auto,它表示第一个步骤是Start,最后一个步骤是Finish ,所有其他步骤是StepAllo wReturn 表示用户是否可以重新回到这一步。
如果为false ,用户通过这一步之后,就再也不能返回这里。
侧栏里的链接对这个步骤不起作用,它的下一步骤的Previous 按钮要么跳过这一步,要么彻底隐藏(依赖于前一个步骤设置的AllowReturn 值)下面的向导包括四个步骤,它们一起组成一个问卷。
问卷结束时添加了Complete 步骤,它显示一些汇总信息。
导航按钮和侧栏链接是自动加入的。
图17-5显示了向导步骤。
和MultiView控件不同,在Visual Studio页面的设计界面里你每次只能看到一个步骤。
从智能标签里选择你要设计的步骤,如图17-6所示。
不过要注意--每次这样做的时候,Visual Studio会把Wizard.ActiveStepIndex改成当前你选择的步骤。
运行应用程序前一定要把它设为0,这样向导才会从第一步开始。
注解请记住,当你往向导的步骤中加入控件时,无论是哪一步骤,控件总会在视图状态中被实例化并持久化。
如果你希望简化复杂的向导,需要把它们分解到几个单独的页面里,使用Server.Transfer()方法从一个页面跳转到另一个,但同时要忍受一个并不美观的编程模型。
7.1.2Wizard控件(2)2. 向导事件你可以编写响应几个事件(如表17-3所示)的代码来增强你的向导。
表17-3向导事件事件描述ActiveStep Changed控件切换到一个新步骤时发生(也许是因为用户单击了导航按钮,也可能是因为代码修改了ActiveStepIndex属性)CancelButt onClickCancel按钮被单击时发生。
默认情况下不会显示Cancel按钮,但你可以设置Wizard.DisplayCancelBut ton属性把它添加到每一个步骤。
通常,单击Cancel按钮会退出向导。
如果你不需要执行任何清理代码,只要设置CancelDestinationPageU rl属性,向导就会自动执行重定向FinishButtonClickFinish按钮被单击时发生NextButto nClick和在任意步骤中,当Next按钮或Previous按钮被单击时发生。
不过,因PreviousB uttonClick 为有不止一种方式可以从一个步骤跳到下一个,所以最好是处理ActiveStepChanged事件SideBarBut tonClick侧栏区域里的按钮被单击时发生总体而言,有两种类型的向导编程模型。
逐步提交。
如果每个向导步骤包含一个不可回撤的原子操作,就应该采用逐步提交。
例如,如果你处理的订单信息涉及信用卡授权,在这之后是最终的购买,你就不能允许用户回退到上一步重新编辑信用卡号。
要支持这种模型,就需要把某些或所有步骤的AllowReturn 属性设为false,并且响应ActiveStepChanged事件为每个步骤提交变更。
最后提交。
如果向导的每个步骤是为最后要执行的操作收集数据,就应该使用最后提交。
例如,你正在收集用户信息并在获得所有信息后创建一个新账号,用户就很可能在整个过程中做一些修改。
你在向导结束时通过响应FinishButtonClick事件来执行创建新账号的代码。
要为当前示例实现最后提交,只要响应FinishButtonClick事件即可。
下例在汇总信息里显示了用户的所有选择:要让这段代码正常工作,你必须加入一个叫做lblSummary的Label控件。
在本例中,lblSummary被放置在最后的汇总步骤中。
提示如果你希望知道用户在向导里执行的是哪一个步骤,可以使用Wizard.GetHistory()方法。
它返回目前已经被访问的WizardStepBase对象集合,按时间反向排序。
也就是说,集合的第一项代表前一个步骤,第二项代表前一个步骤之前的那一个,等等。
3. 向导样式和模板毫无疑问,Wizard控件最强大的功能是允许你定制外观。
也就是说,如果你想要用基本模型(带有导航按钮和各种事件的多步过程),就不会受限于默认的用户界面。
根据你希望对向导外观修改程度的不同,你有不同的选择。
对于不大的修改,可以设置各种最上层的属性。
例如,和其他 控件一样,你可以控制颜色、字体、空格以及边框样式。
你还可以调整每个按钮的外观。
例如,要修改Next按钮,可以使用这些属性:StepNextButtonType(使用按钮、链接或可单击的图片)、StepNextButtonText(定制按钮或链接的文字)、StepNextButtonImageUrl(设置用于图片按钮的图片)、StepNextButtonStyle(使用样式表里的样式)。
你还可以通过HeaderText属性添加标题。
利用样式可获得更多控制。
就像你可以用样式格式化富数据控件(如GridView)的各个部分那样,你也可以用样式格式化Wizard 控件的各个部分。
表17-4列出了你可以使用的样式。
和其他基于样式的控件一样,样式冲突时,较具体的样式设置(如SideBarStyle)会覆盖一般的样式设置(如ControlStyle)。
类似地,在第一个步骤里,StartNextButtonStyle会覆盖NavigationButtonStyle。
表17-4向导样式样式描述ControlStyle作用于Wizard控件的所有区域HeaderStyle作用于Wizard控件的标题区域,它只在你设置了HeaderText属性后可见SideBarStyle作用于Wizard控件的侧栏区域SideBarButtonStyle只作用于侧栏里的按钮StepStyle作用于控件中你定义步骤内容的区域NavigationStyl e作用于控件的底部显示导航按钮的区域NavigationButt onStyle只作用于导航区域的导航按钮StartNextButto nStyle作用于第一个步骤里的“下一步”导航按钮(StepType为Start 时)StepNextButto nStyle作用于中间步骤的“下一步”导航按钮(StepType为Step时)StepPreviousB uttonStyle作用于中间步骤的“上一步”导航按钮(StepType为Step时)FinishPrevious ButtonStyle作用于最后一个步骤的“上一步”导航按钮(StepType为Finish时)CancelButtonS tyle如果你把Wizard.DisplayCancelButto n设为true,它作用于“取消”按钮最后,如果不能通过属性和样式达到你期望的自定义级别,还可以借助模板完全定义Wizard控件的外观。
通常,你只会为步骤的内容提供标记(如图17-1所示)。
通过使用模板,你还可以为其他区域提供标记,如标题、侧栏或者按钮。
所有的模板都是独立于步骤内容而声明的。
图17-7显示了Wizard控件中适合使用模板的地方。
表17-5显示了模板的完整列表。
表17-5向导模板样式描述HeaderTempla te定义标题区域的内容SideBarTempla te定义侧栏,它通常包含每个步骤的导航链接StartNavigatio定义第一个步骤的导航按钮nTemplate(当StepType 为Start 时)StepNavigationTemplate 定义中间步骤的导航按钮(当StepType 为Step时)FinishNavigationTemplate 定义最后一个步骤的导航按钮(当StepType 为Finish 时)例如,下面这个标题模板使用数据绑定表达式显示当前步骤的标题:还可以加入下列模板来定制导航按钮。
这个示例保留了标准按钮(通过显式声明)并加入了一些斜体文字,这样你可以看到每个模板什么时候在使用。
使用模板的秘决在于确保使用正确的命令名,这样Wizard控件可以关联到标准逻辑。
否则,你将不得不自己实现导航和排序的代码,它们冗长且易出错。
例如,单击一个命令名为MoveNext的按钮,会自动跳转到下一步。
如果你不太确信要使用什么样的命令名,可以借助一个方便的快捷方式。
在Visual Studio里选中Wizard控件,从智能标签中选择某个生成模板的链接,比如"转换为StartNavigationTemplate",此时Visual Studio会插入一个模板,这个模板会重现默认的按钮外观和行为。
注解可以毫无问题地在Wizard里使用验证控件。
如果验证控件发现了无效数据,它们将阻止用户单击侧栏的所有链接(跳到其他步骤里)并防止用户单击"下一步"按钮继续操作。
不过,默认情况下"上一步"按钮的CausesValidation属性被设置为false,也就是说用户将被允许回到前一个步骤。
如果这不是你希望的行为,那么可以创建自己的自定义模板并相应地设置控件的CausesValidation属性。