vc之控件篇
- 格式:doc
- 大小:899.00 KB
- 文档页数:34
VCMFC中的CComboBox控件使用详解VC/MFC中的CComboBox控件使用详解CComboBox控件详解CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list).CComboBox控件的常用设置属性说明:type属性:里面一共有三个选项.就是其三种形式, 我们常用的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,而droplist 为静态控件.Data属性:当程序初始化的时候,下拉列表将显示其属性里面的内容,内容用分号分隔.其属性只支持后2中形式,Sort 属性:对添加到下拉列表框中的数据自动进行排序,如果你不想他改变你的显示序列,把他设置成False.控件是一个窗口.其基类是为CWnd.所以CComboBox也可以使用CWnd的一些函数,它自己的函数有30几种.我写了一个示范程序,演示了一些常用的函数,你可以参考其代码看到其功能.注:m_cbox 为CComboBox控件的关联变量,m_end为EDIT控件的关联变量1.GetCount() 函数:用以获得列表框中的选项数目. int GetCount() const;(此乃函数原型,我会列在每条的后面) 下面的例子是程序中各个按钮里面的代码int i;CString str;i=m_cbox.GetCount();str.Format ("%d",i);m_end="一共有"+str+"个数据";UpdateData(FALSE);2.GetCurSel() 函数:用以得到用户选中下拉列表框中数据的索引值.返回的值是重0开始的,如果没有选择任何选项将会返回-1 Int GetCurSel() constint i;CString str;i=m_cbox.GetCurSel ();str.Format ("%d",i+1);if (i==-1) m_end="你什么都没有选";else m_end="你选的是第"+str+"项";UpdateData(FALSE);3.SetCurSel函数:选取列表框中的一个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使用这个函数;if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i为int型变量用以计数else {m_cbox.SetCurSel (-1);m_i=0;}4.SetEditSel函数:设置编辑区中蓝色选中字段的长度, BOOL SetEditSel( intnStartChar,int nEndChar ); nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有一个对应的函数GetEditSel是取得其位置,在此不详解.m_cbox.SetEditSel (3,5);//在编辑框中打入一串数字在按此按钮就能看到效果//其作用就是选中第3到第5个字符作为热点5.Clear() Cut() Paste() Copy() 这四个函数我放在一起说,因为他们都是针对编辑框中选定的文字进行编辑的函数,很多初学者很不明白这4个函数,使用这些函数没有作用,其实不然,这些函数对于在编辑框中的内容不进行处理,他真正处理的是你用鼠标选中的内容,对于Clear()函数很多书中解释都是有误的,很多书中对他的解释是清除当前选中的文本,我认为这样的解释是有歧异的,真正的解释是把你刚选中的文本释放掉,也就是不选,而不是把选中的删除,真正的删除选中的文本的函数是Cut(),Copy()是复制选中的文本,Paste()是粘贴到光标处.其演示就不写在程序中,有兴趣的朋友可以自己试试.6.LimitText()函数.其作用是限制在编辑框中键入的文本长度,BOOL LimitText(int nMaxChars); 当nMaxChars为0时,不是不能输入,而是长度最大化为65535字节7.GetLBText()函数.其原型为void GetLBText( int nIndex, CString&rString ).nIndex为列表框中数据的索引值,rString 为字符串,其作用就是把索引号为nIndex的数据放到rString变量中.与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为nIndex中数据的长度m_cbox.GetLBT ext (2,m_end); // GetLBText按钮UpdateData(0);CString str; //GetLBTextLen按钮int i=m_cbox.GetLBTextLen (2);str.Format ("%d",i);m_end=str;UpdateData(FALSE);8.AddString() DeleteString() InsertString() ResetContent() 四个函数放在一起,他们都是针对下拉列表框的处理函数, AddString(LPCTSTR lpszString) 是在列表框的尾巴添加一条数据,参数为字符串. DeleteString(UINT nIndex)为删除指定索引为nIndex的数据. InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex处插入IpszString的内容. ResetContent()是清除列表框中所有的内容.9.SetDroppedWidth(UINT nWidth) 函数.用于设定下拉列表框的最小宽度,当下拉列表框中的数据很长不能完全显示时,我们可以使用这个函数把列表框的宽度设置的大些.同样GetDroppedWidth()是返回列表框的宽度.以下为总结了各大论坛中对CCombBox控件使用的问题.并给出了正解.1.关于CComboBox在对话框中没有下拉项目的问题答: 资源编辑器中对话框中CComboBox组件的垂直范围拉大了下,就看见字体了,看到那个向下的黑箭头了吗,点他下拉,嘿嘿就这么简单.2.请问怎样能让CCombobox记住用户的输入.下次使用时还有答: 要记住用户的输入必须用到文件读写,或者把内容添加到注册表中,我会在以后给出解决办法.3. CCOMBOBOX如何使它只读,不能编辑答: 看了本文的介绍也许你现在知道了, CCOMBOBOX有三种类型的,选择你需要的吧!4. 我要让界面一显示,就能在Combo框中显示默认的数据答: 你要在OnInitDialog里面加上我上面所提到的SetCurSel()函数就行了.5. 如何把选好的内容赋给变量答: 先给CCOMBOBOX设置一个CString关联变量,再添加事件处理函数CBN_ Selchange.使用UpdateData(FALSE)就行了.6. 在CComboBox组合框中,条目的对齐方式是左对齐,能设置为对中或者右对齐吗?答: 没有直接的方法,你必须自己对齐, 比如最大长度是10int i;String.Format("%10d", i);CComboBox->AddStringVC combobox 使用大全 ---------------------------------------------------一、如何添加/删除Combo Box内容1. 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
VC6.0中控件及按钮的设置和使用VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ) ; //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
VC中使用TABControl控件VC中使用TAB Control控件假如我现在有个SDI程序,View是Form View,想在上面放个Tab Control,包含两个Page。
现在让我们来看看应该怎样处理。
首先当然要增加一个Tab Control资源,然后利用Class Wizard,在View中增加一个Control变量。
接着建立两个对话框资源,别忘了把Style改为Child,Border 改为None。
然后就可以在上面加其他控件了。
接着利用Class Wizard,分别为这两个对话框建立两个类,比如CPage1和CPage2。
然后在View类头文件中,加入这两个对话框对象。
同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。
为了避免用户在切换Tab时,程序对Tab Index的枚举,可以利用数组来做这个事情。
在View的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面,等等。
void CTab_testView::OnInitialUpdate(){CFormView::OnInitialUpdate(); GetParent()-RecalcLayout(); ResizeParentToFit();//为Tab Control增加两个页面m_tab.InsertItem(0, _T(“First"));m_tab.InsertItem(1, _T("Second")); //创建两个对话框m_page2.Create(IDD___, m_tab); //设定在Tab内显示的范围CRect rc;m_tab.GetClientRect(rc);rc.top += 20;rc.bottom -= 8;rc.left += 8;rc.right -= 8;m_page1.MoveWindow(rc);m_page2.MoveWindow(rc);//把对话框对象指针保存起来pDialog = m_page1;pDialog = m_page2;//显示初始页面pDialog-ShowWindow(SW_SHOW);pDialog-ShowWindow(SW_HIDE);//保存当前选择m_CurSelTab = 0;}这里面需要注意的是,我用了一个CDialog指针数组来进行保存,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。
1.表头控制Header Control2.图像列表控制Image List3.列表控制和视List Control&List View4.树控制和视Tree Control&Tree View5.标签控制和视Tab Control&Tab View6.工具条控制Toolbar Control7.进度条控制Progress Control8.滑动条控制Slider Control9.旋转按钮控制Spin Button Control10.状态条控制Status Bar Control其中,绝大部分通用控制在MFC类库中都存在两种封装形式,即控制类和视类,控制类主要是供直接使用控制而提供的,而视类则是通过间接使用控制而提供的,视类可以更好地把控制类集成到MFC结构中,并且使用视类可以利用引用直接对嵌套在其中的控制进行各种操作。
两者在使用方法上没有太大区别,就拿列表控制类和视类来说,当创建列表视后可通过CListCtrl& ctrlList =GetListCtrl()成员函数取得视类引用ctrlList之后,就可以利用列表视的视函数对视进行各项操作(ctrlList.Add等)。
第1章演练CHeadCtrl表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。
一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。
表头控制类提供了普通表头控制的基本方法,只有在WINDOWS95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(CTabCtrl)和列表控制(CListCtrl)组合使用。
1.1 表头控制的对象结构1.1.1 表头控制对象的建立方法CHeaderCtrl &cheaderCtrl 建立表头控制对象Create 建立表头并绑定对象CHeaderCtrl::Create的格式如下:BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nID );其返回值非零时初始化成功,否则失败。
VC中FlexGrid控件的使用及合并单元格、可编辑操作!1. 给FlexGrid控件绑定成员变量:m_FlexGrid。
2. 设置行列数m_FlexGrid.SetCols(4); //设置列数m_FlexGrid.SetRows(6); //设置行数3. 设置固定行数和固定列数m_FlexGrid.SetFixedRows(1); //设置固定行数为1行m_FlexGrid.SetFixedCols(0); //设置固定列数为0列4. 设置列宽、行高m_FlexGrid.SetColWidth(1,1500); //设置列号为1的列宽为1500m_FlexGrid.SetRowHeight(2,300); //设置行号为2的行高为3005. 设置文本对齐方式m_FlexGrid.SetColAlignment(1,4); //设置列号为1的文本对齐方式参数对应描述为:0 单元内容顶部左对齐。
1 单元内容中间左对齐。
对字符串的缺省设置值。
2 单元内容底部左对齐。
3 单元内容顶部居中。
4 单元内容中间居中。
5 单元内容底部居中。
6 单元内容顶部右对齐。
7 单元内容中间右对齐。
对数字的缺省设置值。
8 单元内容底部右对齐。
9 单元内容一般对齐方式。
对字符串中间左对齐而对数值中间右对齐。
6. 设置表头和单元格内容m_FlexGrid.SetTextArray(0,"Head1"); //设置表头(第1列)内容为“Head1”m_FlexGrid.SetTextMatrix(1,1,"Text"); //设置单元格(行号1列号1)内容为“Text”7. 增加一行m_FlexGrid.AddItem("AddString",(COleVariant)(3L)); //在行号为3的位置增加一行8. 合并单元格for(i=0;i<4;i++)m_FlexGrid.SetTextMatrix(5,i,"合计"); //将行号为5、列号从0到4的单元格内容设为相同“合计”m_FlexGrid.SetMergeCells(2); //设置单元格合并方式(下述)m_FlexGrid.SetMergeRow(5,TRUE); //设置要合并的行SetMergeCells函数的参数值如下:0: flexMergeNever 默认的选项,就是不合并1: flexMergeFree 不规则的合并2: flexMergeRestrictRows 行合并3: flexMergeRestrictColumns 列合并4: flexMergeRestrictBoth 行,列都合并注意只有单元格内容相同时才能进行合并操作。
vc tab控件的用法
VC中的Tab控件是一种用于创建多页面的用户界面(UI)的工具。
它可以让用户在不同的页面之间切换,以便更好地管理和显示不同的内容。
要使用VC中的Tab控件,您需要执行以下步骤:
1. 在您的VC项目中添加Tab控件。
您可以在Visual Studio的设计视图中直接从工具箱中拖动Tab控件到您的UI中,或者您也可以手动编写代码来创建Tab 控件。
2. 配置Tab控件的属性。
您可以通过属性窗口来设置Tab控件的属性,例如Tab 页的样式、位置、大小等。
3. 添加Tab页。
您可以使用Tab控件的“Pages”属性来添加Tab页。
每个Tab 页都是一个单独的窗口,可以包含您想要显示的内容。
4. 在每个Tab页中添加控件。
您可以在每个T ab页中添加其他控件,例如按钮、文本框、标签等,以便用户可以与页面进行交互。
5. 编写事件处理程序。
您需要编写事件处理程序来处理用户与Tab控件的交互,例如当用户单击一个Tab页时,您可能需要显示不同的内容。
总之,VC中的Tab控件是一种非常有用的工具,可以让您创建复杂的UI,并在不同的页面中显示不同的内容。
如果您想要在您的应用程序中使用Tab控件,请参考VC的文档或教程以获取更多信息。
1。
V C++基础控件案例图详解-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN一.简单MFC应用程序开发。
例1. 编写如下图的程序,若单击“复制”按钮,则把上面的编辑框中的内容复制到下面的编辑框中;若单击“结束”按钮,则退出程序的运行。
(1)工程创建①选择“文件|新建”命令;②在“工程”选项卡中,选定“MFC App Wizard(exe),输入工程名称TEST,单击“确定”按钮;③选定“D基本对话框”即创建基于对话框的应用程序,单击“完成”按钮。
(2)放置控件,先删除原有的控件,然后放置本例需要的控件,本例共涉及4个控件:2个编辑框和2个命令按钮。
编辑框主要用来输入数据,也可以用来显示数据;命令按钮用来执行有关操作。
(3)设置控件的属性,控件添加后就要设置其有关的属性。
上编辑框的属性设置:选定“Multiline”复选框,编辑框中可以输入多行文本;选定“Vertical scroll和Auto VScroll,编辑框将有垂直滚动条;选定“Want Return”。
下编辑框的属性设置同上编辑框,但可不选定“Want Return”。
(4)连接变量,为控件连接变量就是为控件起一个名字。
每一个控件都是一个对象,调用MFC类库中的函数都是通过对象来实现的。
编辑框属于CEdit类,一个具体的编辑框就是一个CEdit类的对象,如上IDC_EDIT1和IDC_EDIT2。
这些对象必须有名称才能对它们进行操作,所以要给每一个对象连接一个变量,作为对象的名称。
这个变量将成为类中的一个数据成员。
现在为IDC_EDIT1连接一个变量m_e1。
①在IDC_EDIT1编辑框中右击鼠标出现快捷菜单选择“建立类向导”,如下图所示。
②在上图中选择“创建类向导”后,弹出如下图所示的MFC ClassWizard对话框,在“Member Variables”中,选定“IDC_EDIT1”,再选择“Add Variable”按钮。
5.复选框单选框下面以一个具体的例子演示复选框和单选框的用法。
(1)利用应用程序向导新建一个基于对话框的程序Ex040105b。
(2)在对话框上加一个静态文本框和两个单选框,标题分别是“性别”、“男”、“女”,第一个单选框选中群组(Group)属性,按下Ctrl+T组合键测试一下,是否只能选“男”或“女”。
(3)利用类向导,为第一个单选框增加一个整型的成员变量m_iSex。
(4)增加1个静态文本框和3个复选框,标题分别是“个人爱好”、“中国象棋”、“上网聊天”和“电脑游戏”。
(5)双击“确定”按钮增加响应函数,具体代码如下:void CEx040105bDlg::OnOK(){CDialog::OnOK();CString strMess ;if(0 == m_iSex)strMess = "你是帅哥\n";else if(1 == m_iSex)strMess = "你是美女\n";elsestrMess = "性别未知\n";//复选框也可以关联变量,如果关联的变量值为true表示被选中,此处用另外一种方法。
strMess += "---------------\n你的受好\n";CButton * pBtn = NULL ;pBtn = (CButton * )GetDlgItem(IDC_CHECK1);if(NULL != pBtn && pBtn->GetCheck())strMess += "中国象棋\n";pBtn = (CButton * )GetDlgItem(IDC_CHECK2);if(NULL != pBtn && pBtn->GetCheck())strMess += "上网聊天\n";pBtn = (CButton * )GetDlgItem(IDC_CHECK3);if(NULL != pBtn && pBtn->GetCheck())strMess += "电脑游戏\n";AfxMessageBox(strMess);}(6)为了美观,可以加一个群组控件,并把对话框的标题改成“个人信息”,按Ctrl + F5组合键创建并运行Ex040105b.exe,效果如图4-9所示。
VC中Tabcontrol控件的⽤法详细解析新建⼀个MFC⼯程, 取名MyTab, 选择Dialog based, 然后Finish.删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles⾥勾上Bottom. 调速尺⼨使其布满整个对话框, 我这边Tab Control的尺⼨最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.在对话框的初始化函数OnInitDialog⾥⾯添加如下代码:m_tab.InsertItem(0,"参数⼀"); //添加参数⼀选项卡m_tab.InsertItem(1,"参数⼆"); //添加参数⼆选项卡m_tab.InsertItem(2,"结果"); //添加结果选项卡在对话框资源⾥⾯添加三个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2, IDD_RESULT. 字体为宋体, 字号为9, style 为Child, Border为None, 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult.在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个⼦对话框的实例. 代码如下:CResult m_result;CPara2 m_para2;CPara1 m_para1;在IDD_PARA1对话框上添加静态⽂本控件内容为"参数⼀" 再在后⾯插⼊⼀个⽂本框控件, ⽤ClassWizard将其关联为⼀个int型变量,名为m_nPara1;在IDD_PARA2对话框上添加静态⽂本控件内容为"参数⼆" 再在后⾯插⼊⼀个⽂本框控件, ⽤ClassWizard将其关联为⼀个int型变量,名为m_nPara2;在IDD_RESULT对话框上添加静态⽂本控件内容为"结果" 再在后⾯插⼊⼀个⽂本框控件, ⽤ClassWizard将其关联为⼀个int型变量,名为m_nResult;为CPara1类添加成员函数int GetParaValue() 代码如下:复制代码代码如下:int CPara1::GetParaValue()...{return m_nPara1;}为CPara2类添加成员函数int GetParaValue() 代码如下:复制代码代码如下:int CPara2::GetParaValue()...{return m_nPara2;}为CResult类添加成员函数void SetResultValue(int nResult) 代码如下:复制代码代码如下:void CResult::SetResultValue(int nResult)...{m_nResult= nResult;}在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog⾥⾯添加如下代码:复制代码代码如下://关联对话框,并且将IDC_TABTEST控件设为⽗窗⼝m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST));m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST));m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST));//获得IDC_TABTEST客户区⼤⼩CRect rs;m_tab.GetClientRect(&rs);//调整⼦对话框在⽗窗⼝中的位置rs.top+=1;rs.bottom-=60;rs.left+=1;rs.right-=2;//设置⼦对话框尺⼨并移动到指定位置m_para1.MoveWindow(&rs);m_para2.MoveWindow(&rs);m_result.MoveWindow(&rs);//分别设置隐藏和显⽰m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);//设置默认的选项卡m_tab.SetCurSel(0);添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下:复制代码代码如下:int CurSel= m_tab.GetCurSel();switch(CurSel)...{case0:m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);break;case1:m_para1.ShowWindow(false);m_para2.ShowWindow(true);m_result.ShowWindow(false);break;case2:m_para1.ShowWindow(false);m_para2.ShowWindow(false);m_result.ShowWindow(true);break;default:}*pResult= 0;在IDD_MYTAB_DIALOG对话框下⾯添加⼀个按钮, 标题为"计算" 为其添加事件响应函数, 代码如下:复制代码代码如下:m_para1.UpdateData(true);m_para2.UpdateData(true);m_result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue());m_result.UpdateData(false);这个⼩程序很简单,但是他说明了Tab Control控件的基本⽤法.1://关联对话框,并且将IDC_TABTEST控件设为⽗窗⼝(⽅法2)m_para1.SetParent(GetDlgItem(IDC_TABTEST));m_para2.SetParent(GetDlgItem(IDC_TABTEST));m_result.SetParent(GetDlgItem(IDC_TABTEST));2://获得IDC_TABTEST客户区⼤⼩CRect rs;m_tab.GetClientRect(&rs);//调整⼦对话框在⽗窗⼝中的位置rs.top+=1;rs.bottom-=60;rs.left+=1;rs.right-=2;这⾥⼀点要注意:调整距离,否则,⼦对话框将覆盖Tab control控件,将不能显⽰将出现这中情况://调整⼦对话框在⽗窗⼝中的位置如下rs.top+=20;rs.bottom-=20;rs.left+=20;rs.right-=20;哈哈,注意啊。
VC++ 列表控件(CList) 使用方法(2)列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nI D );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用intInsertItem( intnItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn( intnCol, LPCTSTR lpszColumnHeading, intnFormat , intnWidth, i ntnSubItem);可以插入列。
VCMFC之ListCtrl控件使用经验总结本文将从创建ListCtrl控件、数据的插入、删除和修改、列表项的选择和排序等方面,总结一些经验和注意事项。
一、创建ListCtrl控件创建ListCtrl控件的方法有很多,下面介绍两种常用的方法。
2. 动态创建ListCtrl控件:可以通过CListCtrl类的Create函数来动态创建ListCtrl控件。
例如:```cppCListCtrl m_listCtrl;m_listCtrl.Create(WS_CHILD , WS_VISIBLE , LVS_REPORT, CRect(0, 0, 500, 300), this, IDC_LIST_CTRL);```此外,还可以通过控件向导创建ListCtrl控件,控件向导在创建ListCtrl控件时会生成相关的代码。
二、数据的插入、删除和修改1.插入数据:可以使用InsertItem函数向ListCtrl控件中插入新的项。
例如:```cppm_listCtrl.InsertItem(0, _T("Item 1"));2.删除数据:可以使用DeleteItem函数删除ListCtrl控件中的其中一项。
例如:```cppm_listCtrl.DeleteItem(0);```3.修改数据:可以通过SetItemText函数修改ListCtrl控件中其中一项的文字。
例如:```cppm_listCtrl.SetItemText(0, 1, _T("Modified Item"));```三、列表项的选择和排序1.列表项的选择:可以使用GetNextItem函数和SetItemState函数来获取和设置ListCtrl控件中的选中项。
例如:```cppint nItem = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);m_listCtrl.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);2.列表项的排序:可以使用SortItems函数对ListCtrl控件中的数据进行排序。
VC控件资料汇总--------列表控件1、编辑对话框2、编辑位图三、添加变量四、添加代码(红色部分)BOOL CCListCtrlDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization here//创建列表视图窗口m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,0);//向图像列表中添加图标m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));//将图像列表关联到列表视图控件中m_list.SetImageList(&m_imagelist,LVSIL_NORMAL );//向列表视图中添加数据m_list.InsertItem(0,"长江",0);m_list.InsertItem(1,"黄河",1);m_list.InsertItem(2,"泰山",2);return TRUE; // return TRUE unless you set the focus to a control}五、编译六、运行七、函数说明1、CListCtrl::SetImageList函数说明CImageList* SetImageList(CImageList*pImageList,int nImageListType)pImageList:图像列表指针nImageListType:标识图像列表类型功能:关联图像列表控件和列表视图。
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)。
VC之控件篇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网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序文件的Ini tInstance()函数头部加上以下语句即可:查看源代码拷贝至剪贴板打印代码1.BOOL CFlashPlayerApp::InitInstance()2.{3. AfxEnableControlContainer();4.5.#ifdef _AFXDLL6. Enable3dControls(); // Call this when using MFC in a shared DLL7.#else8. Enable3dControlsStatic(); // Call this when linking to MFC statically9.#endif10.11.//…12.}B O O L CFl ashPl ayer App::I ni t I nst a{Af xEnabl eCont r ol Cont ai ne#i f def_AFXD LL对话框准备好了,缺省情况下,它总会自动带上3个控件:2个按钮,“确定”与“取消”和一个“TOD O: 在这里设置对话控制” 文本标签。
vc tab控件的用法VC++中的Tab控件是一种常见的界面控件,用于创建多页式的界面布局。
Tab控件通常用于将多个相关的控件或页面分组显示,以便用户可以通过切换选项卡来轻松切换内容。
使用Tab控件需要进行以下步骤:1.在资源编辑器中添加一个Tab控件。
选择项目中的对话框文件,然后在工具箱中选择Tab控件,并拖动到对话框上。
2.添加多个对话框资源作为选项卡中的各个页。
在资源编辑器中,右击Tab控件,选择添加页。
可以在每个页上放置需要的控件。
3.在代码中关联Tab控件的变量。
在对话框类的头文件中,添加一个成员变量,类型为CTabCtrl,用于表示Tab控件。
4.通过DDX_Control宏或手动获取对Tab控件的指针。
在对话框的DoDataExchange函数中,通过DDX_Control宏将对Tab控件的关联,或者使用GetDlgItem函数手动获取Tab控件的指针。
5.在初始化对话框时,添加选项卡页。
在OnInitDialog函数中,使用Tab控件的InsertItem函数添加选项卡页,并设置选项卡的文本。
6.处理选项卡切换事件。
可以在Tab控件的响应函数中处理选项卡切换事件,通过GetCurSel函数获取当前选中的页索引,然后根据索引显示相应的页内容。
拓展:Tab控件还可以进行一些其他的设置和操作,例如设置选项卡的颜色、字体、图标等,显示或隐藏选项卡的边框,禁用某个选项卡等。
此外,还可以通过自定义页控件实现更灵活的界面布局。
通过继承CDialog或CFormView类,并在资源编辑器中添加自定义的对话框资源作为选项卡页,可以自由地设计和布局每个选项卡的内容。
总之,Tab控件是一种方便实现多页式界面布局的控件,通过在资源编辑器中添加多个对话框作为选项卡页,然后在代码中进行关联和处理,可以实现切换选项卡来切换内容的功能。
VC中Microsoft FlexGrid控件的使用及合并单元格、可编辑操作1.给FlexGrid控件绑定成员变量:m_FlexGrid。
2. 设置行列数m_FlexGrid.SetCols(4; //设置列数m_FlexGrid.SetRows(6; //设置行数3. 设置固定行数和固定列数m_FlexGrid.SetFixedRows(1; //设置固定行数为1行m_FlexGrid.SetFixedCols(0; //设置固定列数为0列4. 设置列宽、行高m_FlexGrid.SetColWidth(1,1500; //设置列号为1的列宽为1500 m_FlexGrid.SetRowHeight(2,300; //设置行号为2的行高为300 5. 设置文本对齐方式m_FlexGrid.SetColAlignment(1,4; //设置列号为1的文本对齐方式参数对应描述为:0 单元内容顶部左对齐。
1 单元内容中间左对齐。
对字符串的缺省设置值。
2 单元内容底部左对齐。
3 单元内容顶部居中。
4 单元内容中间居中。
5 单元内容底部居中。
6 单元内容顶部右对齐。
7 单元内容中间右对齐。
对数字的缺省设置值。
8 单元内容底部右对齐。
9 单元内容一般对齐方式。
对字符串中间左对齐而对数值中间右对齐。
6. 设置表头和单元格内容m_FlexGrid.SetTextArray(0,"Head1"; //设置表头(第1列内容为“Head1”m_FlexGrid.SetTextMatrix(1,1,"Text"; //设置单元格(行号1列号1内容为“Text”7. 增加一行m_FlexGrid.AddItem("AddString",(COleVariant(3L; //在行号为3的位置增加一行8. 合并单元格for(i=0;i<4;i++m_FlexGrid.SetTextMatrix(5,i,"合计"; //将行号为5、列号从0到4的单元格内容设为相同“合计”m_FlexGrid.SetMergeCells(2; //设置单元格合并方式(下述m_FlexGrid.SetMergeRow(5,TRUE; //设置要合并的行SetMergeCells函数的参数值如下:0: flexMergeNever 默认的选项,就是不合并1: flexMergeFree 不规则的合并2: flexMergeRestrictRows 行合并3: flexMergeRestrictColumns 列合并4: flexMergeRestrictBoth 行,列都合并注意只有单元格内容相同时才能进行合并操作。
VC中静态控件的特殊用法使用visualc6.0编制软件时,静态控件是最常用的控件之一。
一般情况下,静态控件用作那些没有固定标题文本属性的控件(如文本编辑控件、列表框等)的标签,或者用来为控件分组,或者用来显示一些提示性的文件。
实际上,静态控件除了显示静态文本这一基本功能外,还有许多其他的特殊功能,如在静态控件中可以显示图标、位图,甚至还可以在静态控件中显示动画。
本文将通过示例程序来介绍静态控件的这些特殊用法。
⑴使用Appwizard创建一个基于对话框的mFc应用程序,设置其工程名为ShowIco。
⑵在对话框上增加一个静态控件。
需要注意的是,有资源管理器添加的静态控件在默认情况下其ID均为IDc_StAtIc,因此,如果需要在程序中区分和操纵各个不同的静态控件,一般情况下,需要更改新添加的静态控件的ID值。
这里将静态控件的ID值设置为IDc_ShowIco。
⑶在资源管理器中添加图标资源,其ID为IDI_IcoN1。
⑷使用classwizard添加wm_INItDIALog消息处理函数onInitDialog。
⑸在onInitDialog函数中下面的代码://获得指向静态控件的指针cStatic*pStatic=(cStatic*)getDlgItem(IDc_ShowIco);//加载图标hIcoNhIcon=AfxgetApp()->LoadIcon(IDI_IcoN1);//设置静态控件的样式,使其可以使用图标,并试图标显示使居中pStatic->modifyStyle(0xF,SS_IcoN|SS_cENtERImAgE); //设置静态控件图标pStatic->SetIcon(hIcon);运行该程序,显示如图1所示。
图1使用静态控件显示图标2.显示位图⑴使用Appwizard创建一个基于对话框的mFc应用程序,设置其工程名为ShowBmp。
⑵在对话框上增加一个静态控件,将静态控件的ID值设置为IDc_ShowBmp。
VC之控件篇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网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序文件的Ini tInstance()函数头部加上以下语句即可:查看源代码拷贝至剪贴板打印代码1.BOOL CFlashPlayerApp::InitInstance()2.{3. AfxEnableControlContainer();4.5.#ifdef _AFXDLL6. Enable3dControls(); // Call this when using MFC in a shared DLL7.#else8. Enable3dControlsStatic(); // Call this when linking to MFC statically9.#endif10.11.//…12.}B O O L CFl ashPl ayer App::I ni t I nst a{Af xEnabl eCont r ol Cont ai ne#i f def_AFXD LL对话框准备好了,缺省情况下,它总会自动带上3个控件:2个按钮,“确定”与“取消”和一个“TOD O: 在这里设置对话控制” 文本标签。
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_STAT IC(它的值是-1),每个对话框的控件的ID都必须唯一,不能重复。
一些特定的ID代表特定的含义,如:IDOK对应于“确定”按钮,IDCANCEL对应于“取消”按钮,IDC_STATIC则对应于一个匿名控件。
MFC认识这些特定的ID,并赋值于指定的行为,例如:你可以不需要编写任何代码,就可以使用“确定”按钮关闭对话框,就是这个原因。
以上内容指引你如何修改控件的属性,包括它的ID、标题以及样式。
这种修改都是所见即所得的,运行程序,你就会欣喜地发现,一切确实都改过来了。
1.4 映射控件变量好了,你现在有了一个文本编辑框,可是如何使用它,你还是一无所知。
那么,我们开始学习如何将控件映射成一个变量,这个过程即“映射控件变量”,或曰“绑定控件变量”。
映射控件变量是VC的一个很好的功能,有了它,你就可以象使用一个变量一样控制控件。
映射成什么类型的变量,这依赖于你的控件。
一般来说,一个控件可以映射成一个值变量(Val ue),也可以映射成一个控件对象(Control)。
如:一个文本编辑框既可以映射成一个CSt ring值,也可以映射成一个CEdit对象,CString是个字符串,而CEdit则是MFC为文本编辑框专门准备的控件类。
1.4.1 控件-> 值变量我们从简单的入手,先将我们的文件路径文本编辑框映射成一个普通的值变量,按照以下操作慢慢来:1. 在编辑框上打开右键菜单(如图7所示),选择ClassWizard…,弹出以下界面:图9 ClassWizard窗口有点晕。
先不管别的,因为我们要映射变量,我们就选择“Member Variables”标签页,这儿可以看到当前对话框中的所有控件,包括我们的文本框和其它两个按钮;2. 找到我们的IDC_FLASH_FILE,双击之(或者点击“Add Variable…”按钮),就弹出了映射控件变量窗口:图10 添加控件值变量该界面分别要求输入变量名、类别和变量类型,不用争了,我们选择Value和CString,将I DC_FLASH_FILE映射成CString m_sFilePath。
大功告成!可以同时观察VC程序代码中的变化:查看源代码拷贝至剪贴板打印代码1.class CFlashPlayerDlg : public CDialog2.{3.// …4.// Dialog Data5. //{{AFX_DATA(CFlashPlayerDlg)6. enum { IDD = IDD_FLASHPLAYER_DIALOG };7. CString m_sFilePath;8. //}}AFX_DATA9.}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_INIT17. // …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_MAP26.}cl ass CFl ashPl ayer D l g :publ i c C{//…//D i al og D at a下面我们先试试这个CString m_sFilePath的使用,如:查看源代码拷贝至剪贴板打印代码1.BOOL CFlashPlayerDlg::OnInitDialog()2.{3. CDialog::OnInitDialog();4. m_sFilePath = "空即是色";5. // …6.}B O O L CFl ashPl ayer D l g::O nI ni t D i al o{CD i al og::O nI ni t D i al og();m_sFi l ePat h= "空即是色遗憾的是,以上的代码是没用的!与Visual Basic不同,在VC的世界里,映射的值变量与实际控件的内容并不保持同步,欲使用映射的值变量就必须额外地使用到UpdateData()函数,它的函数原型如下:查看源代码拷贝至剪贴板打印代码1.CWnd::UpdateData2.BOOL UpdateData( BOOL bSaveAndValidate = TRUE );CW nd::U pdat eD at aB O O L U pdat eD at a(B O O L bSaveA简单地说,UpdateData(TRUE)读取对话框中各控件的内容,并及时反映到其映射值中去;U pdateData(FALSE)则恰恰相反,它将当前映射值反映到控件中去,如:在文本框里面显示你刚刚设置的字符串“空即是色”。
我们现在是要通过变量修改控件,因此,我们采用UpdateData(FALSE),以上的代码修改成:查看源代码拷贝至剪贴板打印代码1.BOOL CFlashPlayerDlg::OnInitDialog()2.{3. CDialog::OnInitDialog();4. m_sFilePath = "请点击“浏览”按钮选择文件!";5. UpdateData(FALSE);6. // …7.}B O O L CFl ashPl ayer D l g::O nI ni t D i al o{CD i al og::O nI ni t D i al og();m_sFi l ePat h= "请点击“现在的运行界面就可以看到m_sFilePath的内容了:图11 使用映射变量修改文本编辑框的内容UpdateData ()如何知道哪些控件与哪些变量映射,靠的是DoDataExchange(),读者没必要对DoDataExchange()了解更多,但注意不要随便手动修改DoDataExchange()中的代码。
1.4.2 控件-> 控件对象与值变量不同,如果映射变量是一个控件对象,那么就没有必要调用UpdateData ()来完成同步。