控件上机指导书.docx

上传人:b****7 文档编号:10215973 上传时间:2023-02-09 格式:DOCX 页数:26 大小:57.37KB
下载 相关 举报
控件上机指导书.docx_第1页
第1页 / 共26页
控件上机指导书.docx_第2页
第2页 / 共26页
控件上机指导书.docx_第3页
第3页 / 共26页
控件上机指导书.docx_第4页
第4页 / 共26页
控件上机指导书.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

控件上机指导书.docx

《控件上机指导书.docx》由会员分享,可在线阅读,更多相关《控件上机指导书.docx(26页珍藏版)》请在冰豆网上搜索。

控件上机指导书.docx

控件上机指导书

控件示例1

■第一步用AppWizard建立一个基于对话框的MFC应用程序。

将新建工程命名为TestCtrl1,在AppWizard的Step1对话框中选择Dialogbased选项,其它按照默认设置。

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

选中Centerimage属性

静态文本

IDC_STATIC_TITLE

标题

缺省

组框

缺省

选择图片

缺省

单选按钮

IDC_RADIO1

女士

选中Group属性

单选按钮

IDC_RADIO2

夫妇

缺省

组框

缺省

选择标题

缺省

单选按钮

IDC_RADIO3

女士

选中Group属性

单选按钮

IDC_RADIO4

夫妇

缺省

组框

缺省

改变

缺省

复选框

IDC_CHECK1

同时改变

缺省

命令按钮

IDC_BUTTON_ALTER

修改

选中Defaultbutton属性

命令按钮

IDCANCEL

关闭

缺省

提示:

因为顺序添加的单选按钮被看成是一组,该组中只有一个单选按钮能被选中;而本例中IDC_RADIO1和IDC_RADIO2为一组,IDC_RADIO3和IDC_RADIO4为一组,因此一定要选中IDC_RADIO3的Group属性。

■第三步利用“InsertResource”对话框为应用程序添加位图。

添加位图资源的方法是:

选择【Insert】、【Resource】或使用组合键【Ctrl+R】,打开“InsertResource”对话框,在“ResourceType”中选择“Bitmap”,单击【Import】按钮,打开“ImportResource”对话框,浏览并选择要添加的bmp文件,单击【Import】按钮系统就会自动为当前应用程序添加一个位图资源,位图编辑器随之打开,第一个位图资源的默认ID为IDB_BITMPA1,可以在其属性对话框中修改。

用这种方法添加两个位图资源,ID分别为IDB_BITMPA1和IDB_BITMPA2。

■第四步利用ClassWizard为CTestCtrl1Dlg类添加控件关联变量,如表6.6所示。

表6.6CTestCtrl1Dlg类的控件关联变量

控件ID

变量类型

变量名

IDC_CHECK1

CButton

m_ctrCheck

IDC_STATIC_BITMAP

CStatic

m_ctrBmp

IDC_STATIC_TITLE

CString

m_strTitle

■第五步为CTestCtrl1Dlg类添加成员变量,如表6.7所示。

表6.7CTestCtrl1Dlg类成员变量

变量类型

变量名称

用途

BOOL

m_pBool

记录图片控件显示的是哪个位图

CBitmap

m_cBmp

加载位图

■第六步用ClassWizard为CTestCtrl1Dlg类添加控件消息处理函数,如表6.8所示。

表6.8CTestCtrl1Dlg的控件通知消息处理函数

控件ID

消息

消息处理函数

IDC_RADIO1

BN_CLICKED

OnRadio1(缺省名)

IDC_RADIO2

BN_CLICKED

OnRadio2(缺省名)

IDC_RADIO3

BN_CLICKED

OnRadio3(缺省名)

IDC_RADIO4

BN_CLICKED

OnRadio4(缺省名)

IDC_BUTTON_ALTER

BN_CLICKED

OnButtonAlter(缺省名)

■第七步编写CTestCtrl1Dlg:

:

OnRadio1()消息处理函数。

voidCTestCtrl1Dlg:

:

OnRadio1()

{

if(!

m_pBool)

{

m_cBmp.DeleteObject();//从内存中删除与m_cBmp关联的GDI结构

m_cBmp.LoadBitmap(IDB_BITMAP1);//加载位图1

m_ctrBmp.SetBitmap(HBITMAP(m_cBmp));//在图片控件中显示位图1

m_pBool=true;//记录图片控件中显示的是位图1

}

}

