实验八 MFC中的对话框及控件(二)
- 格式:doc
- 大小:91.00 KB
- 文档页数:5
实验8 设计自定义对话框实验目的:1、掌握设计用户自定义对话框的一般方法;2、熟练使用通用对话框。
实验内容:1、实验要求设计一个对话框,能够实现:打开文件、保存文件、设置字体、设置颜色等功能。
2、窗体属性对象名属性名设置值Form1 caption 通用对话框Richtextbox1 caption ----Command1caption打开文件Command2caption另存为Command3 caption 字体Command4 caption 颜色Command5caption退出3、窗体设计4、源代码Private Sub command1_Click(CommonDialog1.ShowOpenCommonDialog1.Filter = "Text(*.txt|*.txt|Doc(*.doc|*.doc|all(*.*|*.*" RichTextBox1.LoadFile CommonDialog1.FileName, 1End SubPrivate Sub Command2_Click(CommonDialog1.ShowSaveRichTextBox1.SaveFile CommonDialog1.FileName, 1End SubPrivate Sub Command3_Click(CommonDialog1.Flags = 1 + 256 '即&H1+&H100 CommonDialog1.ShowFontRichTextBox1.SelFontName = CommonDialog1.FontNameRichTextBox1.SelFontSize = CommonDialog1.FontSizeRichTextBox1.SelItalic = CommonDialog1.FontItalicRichTextBox1.SelBold = CommonDialog1.FontBoldRichTextBox1.SelStrikeThru = CommonDialog1.FontStrikethru RichTextBox1.SelUnderline = CommonDialog1.FontUnderline RichTextBox1.SelColor = CommonDialog1.ColorEnd SubPrivate Sub Command4_Click(CommonDialog1.ShowColorRichTextBox1.BackColor = CommonDialog1.ColorEnd SubPrivate Sub Command5_Click(EndEnd Sub实验思考如果将RichTextBox控件改为Text控件,能否实现程序的功能?。
6.4 使用通用对话框在Windows系统中提供了一些通用对话框,如打印设置对话框、页面设置对话框、查找对话框、文件对话框、字体对话框和颜色对话框等。
这些是Windows 系统中出现频率很大的对话框,将它们定义为通用对话框可以极大地减轻程序的复杂度,同时,MFC已经用类封装了这些通用对话框。
一般来讲,要使用通用对话框,不需要派生新的类,因为MFC提供的基类已经提供了常用的功能。
而且在对话框结束后,可以通过成员函数得到用户在对话框中的选择。
6.4.1 文件对话框文件对话框类为打开/保存文件提供了一个方便易用的接口,MFC的CFileD ialog类对其进行了封装。
如图6-24和图6-25所示的就是使用CFileDialog类创建的“打开”和“另存为”对话框。
图6-24 “打开”对话框图6-25 “另存为”对话框创建一个文件对话框对象要先用构造函数进行构造并初始化,然后调用DoM odal()函数来显示对话框,当用户完成对话框中的操作后会自动关闭并返回相应的信息。
CFileDialog类构造函数原型如下:CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_O VERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );其中:—参数bopenFileDialog指定文件对话框的类型。
如果该值为TRUE,则创建文件“打开”对话框;如果为FALSE,则构造一个“另存为”对话框。
—参数lpszDefExt指定默认的文件扩展名,如果用户在对话框的文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。
默认为NULL,即不添加扩展名。
VS2021和MFC编程入门之8(对话框:创建对话框类和添加控件变量)VS2021/MFC编程入门之八(对话框:创建对话框类和添加控件变量)理解了如何创建对话框资源。
创建好对话框资源后要做的就是生成对话框类了。
再声明下,生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。
因为给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。
大家用过VC++ 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在VS2021中,一般对话框类都是继承自CDialogEx类。
创建对话框类如果是自己新添加的对话框模板,怎样为它创建对话框类呢?1.首先鸡啄米就按第六讲:创建对话框模板和修改对话框属性中说的那样,在Resource View的“Dialog”节点上右键,然后在右键菜单中选择“Insert Dialog”创建一个新的对话框模板,ID就使用默认的IDD_DIALOG1。
2.在中间区域会显示新建的对话框模板,然后选中此对话框模板,点右键,在右键菜单中选择Add Class。
3.选择“Add Class”后会弹出一个对话框,在对话框中“Class name”下的编辑框中写入自定义的类名就可以了,例如CMyDialog。
4.最后点“Finish”完成。
最终你就可以在Class View中看到新生成的对话框类CMyDialog了,并且在Solution Explorer中有相应的MyDialog.h头文件和MyDialog.cpp源文件生成。
CMyDialog类同样派生于CDialogEx类。
注意,一般类名都以C打头,又比如,CTestDlg。
为对话框中的控件添加变量在上一讲中为对话框添加了几个控件,包括三个静态文本框,三个编辑框,一个按钮控件。
第六章(对话框):int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType= MB_OK ); lpszText 包含了要显示的信息lpszCaption 用作消息框标题nType 指定了消息框的内容和行为下面是按钮种类及其对应参数:设置默认选中的按钮:判断按下的是对应那个按钮:非模态对话框的创建步骤:CMode *pMod = new CMode;pMod->Create(IDD_DIALOG2);pMod->ShowWindow(SW_SHOW); // SW_SHOW激活窗口并以其当前的大小和位置显示。
释放new出来的指针要重写OK,Cancel和X键,不过X键和取消是一个,所以只需要重写两个就可以了,还要重写那个类中的PostNcDestroy();函数并在其中delete this;•模态对话框与非模态对话框的区别:•(1)模态对话框由CDialog::DoModal函数创建,而非模态对话框由CDialog::Create 函数来创建。
•(2)CDialog::DoModal函数负责显示其所创建的模态对话框,而非模态对话框需要调用CDialog::ShowWindow函数来显示对话框。
•(3)CDialog::DoModal函数负责销毁其所创建的模态对话框,而非模态对话框必须调用CWnd::DestoryWindow函数来关闭对话框。
CFileDialog fid(TRUE,NULL,NULL,OFN_ENABLESIZING | OFN_ALLOWMULTISELECT | OFN_ALLOWMULTISELECT,szFilter,NULL);Cstring szFilter = “C++ Files(.c;.cpp;.cxx;.tli;.h )| .c;.cpp;.cxx;.tli;.h |Web File(.htm; .html;.htx.asp)| .htm; .html;.htx.asp||”;#define OFN_READONLY 0x00000001#define OFN_OVERWRITEPROMPT 0x00000002#define OFN_HIDEREADONL Y 0x00000004#define OFN_NOCHANGEDIR 0x00000008#define OFN_SHOWHELP 0x00000010#define OFN_ENABLEHOOK 0x00000020#define OFN_ENABLETEMPLATE 0x00000040#define OFN_ENABLETEMPLATEHANDLE 0x00000080#define OFN_NOV ALIDATE 0x00000100#define OFN_ALLOWMULTISELECT 0x00000200#define OFN_EXTENSIONDIFFERENT 0x00000400#define OFN_PATHMUSTEXIST 0x00000800#define OFN_FILEMUSTEXIST 0x00001000#define OFN_CREATEPROMPT 0x00002000#define OFN_SHAREAW ARE 0x00004000#define OFN_NOREADONL YRETURN 0x00008000#define OFN_NOTESTFILECREATE 0x00010000#define OFN_NONETWORKBUTTON 0x00020000#define OFN_NOLONGNAMES 0x00040000#define OFN_NODEREFERENCELINKS 0x00100000#define OFN_LONGNAMES 0x00200000#define OFN_ENABLEINCLUDENOTIFY 0x00400000#define OFN_ENABLESIZING 0x00800000弹出式菜单:void CStateView::OnRButtonUp(UINT nFlags, CPoint point){CMenu menu;//导入菜单menu.LoadMenu(IDR_MAINFRAME);//设置弹出的是菜单的第几个选项CMenu *psubmenu = menu.GetSubMenu(1);ClientToScreen(&point);//菜单弹出的方式及位置psubmenu->TrackPopupMenu(TPM_LEFTBUTTON,point.x,point.y,this);} //右键弹出式菜单添加状态栏:状态框:显示程序某一个数据状态的部件例如:鼠标的位置打开ResourceView在String Table建立3个String Table;标题非别是aaa,坐标,bbb 打开MainFrm.h找到在public下:添加CStatusBar m_wndStatusBar1;打开MainFrm.cpp建立;static UINT ind[] ={ID_SEPARATOR, // status line indicator【ID1】,【ID2】,【ID3】,};在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中建立if (!m_wndStatusBar1.Create(this) ||!m_wndStatusBar1.SetIndicators(ind,sizeof(ind)/sizeof(UINT))){TRACE0("Failed to create status bar\n");return -1; // fail to create}Ctrl+W在class name为CAaView下的找到WM_MOUSEMOVE后建立时间函数在函数内添加CMainFrame *PMainFrame = (CMainFrame *)AfxGetMainWnd();CString strx,stry;//获得x的坐标strx.Format("%d",point.x);//获得y的坐标stry.Format("%d",point.y);//显示到指定的框框中PMainFrame->m_wndStatusBar1.SetPaneText(1,strx,TRUE);pMFram->m_wndStatusBar1.SetPaneInfo(1,IDS_STRING61446,SBPS_POPOUT,50);PMainFrame->m_wndStatusBar1.SetPaneText(2,strx,TRUE);PMainFrame->m_wndStatusBar1.SetPaneText(3,stry,TRUE);注意;要添加头文件#include "MainFrm.h"颜色对话框:•clrInit:表示默认选择的颜色。
目录:目录: (1)一:字体对话框 (2)1:在点字体对话框的时候 (2)2:在On_Paint消息下 (3)二:颜色对话框 (3)1:在点颜色对话框的时候 (3)2:在On_Paint消息下 (3)三:文件对话框 (3)1:在点文件对话框(打开)的时候 (3)2:在On_Paint消息下 (4)3:在点文件对话框(保存)的时候 (4)四:List Control (5)1:初始化和删除(得到前台操ListControl的视图指针) (5)1)初始化 (5)2)删除 (5)2:数据库读取 (5)3:ListControl加载图标 (6)4:删除数据库的选定内容 (7)5:添加数据库的内容(以及自动排序ID) (7)6:更改数据库信息 (8)五:非模态弹出对话框 (9)六:MFC控件—打开网页/播放FLASH (9)1:打开网页或弹出一个任意的新程序 (9)2:播放FLASH (9)七:实现可扩大可变小的对话框 (10)八:菜单加载位图和状态栏显示时间 (11)九:目录树TreeControl (11)1:目录树属性 (11)2:常用函数(目录树前台操作指针) (11)十:属性表单 (12)十一:滚动条 (12)1:SliderControl (12)2:Horizontal Scroll Bar和Vertical Scroll Bar (13)十二:DLL连接库 (13)1:静态连接 (13)2:动态连接 (14)十三:读出/写入INI配置文件 (15)1:写入 (15)2:读出 (15)十四:对话框可大可小”>>”和“<<” (16)十五:windows窗口下显示对话框 (17)一百:常用方法 (17)1:右键弹出菜单 (17)2:获得控件信息(文本内容,选择哪一个...) (17)1) ListBox (17)2) ConboBox (18)3) Edit (18)3:获得鼠标位置 (18)4:加载图片 (18)5:对话框刷新回刷 (18)6:获取列表(ListControl)行数 (18)7:MessBox (19)8:隐藏对话框 (19)9:改变窗口位置/大小 (19)10:获取窗口大小/位置CRect存储 (19)11:记录系统时间 (19)12:关闭对话框 (19)13:加载音乐(仅支持.wav格式音乐) (20)14:非模态弹出对话框在别的类中定义的类指针需强转 (20)15:格式化字符串 (20)16:释放句柄/DC (20)17:退出单文档对话框 (20)18:通过对话框的ID号获得所对应的句柄 (20)一:字体对话框:1:在点字体对话框的时候void CMess::On32781(){//弹出字体对话框CFontDialog dlg;if(IDOK==dlg.DoModal()){LOGFONT Font ;//定义存储字体的结构体//获得当前设置的字体信息dlg.GetCurrentFont(&Font);//通过字体信息来创建字体句柄m_hFont=CreateFontIndirect(&Font);}this->Invalidate();}2:在On_Paint消息下dc.SelectObject(m_hFont);二:颜色对话框1:在点颜色对话框的时候void CnewDialog2::On32774(){// 当点文件----颜色对话框的时候CColorDialog dlg;if(IDOK==dlg.DoModal()){m_Color=dlg.GetColor();//获取笔的颜色 m_Color为COLORREF类型,用来记录画笔颜色}this->Invalidate();}2:在On_Paint消息下dc.SetTextColor(m_Color);//改变文本颜色三:文件对话框1:在点文件对话框(打开)的时候void CnewDialog2::On32776(){// 当点文件----文件对话框打开的时候CFileDialog dlg(TRUE,NULL,NULL,OFN_READONLY,"图片文件(*.bmp)|*.bmp||");//一参:true为读入,二参文件扩展名,三参文件名,四参文件属性可写/可读,五参过滤器if(IDOK==dlg.DoModal()){CString strImage;//用来储存读入图片的名字strImage.Empty();//清空字符串strImage=dlg.GetFileName();//获取读入文件的名字if(m_Bitmap!=NULL){//当存储读入图片的文图句柄不为空,先删除DeleteObject(m_Bitmap);//删除已有的位图}m_Bitmap=(HBITMAP)LoadImage(NULL,strImage,IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;//加载位图}this->Invalidate();}2:在On_Paint消息下((CStatic*)GetDlgItem(IDC_TuPian))->ModifyStyle(1,SS_BITMAP);//改变风格,1可以移除;0不可以移除IDC_TuPian为Static Text的ID 因为它为静态工具,ID必须更改((CStatic*)GetDlgItem(IDC_TuPian))->SetBitmap(m_Bitmap);//在Static Text中加载图片3:在点文件对话框(保存)的时候void CnewDialog2::On32777(){// 当点文件----文件对话框保存的时候CFileDialog dlg(FALSE,"BMP",NULL,OFN_OVERWRITEPROMPT,"ALLFiles(.bmp)|*.bmp||");//一参:true为读入,二参文件扩展名,三参文件名,四参文件属性可写/可读,五参过滤器if(IDOK==dlg.DoModal()){CString str=dlg.GetFileName();//用来储存保存时打进的文件名m_Image.Save(str);//储存文件}}注:CImage是储存图片的类,它包含在头文件"atlimage.h"下Cimage m_Image;而且在用m_Image储存文件之前,必须先给m_Image.Load(文件名),读入要储存的文件!四:List Control1:初始化和删除(得到前台操ListControl的视图指针)1)初始化建一个---基于对话框的项目---然后再建一个ListControl工具----定义一个变量m_ListCtr m_ListCtr.InsertColumn(0,"名字");//插入列m_ListCtr.InsertColumn(1,"大小");m_ListCtr.InsertColumn(2,"内存");m_ListCtr.InsertColumn(3,"备注");for(int i=0;i<6;i++){m_ListCtr.SetColumnWidth(i,80);//改变列之间的宽度}m_ListCtr.InsertItem(0,"");//插入行m_ListCtr.SetItemText(0,0,"C盘");//改变行的内容m_ListCtr.SetItemText(0,1,"1G");m_ListCtr.SetItemText(0,2,"22G");m_ListCtr.SetItemText(0,3,"哦拉拉");//改变属性View为Report(详细列表)时的扩展属性LVS_EX_FULLROWSELECT使点取时全行选中,LVS_EX_GRIDLINES使列表中带有灰色的线m_ListCtr.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);2)删除// 当双击内容信息的时候LPNMLISTVIEW pNMLV=(NMLISTVIEW*)pNMHDR; //得到前台操作ListCantrol的视图指针if(pNMLV->iItem!=-1){//当点取正确的信息的时候if(IDOK==MessageBox("是否删除?","信息",MB_OKCANCEL)){m_ListCtr.DeleteItem(pNMLV->iItem);//删除你点选的内容//m_ListCtr.DeleteAllItems();//删除所有的内容}}2:数据库读取1)连接接口头文件:#include “afxdao.h”2)创建两个类变量,用来开启数据库,保存数据库记录(内容)CDaoDatabase * m_pData;//数据库对象指针CDaoRecordset * m_pRec;//记录集指针char m_path[255];//存数数据库名字的缓冲区3)在初始化中加载数据库//1给数据库对象指针分配空间m_pData = new CDaoDatabase();//2获得数据库的路径GetCurrentDirectory(255,m_path);strcat(m_path,"\\db1.mdb");//3打开数据库m_pData->Open(m_path);//4创建记录集指针m_pRec =new CDaoRecordset(m_pData);//5打开数据库中的表,select *from 后面接的是要打开的表的名字m_pRec->Open(dbOpenDynaset,"select * from 信息");//6获得记录集中的字段(列)个数int col=m_pRec->GetFieldCount();//7获取记录集中的字段内容以及给ListControl增加列CDaoFieldInfo info;//存储字段信息的类for(int i=0;i<col;i++){m_pRec->GetFieldInfo(i,info);//获取记录集中的列内容m_ListCtr.InsertColumn(i,info.m_strName);//往ListControl中添加列m_ListCtr.SetColumnWidth(i,80);//改变列宽度}//8获取记录集中的内容以及给ListControl添加内容int Item=0;//用来代表行号COleVariant var;//储存记录集中的内容的类while(!m_pRec->IsEOF()){//判断表中指向的一行是否为空//只要表不为空就增加一行从而添加内容,三参代表从图片列表中选图片m_ListCtr.InsertItem(Item,"",Item%4);for(int i=0;i<col;i++){m_pRec->GetFieldValue(i,var);//获取记录集指针指向的内容m_ListCtr.SetItemText(Item,i,(char *)var.pbstrVal);//改变ListControl的行内容}m_pRec->MoveNext();//把记录集指针指向下一行内容Item++;}m_ListCtr.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//改变ListControl的风格--全行选中和带有灰色的格3:ListControl加载图标1)先定义图片列表CImageList m_BigImage;//存储大图片列表CImageList m_SmallImage;//存储小图片列表2)再在初始化的时候构造图片列表//一二参每块图片大小,三参图片颜色ILC_COLOR24为真彩色,ILC_MASK为过滤颜色,四五参代表图片分几块m_BigImage.Create(32,32,ILC_COLOR24|ILC_MASK,4,4);//创建一个大图片列表CBitmap hBigBit;//位图句柄,用来加载图片再存入大图片列表中hBigBit.LoadBitmap(IDB_BITMAP1);//加载大图片到位图中m_BigImage.Add(&hBigBit,RGB(0,255,0));//把加载好的位图加载到图片列表中m_ListCtr.SetImageList(&m_BigImage,LVSIL_NORMAL);//把图片列表与ListControl绑定m_SmallImage.Create(16,16,ILC_COLOR24|ILC_MASK,4,4);//创建一个小图片列表CBitmap hSmallBit;//位图句柄,用来加载图片再存入小图片列表中hSmallBit.LoadBitmap(IDB_BITMAP2);//加载小图片到位图中m_SmallImage.Add(&hSmallBit,RGB(0,255,0));//把加载好的位图加载到图片列表中m_ListCtr.SetImageList(&m_SmallImage,LVSIL_SMALL);//把图片列表与ListControl绑定注:在使用图标的时候只要插入行的时候添加三参为图片索引号,从0开始,最大数必须小于图片列表图片数m_ListCtr.InsertItem(0,"",0);4:删除数据库的选定内容m_pRec->MoveFirst();//把记录集指针指向头部m_pRec->Move(m_Item);//移动到想删除的记录那里,m_Item为鼠标点取的行数m_pRec->Delete();//删除数据库中的这条记录m_ListCtr.DeleteItem(m_Item);//删除你点选的内容5:添加数据库的内容(以及自动排序ID)CnewDialog dlg;int Items;//存储行数char buf[30];//用来存储IDif(IDOK==dlg.DoModal()){//当点添加的时候Items=m_ListCtr.GetItemCount();//获取行数m_ListCtr.InsertItem(Items,"",Items%4);//增加行CString str=m_ListCtr.GetItemText(Items-1,0);//获取信息最后一行的IDstr=str.Right(4);//获取ID的右面四个字符int num=atoi(str)+1;//把ID的右面的四个字符强转为int型sprintf(buf,"BL%d",num); //以上为自动排序ID号m_ListCtr.SetItemText(Items,0,buf);m_ListCtr.SetItemText(Items,1,dlg.m_ZhongZu);m_ListCtr.SetItemText(Items,2,dlg.m_EditDengJi);if(dlg.m_RaXingBie==0){m_ListCtr.SetItemText(Items,3,"男");}else if(dlg.m_RaXingBie==1){m_ListCtr.SetItemText(Items,3,"女");}m_ListCtr.SetItemText(Items,4,dlg.m_EditAiHao);//添加ListConntrol信息m_pRec->MoveFirst();//把记录集指针移到头部m_pRec->MoveLast();//把记录集指针移到尾部m_pRec->AddNew();//添加一条新数据m_pRec->SetFieldValue(0,buf); //改变数据信息m_pRec->SetFieldValue(1,(LPCTSTR)dlg.m_ZhongZu); //需强转m_pRec->SetFieldValue(2,(LPCTSTR)dlg.m_EditDengJi);if(dlg.m_RaXingBie==0){m_pRec->SetFieldValue(3,"男");}else if(dlg.m_RaXingBie==1){m_pRec->SetFieldValue(3,"女");}m_pRec->SetFieldValue(4,(LPCTSTR)dlg.m_EditAiHao);m_pRec->Update();//更新6:更改数据库信息CnewDialog2 dlg;if(m_Item!=-1){CString DengJi=m_ListCtr.GetItemText(m_Item,2);dlg.m_EditDengJi=DengJi;CString XingBie=m_ListCtr.GetItemText(m_Item,3);if(XingBie=="男"){dlg.m_RaXingBie=0;}else if(XingBie=="女"){dlg.m_RaXingBie=1;}CString AiHao=m_ListCtr.GetItemText(m_Item,4);dlg.m_EditAiHao=AiHao;if(IDOK==dlg.DoModal()){m_ListCtr.SetItemText(m_Item,1,dlg.m_ZhongZu);m_ListCtr.SetItemText(m_Item,2,dlg.m_EditDengJi);if(dlg.m_RaXingBie==0){m_ListCtr.SetItemText(m_Item,3,"男");}else if(dlg.m_RaXingBie==1){m_ListCtr.SetItemText(m_Item,3,"女");}m_ListCtr.SetItemText(m_Item,4,dlg.m_EditAiHao);//添加ListConntrol信息m_pRec->MoveFirst();m_pRec->Move(m_Item);m_pRec->Edit();//该条数据可以编辑m_pRec->SetFieldValue(1,(LPCTSTR)dlg.m_ZhongZu);m_pRec->SetFieldValue(2,(LPCTSTR)dlg.m_EditDengJi);if(dlg.m_RaXingBie==0){m_pRec->SetFieldValue(3,"男");}else if(dlg.m_RaXingBie==1){m_pRec->SetFieldValue(3,"女");}m_pRec->SetFieldValue(4,(LPCTSTR)dlg.m_EditAiHao);m_pRec->Update();//更新}}else{MessageBox("请选择正确信息");}五:非模态弹出对话框CDialog * m_dlg;//非模态对话框//建立非模态对话框m_dlg = new CnewDialog2;m_dlg->Create(IDD_DIALOG2);m_dlg->ShowWindow(SW_SHOW);//this->EndDialog(1);关闭本类中的对话框六:MFC控件—打开网页/播放FLASH1:打开网页或弹出一个任意的新程序在对话框中,插入ActiveX控件Microsoft Web浏览器控件1)基于对话框打开添加变量m_Webm_Wed.Navigate("",NULL,NULL,NULL,NULL);//加载网站m_Wed.Navigate("C:\\Documents and Settings\\Administrator\\桌面\\MFC函数----对话框.doc",NULL,NULL,NULL,NULL);//加载文档2)新弹出一个程序ShellExecute(this->m_hWnd,"open","C:\\Documents and Settings\\Administrator\\桌面\\新建文本文档.txt","","",SW_SHOW);//弹出一个新程序2:播放FLASHShockwava Flash Object 控件在播放FLASH中,关于按钮有事件处理On(release){Fsconmand(“名字”,“功能标示”);}在Shockwava Flash Object事件处理中,PsCommand下If(strcmp(command,”名字”)==0){If(strcmp(args,”功能标示”)==0){}}七:实现可扩大可变小的对话框1:在对话框初始化的时候得到窗口小的时候大小和大的时候的大小,用CRect m_BigRec t和Crect SmallRect存放, Picture Control的变量 m_Pcthis->GetWindowRect(m_BigRect);//获取对话框最大化时的大小CRect m_Fen;//用来存放分割线的位置m_Pc.GetWindowRect(m_Fen);//获取分割线的位置m_SmallRect.left=m_BigRect.left; //得到小窗口时的大小m_SmallRect.right=m_BigRect.right;m_SmallRect.top=m_BigRect.top;m_SmallRect.bottom=m_Fen.bottom;this->SetWindowPos(NULL,0,0,m_SmallRect.Width(),m_SmallRect.Height(), SWP_NOZORDER |SWP_NOMOVE ); //改变窗口的大小//SWP_NOZORDER为第一个参数无效SWP_NOMOVE 为二三参数无效2:当点一个Cbutton的时候来改变窗口大小void CnewDialog::OnBnClickedCancel2(){// 当点>>的时候CString str; //用来存放点取Botton时它的名字((CButton*)GetDlgItem(IDCANCEL2))->GetWindowText(str);if(str==">>"){this->SetWindowPos(NULL,0,0,m_BigRect.Width(),m_BigRect.Height(), SWP_NOZORDER |SWP_NOMOVE ); //改变窗口的大小//改变窗口的大小GetDlgItem获取ID所对应控件的句柄, SetWindowText改变该Button 的名字,GetWindowText获得该Button的名字((CButton*)GetDlgItem(IDCANCEL2))->SetWindowText("<<");}else if(str=="<<"){this->SetWindowPos(NULL,0,0,m_SmallRect.Width(),m_SmallRect.Height(),SWP_NOZORDER |SWP_NOMOVE );((CButton*)GetDlgItem(IDCANCEL2))->SetWindowText(">>");}}八:菜单加载位图和状态栏显示时间1:在框架类初始化的时候CMenu m_wndMenu;//菜单句柄m_wndMenu.LoadMenu(IDR_MENU1);//加载菜单SetMenu(&m_wndMenu);//改变菜单CBitmap bit;//位图句柄bit.LoadBitmap(IDB_BITMAP1);//加载位图m_wndMenu.GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bit,&bit);//改变菜单位图bit.Detach();//把位图变量和资源分开SetTimer(1,1000,NULL);//定义一个计数器,用来刷新窗口,为了更新状态栏时间变化2:在定时器发送的OnTimer消息下if(nIDEvent==1){CTime t=CTime::GetCurrentTime();//获取计算机时间CString str;//字符串str=t.Format("%H:%M:%S");//格式化m_wndStatusBar.SetPaneInfo(0,0,0,120);//改变状态栏1宽度m_wndStatusBar.SetPaneText(0,str);//改变状态栏文本内容}九:目录树TreeControl1:目录树属性Has Buttons //父级旁边是否显示+/-按钮Has Lines//是否显示行结构的虚线Lines At Root //根节点是否含有+/-按钮2:常用函数(目录树前台操作指针)1)消息中:TVN_SELCHANGED//当点击目录树内容的时候2)LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); //前台操作指针pNMTreeView->itemNew存储了新点击的节点的所有信息itemNew为当前点击的目录树,itemOld为先前点的目录树3)str=m_TreeCtr.GetItemText(pNMTreeView->itemNew.hItem); //获取目录树文本4)HTREEITEM Root1 = m_TreeCtr.InsertItem("数据库",0,0,TVI_ROOT,TVI_LAST);m_TreeCtr.InsertItem("数据库1",1,1,Root1,TVI_LAST); //添加目录树文本TVI_ROOT为树的根,如果那个位置传入的是另一个树返回的HIREEITEM那么该节点为另一个树的字节点二三参传入的是图片,必须先定义好图片列表,二参为没选中时的图标,三参为选中后的图标,目录树选入的是小图标十:属性表单1)添加类---MFC---MFC类---基类:CpropertySheet(例如类名:CproSheet)新建对话框选Dialog---IDD_PROPPAGE_LARGE资源类型2)添加好属性表单后再添加属性页!新建两个资源类型为IDD_PROPPAGE_LARGE的对话框和对应的基类为CpropertyPage的类(例如类名:Cpage1,Cpage2)3)在总对话框中,声明三个类的指针(需包含对应类的头文件)CProSheet * m_pSheet;//属性表单CPage1 * m_pPage1;//属性页1CPage2 * m_pPage2;//属性页24)在初始化中建立属性表单,必须先添加页之后才能建立属性表单m_pPage1 = new CPage1; //建立属性页1m_pPage2 = new CPage2; //建立属性页2m_pSheet = new CProSheet("属性表单名称");m_pSheet->AddPage(m_pPage1); //添加属性页1到属性表单中m_pSheet->AddPage(m_pPage2); //添加属性页2到属性表单中m_pSheet->Create(this,WS_CHILD|WS_VISIBLE);//创建属性表单,传二参可以使属性表单负载在总对话框上WS_CHILD为子窗口,WS_VISIBLE为可见的注:m_pPage1->(可以调出关于属性页的相关变量和函数);为了实现属性页的其他功能十一:滚动条注:消息中,HSCROLL是滚动条水平移动时发出的消息,VSCROLL是滚动条垂直移动时发出的消息!void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)在这两个消息中,CScrollBar* pScrollBar代表点取的哪个滚动条.UINT nSBCode存放着附加消息------SB_THUMBTRACK---响应滚动条拖动的消息;SB_LINEDOWN---向下;SB_LINEUP---向上;SB_LINERIGHT---向右; SB_LINELEFT---向左;SB_PAGEDOWN---按滚动条的中下位置;SB_PAGEUP---按滚动条的中上位置.UINT nPos存放滚动条所对应的值.1:SliderControlm_SliderCtr.SetRange(0,2000);//设置滚动条的范围m_SliderCtr.SetPos(0);//设置滚动条初始化位置//在滚动条移动时的函数下{void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)}CScrollBar* bar= (CScrollBar*)&m_SliderCtr;if(bar==pScrollBar){ //当点的滚动条等于bar时int pos=m_SliderCtr.GetPos();//获取滚动条所对应的值char buf[20];sprintf(buf,"%d",pos);SetWindowText(buf);}2:Horizontal Scroll Bar和Vertical Scroll Barm_HScroll.SetScrollRange(0,2000);//设置滚动条的范围m_HScroll.SetScrollPos(0);//设置滚动条的初始化位置//在滚动条移动时的函数下{void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)}if(&m_HScroll==pScrollBar){//当点的滚动条是m_HScroll的时候switch(nSBCode){case SB_THUMBTRACK://响应滚动条拖动的消息m_HScroll.SetScrollPos(nPos);//改变滚动条所对应的位置break;case SB_LINELEFT:nPos = m_HScroll.GetScrollPos();//每次都要先获得滚动条位置nPos--;//再改变滚动条位置m_HScroll.SetScrollPos(nPos);//改变滚动条所对应的位置break;}十二:DLL连接库解析:先创建win32控制台项目,选择DLL文件,空项目,创建!1:静态连接1)创建Dll.h头文件:#ifdef DLL_API //如果定义了DLL_API的话#else#define DLL_API extern "C" _declspec(dllimport) //导入库文件#endifDLL_API int add(int x,int y);//自己写的方法,格式:DLL_API + 方法2)创建Dll.cpp文件,实现定义的方法#define DLL_API extern "C" _declspec(dllexport)//导出库文件#include "Dll.h"DLL_API int add(int a,int b){return a+b;}3)把头文件拷贝到调用Dll文件的跟目录下然后引用#include "头文件名称.h"4)使用静态连接库,需把.dll文件和.lib文件全部拷贝到调用Dll文件中函数的跟目录下方法一:项目---属性---链接器---输入---附加依赖项---添加上Dll静态.lib文件方法二:#pragma comment (lib,"Dll静态.lib");5)直接调用.dll中的方法int ddd=add(20,10);2:动态连接1)创建Dll.h头文件:#ifdef DLL_API //如果定义了DLL_API的话#else#define DLL_API extern "C" _declspec(dllimport) //导入库文件#endifDLL_API int add(int x,int y);//自己写的方法,格式:DLL_API + 方法2)创建Dll.cpp文件,实现定义的方法#define DLL_API extern "C" _declspec(dllexport)//导出库文件#include "Dll.h"DLL_API int add(int a,int b){return a+b;}3)添加模块定义文件=>原文件---添加新项---代码---模块定义文件LIBRARY Dll动态//库文件名为Dll动态EXPORTS//导出多个函数add @1//导出函数add 标号可以自己定义从1开始前面加@ 下一个为 @2 或者系统默然可不加4)在调用该函数的地方,获取库文件的函数(需把库文件.Dll拷贝调用文件的根目录下)//1:加载DLL文件HINSTANCE hInst = LoadLibrary("Dll动态.dll");//2:为了得到dll中函数,要定义一个与dll文件中函数相同类型的函数指针//注:1)返回值为地址的函数称为指针函数 2)指向函数名字的一个指针称为函数指针typedef int (*Add) (int ,int);//定义一个函数指针Add aaa = (Add) GetProcAddress(hInst,"add");//获取库文件中名为add的函数,获取的add必须与Add类型相同,如果int (*Add) (int,int)这么定义函数指针,那么能获取库文件中的函数类型必须也为int 函数名(int a,int b){---};此类型int sun = aaa(20,10); //调用库文件中函数FreeLibrary(hInst);//释放动态连接库十三:读出/写入INI配置文件注:配置文件要自己先创建一个!1:写入CString StuKeyName,StuName;//用来储存Key值和存储名字int count=0;for(int i=0;i<6;i++){StuKeyName.Format("Name%d",i);StuName.Format("学生%d",i);::WritePrivateProfileString("StudentName",//总标示StuKeyName,//Key值StuName,//Key所对的具体内容".\\Student.ini");//文件名字count++;}CString strCount;strCount.Format("%d",count);//格式化::WritePrivateProfileString("StudentNum","Count",strCount,".\\Student.ini"); 2:读出int Count=::GetPrivateProfileInt(//从int文件中读取数量的信息"StudentNum",//总标示"Count",//Key值0,//默认为0".\\Student.ini");//文件名字//从Student.ini文件中读出标示为StudentNum中Key为Count所对应的数量信息CString StuKeyName,StuName;//用来储存Key值和存储名字的缓冲区for(int i=0;i<Count;i++){StuKeyName.Format("Name%d",i);::GetPrivateProfileString(//从int文件中读取字符串信息"StudengName",//总标示StuKeyName,//键值NULL,//默认为NULLStuName.GetBuffer(28),//存储具体字符串的缓冲区28,//缓冲区大小".\\Student.ini");//文件名字//从Student.ini文件中读出标示为StudengName中Key值为StuKeyName的所对应字符串信息m_ListBox1.AddString(StuName);//为了证明读出,把读出的东西写入ListBox控件中}十四:对话框可大可小”>>”和“<<”1步:添加对话框资源----分割线Picture Control (它支持图像:属性—Type—Image)制作分割线:把Color属性改为Etched2步:创建好对话框后添加类注:对话框类中DDX中存储变量、控件把菜单(关于对话框)与对话框结合---在点菜单消息处理中定义建好的对话框对象Dialog dlig;dlg.DoModal();弹出对话框3步:添加对话框的消息处理函数分析当点“>>”时窗口增大,应知道大窗口的大小和小窗口的大小解析:先定义存储对话框大小的变量CRect m_BigRect;CRect m_SmallRect;在对话框初始化的时候获得对话框的大小-----OnInitDialog();1)获得大窗口的大小this->GetWindowRect(&m_BigRect);//注:GetWindowRect为获取整个窗口的大小,GetClientRect为获取客户区大小2)获得小窗口大小分析---先应获得分割线的位置添加分割线变量----改ID---添加m_FenRect为分隔线变量CRect FRect;m_FenRect.GetWindowRect(&FRect);3)计算出小窗口区域的大小(对话框变小时的大小)m_SmallRect.left = m_BigRect.left;m_SmallRect.right = m_ BigRect.right;m_SmallRect.top = m_ BigRect.topm_SmallRect.bottom = m_FenRect.bottom4)设置对话框位置、大小SetWindowPos(NULL,0,0,m_SmallRect.Width(),SmallRect.High(),SWP_NOZORDER|SWP_NOMOVE);//显示为隐藏模式SWP_NOSIZE忽略三四参(宽高),SWP_NOZORDER忽略一参,2、3参为位置5)设置什么时候显示大窗口、什么时候显示小窗口//通过对话框上的ID号获得所对应的句柄----GetDlgItem(IDC_BUTTON1)(CButton*)GetDlgItem(IDC_BUTTON1)->GetWindowText(strBtn);----获取文本If(strBtn==”>>”){SetWindowPos(NULL,0,0,m_BigRect.Width(),BigRect.Hight(),SWP_NOZORDER|SWP_NOM OVE);(CButton*)GetDlgItem(IDC_BUTTON1)->SetWindowText(“<<”);----改变文本}else if(strBtn==”<<”){SetWindowPos(NULL,0,0,m_SmallRect.Width(),SmallRect.Hight(),SWP_NOZORDER|SWP_N OMOVE);(CButton*)GetDlgItem(IDC_BUTTON1)->SetWindowText(“>>”);----改变文本}十五:windows窗口下显示对话框1参当前进程句柄,2参对话框ID号,3参当前窗口句柄,4参对话框消息处理函数1://弹出模态对话框(点别的对话框不好用)DialogBox(g_hInst,(LPCTSTR)IDD_DIALOG1,g_hwnd, (DLGPROC)Dialog);2://弹出非模态对话框(可以点别的对话框)HWND g_hDialog; //对话框句柄g_hDialog = CreateDialog(g_hInst,(LPCTSTR)IDD_DIALOG1,g_hwnd, (DLGPROC)Dialog); ShowWindow(g_hDialog,_SW_SHOW); //显示对话框// “关于”框的消息处理程序。
XXX软件案例分析实验8 基于对话框的录入界面实验报告课程名称:计1201实验名称:基于对话框的录入界面班级:xxxxxxxx0122姓名:XXX、XXX指导教师:实验日期:2015年12月24日一、实验目的1.了解MFC ADO数据库访问技术。
2.熟悉XXX DataGrid控件和XXX ADO Data控件的使用方法。
3.掌握基于对话框的用户界面设计方和数据操作方法。
4.掌握主窗口和子窗口之间的数据访问方法。
二、实验环境系统:Windows 7编程工具:Visual C++ 6.0三、实验要求实现对人事或其它基本信息的增加、编辑、删除、刷新和导出功能。
四、实验步骤与结果1.启动VC++6.0,创建基于对话框的MFCAppWizard(exe)类型的工程,命名为GUIStyle。
2.修改对话框ID为“IDD_GUISTYLE _DIALOG”,标题为“人事基本信息管理”。
3.在菜单栏选择Project—>Add to Project—>XXX命令,打开XXX对话框,打开“Registered ActiveX Controls”文件夹,选择“XXX DataGrid Control 6.0”和“Microsoft ADO Data Control 6.0”插入当前工程。
4.从控件工具栏中选择相应控件,设计主界面,设置ADO Data控件ID为IDC_ADODC,设置DataGrid控件ID为IDC_DATAGRID,其中DataSource属性值为IDC_ADODC,n属性值为空。
5.打开MFC ClassWizard对话框,为GUIStyleDlg类定义DataGrid控件的成员变量CDataGrid m_DataGrid,定义ADOData控件成员变量CAdodc m_Adodc。
为按钮添加消息响应成员函数。
6.加入自定义类CADOConn。
7.在CGUIStyleApp::Instance函数中加入如下代码:if(!AfxOleInit()){AfxMessageBox("XXX.");return FALSE;以上是实验步骤,下面是实验结果的截图。
基于MFC的对话框程序一、利用AppWizard应用程序向导生成程序框架新建项目,选择“MFC”模板中的“MFC 应用程序”,给项目一个名称,如Figure 1所示。
Figure 1 新建项目在“MFC应用程序向导”的“应用程序类型”中选择“基于对话框”;在“用户界面功能”中勾选“最小化框”与“最大化框”复选框。
其他,默认。
最后点击完成。
如Figure 2,Figure 3所示。
Figure 2Figure 3在Figure 3中,可在“对话框标题”中更改对话框的标题。
此处采用默认的MyDlg。
生成的初始项目,如Figure 4所示。
Figure 4经常用到的菜单、视图等在Figure 4中用红框已标出。
接着删掉Figure 4中的“确定”与“取消”按钮,在图中已用绿框框出。
然后选中Figure 4中的“TODO:在此放置对话框控件”,右键,选择属性。
在弹出的对话框中找到Caption,将其值改为姓名和学号,同时将该对话框控件移动至顶端,见Figure 5。
Figure 5二、添加控件与相关程序如果当前工作处于设计对话框时,“工具箱”窗口就会给出各种VC++提供的常用控件。
如果找不到“工具箱”,可在“视图”菜单中选择“工具箱”。
(其他视图找不到时,也可按这种方式调出。
)“视图”菜单及“工具箱”窗口,在Figure 4中顶端和右端的红框中可见。
如果选择“工具箱”后,看不到任何控件,请看看程序是否处于调试状态;如果处于调试状态,请退出调试状态再试试。
1、添加按钮控件选择“资源视图”,双击“IDD_MYDLG_DIALOG”,再选择“工具箱”,找到“Button”控件,拖至对话框“MyDlg”的合适位置,如Figure 6所示。
“资源视图”可在“视图”菜单中调出,也可在Figure 4中低端红框标出的位置找到。
Figure 6更改Button1的按钮标题为“按钮”。
在Button1的“属性”对话框中设置“Caption”的值为“按钮”。
实验八MFC中的对话框及控件(二)
实验目的
掌握常用的控件使用方法以及基于对话框的应用程序的开发
实验内容
1、编辑框的使用
2、选择按钮的使用
3、下拉列表的使用
4、按钮的使用
5、基于对话框的应用程序开发
一、编辑框的使用
[实验步骤]
1、新建一个MFC单文档项目;
2、在资源选项卡中插入一个自己的对话框
3、新建一个对话框模板
4、在对话框中添加2个静态文本控件和2个编辑框控件。
注意这2个编辑框控件的ID
5、通过Classwizzard添加数据成员。
在Classwizzard弹出的对话框中选择新建你这个对话框的类,取名叫“Cmydlg”,当然你也可以取其他名字
选择成员变量选项卡,然后双击某个编辑框的ID,设置对应数据成员名字及类型。
6、在你的工程的view类的头部通过包含对话框类的头文件
#include “mydlg.h”
包含你所建的对话框类。
注意:如果你改了对话框类的名字,看看相应的项目里新增的那个类的头文件名
7、在View类中增加2个变量
CString myname;
int myage;
8、通过Classwizzard增加一个鼠标左键消息响应函数,并在函数中增加如下代码:
void CT estView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Cmydlg dlg;
if(dlg.DoModal()==IDOK)
{
myname=dlg.m_name;
myage=dlg.m_age;
Inavalidate();
}
CView::OnLButtonDown(nFlags, point);
}
9、在OnDraw函数里增加如下显示内容的代码
CString str;
str.Format("我的姓名是%s",myname);
pDC->TextOut(10,10,str);
str.Format("我的年龄是%d",myage);
pDC->TextOut(10,30,str);
10、编译运行程序,在工作视图区点鼠标左键
二、选择按钮的使用
[实验步骤]
1、新建一个MFC单文档项目;
2、在资源选项卡中插入一个自己的对话框
3、新建一个对话框模板
4、在对话框中添加3个单选框控件。
并设置第一个单选控件的属性为组Groop
5、通过Classwizzard添加数据成员。
在Classwizzard弹出的对话框中选择新建你这个对话框的类,取名叫“Cmydlg”,当然你也可以取其他名字
选择成员变量选项卡,然后双击单选按钮的ID,设置对应数据成员名字及类型。
6、在你的工程的view类的头部通过包含对话框类的头文件
#include “mydlg.h”
包含你所建的对话框类。
注意:如果你改了对话框类的名字,看看相应的项目里新增的那个类的头文件名
7、在View类中增加变量
int mysex;
8、通过Classwizzard增加一个鼠标左键消息响应函数,并在函数中增加如下代码:
void CT estView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Cmydlg dlg;
if(dlg.DoModal()==IDOK)
{
mysex=dlg.m_sex;
}
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
9、在OnDraw函数里增加如下显示内容的代码
if(mysex==0)
pDC->TextOut(10,10,"看太阳");
else if (mysex==1)
pDC->TextOut(10,10,"看月亮");
else
pDC->TextOut(10,10,"看星星");
10、编译运行程序,在工作视图区点鼠标左键
三、下拉列表框的使用
[实验步骤]
1、新建一个MFC单文档项目;
2、在资源选项卡中插入一个自己的对话框
3、新建一个对话框模板
4、在对话框中添加一个组合框,注意其ID。
将组合框的下边往下拉宽些,以便容纳数据,设置属性中的样式为“下拉”,将“分类”前的勾去掉,
在数据栏里输入如下数据,输的时候通过CTRL+ENTER换行
5、通过Classwizzard添加数据成员。
在Classwizzard弹出的对话框中选择新建你这个对话框的类,取名叫“Cmydlg”,当然你也可以取其他名字
选择成员变量选项卡,然后双击下拉框的ID,设置对应数据成员名字及类型。
6、在你的工程的view类的头部通过包含对话框类的头文件
#include “mydlg.h”
包含你所建的对话框类。
注意:如果你改了对话框类的名字,看看相应的项目里新增的那个类的头文件名
7、在View类中增加变量
CString mydate;
8、通过Classwizzard增加一个鼠标左键消息响应函数,并在函数中增加如下代码:
void CT estView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Cmydlg dlg;
if(dlg.DoModal()==IDOK)
{
mydate=dlg.m_date;
}
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
9、在OnDraw函数里增加如下显示内容的代码
CString str;
str.Format("%s 是个好日子",mydate);
pDC->TextOut(10,10,str);
10、编译运行程序,在工作视图区点鼠标左键
四、按钮的使用
[实验步骤]
1、新建一个MFC单文档项目;
2、在资源选项卡中插入一个自己的对话框
3、新建一个对话框模板
4、在对话框中添加一个按钮,注意其ID。
5、通过Classwizzard新建你这个对话框的类,取名叫“Cmydlg”,当然你也可以取其他名字.
6、双击按钮,生成按钮命令响应函数,在其中添加如下代码:
m_btn=1;
OnOK();
7、在对话框类中添加public类型的变量
public:
int m_btn;
8、在View类中增加变量
int btn;
9、在View类中包含对话框的头文件
#include “mydlg.h”
包含你所建的对话框类。
注意:如果你改了对话框类的名字,看看相应的项目里新增的那个类的头文件名
10、通过Classwizzard增加一个鼠标左键消息响应函数,并在函数中增加如下代码:
void CT estView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
Cmydlg dlg;
if(dlg.DoModal()==IDOK)
{
btn=dlg.m_btn;
}
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
11、在OnDraw函数里增加如下显示内容的代码
if(btn==1)
pDC->Ellipse(rand()%100+10,rand()%100+10,rand()%100+100,rand()%100+100);
12、编译运行程序,在工作视图区点鼠标左键
五、基于对话框的应用程序
[实验步骤]
1、新建一个MFC项目,在项目创建向导中选择“基于对话框”;
2、直接编译运行程序,看看程序特点;
3、查看项目的类,看看和单文档项目的不同:最主要的只有一个应用程序类、一个应用程序对话框类以及一个不重要的about类。
(以下说的对话框均指应用程序对话框)
4、对话框类中的OnPaint函数相当于单文档项目里的OnDraw函数,可以尝试在OnPaint 函数的else分支里添加如下代码:
……
else
{
CPaintDC dc(this); // device context for painting
dc.TextOut(10,10,"hello world");
dc.Ellipse(20,40,80,80);
dc.Rectangle(20,90,60,120);
CDialog::OnPaint();
}
5、编译运行程序。