■第八步编写CTestCtrl1Dlg:

:

OnRadio2()消息处理函数。

voidCTestCtrl1Dlg:

:

OnRadio2()

{

if(m_pBool)

{

m_cBmp.DeleteObject();//从内存中删除与m_cBmp关联的GDI结构

m_cBmp.LoadBitmap(IDB_BITMAP2);//加载位图2

m_ctrBmp.SetBitmap(HBITMAP(m_cBmp));//在图片控件中显示位图2

m_pBool=false;//记录图片控件中显示的是位图2

}

}

■第九步编写CTestCtrl1Dlg:

:

OnRadio3()消息处理函数。

voidCTestCtrl1Dlg:

:

OnRadio3()

{

CButton*pBtn=(CButton*)GetDlgItem(IDC_RADIO3);

//获取单选按钮IDC_RADIO3控件的窗口指针

pBtn->GetWindowText(m_strTitle);

//获得IDC_RADIO3的标题,并赋给静态文本框的字符串型关联变量

UpdateData(false);//将数据从文本框的关联变量传至控件显示

}

■第十步编写CTestCtrl1Dlg:

:

OnRadio4()消息处理函数。

voidCTestCtrl1Dlg:

:

OnRadio4()

{

CButton*pBtn=(CButton*)GetDlgItem(IDC_RADIO4);

pBtn->GetWindowText(m_strTitle);

UpdateData(false);

}

■第十一步编辑CTestCtrl1Dlg:

:

OnButtonAlter()消息处理函数。

voidCTestCtrl1Dlg:

:

OnButtonAlter()

{

intn=m_ctrCheck.GetState();//获取复选框IDC_CHECK1的选择状态

if(m_pBool)//若之前显示的是位图1,则改变为显示位图2

{

CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);

//把IDC_RADIO2设为选中状态

m_cBmp.DeleteObject();

m_cBmp.LoadBitmap(IDB_BITMAP2);

m_ctrBmp.SetBitmap(HBITMAP(m_cBmp));

m_pBool=false;

if(n==1)//若复选框为选中状态,则改变静态文本框的内容,并改变单选按钮状态

{

CButton*pBtn=(CButton*)GetDlgItem(IDC_RADIO4);

pBtn->GetWindowText(m_strTitle);

CheckRadioButton(IDC_RADIO3,IDC_RADIO4,IDC_RADIO4);

//把IDC_RADIO4设为选中状态

UpdateData(false);

}

}

else//若之前显示的是位图2,则改变为显示位图1

{

CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);

//把IDC_RADIO1设为选中状态

m_cBmp.DeleteObject();

m_cBmp.LoadBitmap(IDB_BITMAP1);

m_ctrBmp.SetBitmap(HBITMAP(m_cBmp));

m_pBool=true;

if(n==1)//若复选框为选中状态,则改变静态文本框的内容,并改变单选按钮状态

{

CButton*pBtn=(CButton*)GetDlgItem(IDC_RADIO3);

pBtn->GetWindowText(m_strTitle);

CheckRadioButton(IDC_RADIO3,IDC_RADIO4,IDC_RADIO3);

//把IDC_RADIO3设为选中状态

UpdateData(false);

}

}

}

■第十二步修改对话框初始化函数CTestCtrl1Dlg:

:

OnInitDialog()。

添加如下代码:

BOOLCTestCtrl1Dlg:

:

OnInitDialog()

{……

m_cBmp.LoadBitmap(IDB_BITMAP1);//加载位图1

m_ctrBmp.SetBitmap(HBITMAP(m_cBmp));//显示位图1

m_pBool=true;//记录图片控件显示的是位图1

CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);//将IDC_RADIO1设为选中状态

CheckRadioButton(IDC_RADIO3,IDC_RADIO4,IDC_RADIO3);//将IDC_RADIO3设为选中状态

CButton*pBtn=(CButton*)GetDlgItem(IDC_RADIO3);

pBtn->GetWindowText(m_strTitle);//将静态文本的内容设置为IDC_RADIO3的标题

UpdateData(false);//将数据从文本框的关联变量传至控件显示

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

■第十三步创建和运行TestCtrl1.exe应用程序。

控件示例2

■第一步用AppWizard建立一个基于对话框的MFC应用程序。

AppWizard会自动建立一个用于应用程序主窗口的对话框模板IDD_TESTCTRL2_DIALOG及其对应的对话框类CTestCtrl2Dlg。

■第二步设计IDD_TESTCTRL2_DIALOG对话框模板。

将该模板上除Cancel按钮以外的控件都删除掉,并根据图6.7和表6.22,向对话框模板中加入控件。

表6.22控件属性

控件类型

ID

标题

其他属性

静态文本

缺省

姓名:

缺省

静态文本

缺省

年龄:

缺省

静态文本

IDC_STATIC_INDICATOR

缺省

静态文本

缺省

记录:

缺省

静态文本

缺省

选择:

缺省

组合框

IDC_COMBO_BOX

缺省

组框

缺省

性别:

缺省

单选按钮

IDC_RADIO_BOY

缺省

单选按钮

IDC_RADIO_GIRL

缺省

列表框

IDC_LIST_BOX

在Selection栏中选择Extended,去掉Sort属性

编辑框

IDC_EDIT_MULTI

选择Multiline,Verticalscroll,AutoVScroll和Wantreturn属性

滚动条

IDC_SCROLLBAR

缺省

命令按钮

IDC_BUTTON_ADD

添加

缺省

命令按钮

IDC_BUTTON_ALTER

修改

缺省

命令按钮

IDC_BUTTON_DELETE

删除

缺省

命令按钮

ID_BUTTON_CLEAR

清除

缺省

命令按钮

IDCANCEL

关闭

缺省

■第三步利用ClassWizard为CTestCtrl2Dlg类加入成员变量,如表6.23所示:

表6.23CTestCtrl2Dlg类的成员变量

控件ID

变量类型

变量名

IDC_COMBO_BOX

CString

m_strName

IDC_COMBO_BOX

CComboBox

m_comboBox

IDC_EDIT_MULTI

CEdit

m_multiEdit

IDC_LIST_BOX

CListBox

m_listBox

IDC_SCROLLBAR

CScrollBar

m_scrollBar

IDC_STATIC_INDICATOR

CString

m_strAge

IDC_STATIC_INDICATOR

CStatic

m_Indicator

■第四步用ClassWizard为CTestCtrl2Dlg类加入通知消息处理函数,如表6.24所示。

表6.24CTestCtrl2Dlg的通知消息处理函数

对象ID

消息

消息处理函数

IDC_BUTTON_ADD

BN_CLICKED

OnButtonAdd(缺省名)

IDC_BUTTON_ALTER

BN_CLICKED

OnButtonAlter(缺省名)

IDC_BUTTON_DELETE

BN_CLICKED

OnButtonDelete(缺省名)

IDC_BUTTON_CLEAR

BN_CLICKED

OnButtonClear(缺省名)

IDCANCEL

BN_CLICKED

OnCancel(缺省名)

IDC_COMBO_BOX

CBN_SELCHANGE

OnSelchangeCombobox(缺省名)

CTestCtrl2Dlg

WM_HSCROLL

OnHScroll(缺省名)

■第五步编写CTestCtrl2Dlg:

:

OnButtonAdd()消息处理函数。

voidCTestCtrl2Dlg:

:

OnButtonAdd()

{

UpdateData();

m_strName.TrimLeft();//去掉空格

if(m_strName.IsEmpty())//若为空

{

MessageBox("学生名字无效!

");

return;

}

intnIndex=m_comboBox.FindStringExact(-1,m_strName);//查找匹配项

if(nIndex!

=CB_ERR)//若有匹配项则不用添加

{

MessageBox("该同学的名字已添加!

");

return;

}

CStringstrData,strSex;

UINTnID=GetCheckedRadioButton(IDC_RADIO_BOY,IDC_RADIO_GIRL);

//获取被选中的单选按钮ID号

GetDlgItemText(nID,strSex);//获取被选中单选按钮的标题

strData.Format("%s,%s,%s",m_strName,strSex,m_strAge);//格式化字符串

nIndex=m_comboBox.AddString(m_strName);//添加组合框列表项

m_comboBox.SetItemDataPtr(nIndex,newCString(strData));//添加表项关联数据

m_listBox.AddString(strData);//添加列表框

}

■第六步编写CTestCtrl2Dlg:

:

OnButtonAlter()消息处理函数。

voidCTestCtrl2Dlg:

:

OnButtonAlter()

{

UpdateData();

intnIndex=m_comboBox.FindStringExact(-1,m_strName);//在组合框中查找匹配项

if(nIndex!

=CB_ERR)//若找到

{

CStringstrData,strSex;

intlistIndex;

strData=*(CString*)m_comboBox.GetItemDataPtr(nIndex);//获取表项关联数据

listIndex=m_listBox.FindString(-1,strData);//在列表框查找匹配项

delete(CString*)m_comboBox.GetItemDataPtr(nIndex);//在组合框中删除该表项

UINTnID=GetCheckedRadioButton(IDC_RADIO_BOY,IDC_RADIO_GIRL);

GetDlgItemText(nID,strSex);

strData.Format("%s,%s,%s",m_strName,strSex,m_strAge);

m_comboBox.SetItemDataPtr(nIndex,newCString(strData));

m_listBox.DeleteString(listIndex);

m_listBox.InsertString(listIndex,strData);

}

UpdateData(false);

}

■第七步编写CTestCtrl2Dlg:

:

OnButtonDelete()消息处理函数。

voidCTestCtrl2Dlg:

:

OnButtonDelete()

{

inti,count;

int*pBuffer;

count=m_listBox.GetSelCount();//获得选择项的数目

if(count<=0)return;

pBuffer=newint[count];

m_listBox.GetSelItems(count,pBuffer);//获取选择项的索引

for(i=count-1;i>=0;i--)//倒序删除选择项

{

CStringstrData,strName;

intnIndex;

m_listBox.GetText(pBuffer[i],strData);//获取指定列表项的字符串

nIndex=strData.Find(',');

strName=strData.Left(nIndex);//从中提取出姓名存入strName

nIndex=m_comboBox.FindStringExact(-1,strName);//获取与strName匹配项的索引

delete(CString*)m_comboBox.GetItemDataPtr(nIndex);//删除nIndex项的关联信息

m_comboBox.DeleteString(nIndex);//删除nIndex表项

m_listBox.DeleteString(pBuffer[i]);//删除列表框的选择表项

}

UpdateData(false);

deletepBuffer;

}

注意:

这里是倒序删除的,如果按顺序删除,则会使选择项的索引产生错位。

■第八步编写CTestCtrl2Dlg:

:

OnButtonClear()消息处理函数。

voidCTestCtrl2Dlg:

:

OnButtonClear()

{

m_multiEdit.SetSel(0,-1);//选择编辑框的全部正文

m_multiEdit.ReplaceSel("");//用空串替换选中正文,即清除正文

}

■第九步编写CTestCtrl2Dlg:

:

OnCancel()消息处理函数。

voidCTestCtrl2Dlg:

:

OnCancel()

{//获取组合框的表项个数,逐个删除

for(intnIndex=m_comboBox.GetCount()-1;nIndex>=0;nIndex--)

{

delete(CString*)m_comboBox.GetItemDataPtr(nIndex);

}

CDialog:

:

OnCancel();

}

■第十步编写CTestCtrl2Dlg:

:

OnSelchangeComboBox()消息处理函数。

voidCTestCtrl2Dlg:

:

OnSelchangeComboBox()

{

intlength=m_multiEdit.GetWindowTextLength();//获取编辑框的正文长度

CStringstr,strData;

m_multiEdit.SetSel(-1,0);//取消正文的选择

m_multiEdit.SetSel(length,length);//将插入符移动到编辑正文的末尾

m_comboBox.GetLBText(m_comboBox.GetCurSel(),str);//获取指定列表项的字符串

strData=*(CString*)m_comboBox.GetItemDataPtr(m_comboBox.GetCurSel());

//获取表项的关联数据

str=str+"selected\r\n"+strData+"\r\n";

m_multiEdit.ReplaceSel(str);//用指定字串替换编辑框正文

}

提示:

本例中插入编辑正文的方法是先调用CEdit:

:

SetSel移动插入符到指定位置(必要时要滚动以使该位置可见),然后再调用CEdit:

:

ReplaceSel插入新的正文,这样做的好处是编辑框总是滚动到新修改过的地方,从而使得新修改过的地方总是可见的。

■第十一步编写CTestCtrl2Dlg:

:

OnHScroll()消息处理函数。

voidCTestCtrl2Dlg:

:

OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)

{

intnScrollMin,nScrollMax,nScrollPos;

intnPageSize;

CSt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1