C++ MFC各控件代码练习例子
- 格式:doc
- 大小:5.03 MB
- 文档页数:57
MFC应⽤程序编写实例—完整版(原创)前段时间,将近花了⼀周⾄两周上班和上班后的闲余时间,做了⼀个⽤于调试和测试⼯作项⽬的应⽤软件,下⾯将实现软件的重要步骤及主要功能讲解⼀遍,⽅便⽇后查阅。
程序开始后,提⽰登录框,输⼊⽤户名,密码后,登录进去主窗体,效果图如下:下⾯将主要实现的功能函数要点进⾏描述,具体实现如下:⼀、设置主窗体⼤⼩1、进⼊⼯程窗体初始化函数,OnInitDialog()中,在CDialog::OnInitDialog() 下⾯添加函数语句如下:SetWindowPos(NULL,0,0,600,400,SWP_NOMOVE); ////设置主窗体⼤⼩,长为600,⾼为400⼆、为主窗体添加背景图⽚:1、⾸先,在⼯程头⽂件中,声明画刷变量如:CBrush m_brBk;2、在⼯程OnInitDialog()中,添加如下代码:CBitmap bmp1;bmp1.LoadBitmap(IDB_BITMAP1);m_brBk.CreatePatternBrush(&bmp1);3、添加消息函数OnCtlColor,代码如下所⽰:HBRUSH CDebugDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// if (pWnd == this)//// {//// return m_brBk;//// }return(HBRUSH) m_brBk;}三、调⽤模态对话框和⾮模态对话框(以菜单⼊⼝为例)如菜单所属的主窗体类名为CDebugDlg,调⽤对话框的类名为CPing实现调⽤⾮模态对话框⽅法:选择调⽤菜单⼊⼝后,点击添加消息处理函数,在函数体内添中如下代码:CPing *dlg = new CPing();dlg->Create(IDD_DIALOG_PING); //创建⼀个⾮模态对话框dlg->ShowWindow(SW_SHOW); //显⽰⾮模态对话框 实现调⽤模态对话框⽅法:Cping dlg;dlg.DoModal();四、调⽤外部应⽤程序⽅法:1、调⽤外部应⽤程序可采⽤WinExec函数例如,调⽤⼀个Tcpview.exe外部程序,可在消息处理函数中添加如下代码:WinExec(".\\dll\\TCPview\\Tcpview.exe",SW_SHOW); // 其中.代表当前路径,此时需要⽤到\\来区分路径。
mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。
它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。
在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。
问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。
它使用的是C++的模板机制,可以在链表中存储任意类型的数据。
但在这里,我们主要关注它在处理字符串方面的应用。
问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。
您可以根据需要创建多个实例,并在程序的任何地方使用它们。
问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。
AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。
下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。
问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。
int Str2Hex(CString str, UINT32* data)实现的功能是将str(16进制)->数字。
比如11转换成17。
21转换成33。
Visual C++通用范例开发金典\Visual C++通用范例开发金典ch011. IDC_STATIC1:void CCStatic2Dlg::OnStatic1(){// TODO: Add your control notification handler code hereCString str;GetDlgItem(IDC_STATIC1)->GetWindowText(str);if("Hello,World!"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("Visual C++!");}if("Visual C++!"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("I like C++");}if("I like C++"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("Hello,World!");}}2.BOOL CRadio_Button1Dlg::OnInitDialog()中的代码:CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO1);3.BOOL CButton3Dlg::OnInitDialog()中的代码:CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO3);CButton *ptn=(CButton *)GetDlgItem(IDC_CHECK1);ptn->SetCheck(1);在void CButton3Dlg::OnOK(){// TODO: Add extra validation hereCString str,strCtrl;int i;str="您的年级:";UINT nID1=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);GetDlgItemText(nID1,strCtrl);str=str+strCtrl;str=str+"\n你最喜欢的课程:";UINT nID2[4]={IDC_CHECK1,IDC_CHECK2,IDC_CHECK3,IDC_CHECK4};CButton *ptn;for(i=0;i<4;i++){ptn=(CButton *)GetDlgItem(nID2[i]);if(1==ptn->GetCheck()){ptn->GetWindowText(strCtrl);str=str+strCtrl;str=str+" ";}}MessageBox(str);// CDialog::OnOK();}4.void CCstatic1Dlg::OnOK(){if (static1.m_hWnd){static1.DestroyWindow();}else{static1.Create("生成的新的静态文本框",WS_CHILD|WS_VISIBLE,CRect(0,0,200,30),this,11);}// CDialog::OnOK();}5.void CCShrinkView::OnShrink(){// TODO: Add your command handler code hereCShrink_Dlg* pt1=new CShrink_Dlg;pt1->DoModal();}void CShrink_Dlg::OnButton1(){// TODO: Add your control notification handler code hereCString str;GetDlgItemText(IDC_BUTTON1,str);if("收缩<<"==str)SetDlgItemText(IDC_BUTTON1,"扩展>>");elseSetDlgItemText(IDC_BUTTON1,"收缩<<");static CRect rectLarge;static CRect rectSmall;if(rectLarge.IsRectNull()){CRect temp;GetWindowRect(&rectLarge);GetDlgItem(IDC_SHRINK)->GetWindowRect(&temp);rectSmall.left=rectLarge.left;rectSmall.top=rectLarge.top;rectSmall.right=rectLarge.right;rectSmall.bottom=temp.top;}if(str=="收缩<<"){SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NO ZORDER);}else{SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NO ZORDER);}}6.BOOL CCEdit_6Dlg::OnInitDialog()中的:CTime time;time=CTime::GetCurrentTime();m_time=time.Format("%x--%X");UpdateData(FALSE);void CCEdit_6Dlg::OnTimer(UINT nIDEvent){CTime time;time=CTime::GetCurrentTime();m_time=time.Format("%Y-%m-%d %H:%M:%S");UpdateData(FALSE);CDialog::OnTimer(nIDEvent);}7.只有一个例子,其它的仿照void CCEdit4Dlg::OnGreenRadio3(){colour = RGB(0,255,0);m_edit.SetFocus();}8.class CColorEdit : public CEdit自己新创了一个类HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor){// TODO: Change any attributes of the DC hereCDC* dc = GetDC(); //获取画布对象CRect rect;GetClientRect(rect); //获取客户区域rect.InflateRect(3,3,3,3);//将客户区域增大3个像素CBrush brush (m_color);//创建画刷dc->FrameRect(rect,&brush);//绘制边框// TODO: Return a non-NULL brush if the parent's handler should not be called return NULL;}void CColorEdit::SetColorEdit(COLORREF color){m_color=color;}//m_color是CColorEdit的一个成员函数BOOL CCEdit_5Dlg::OnInitDialog()中的m_edit1.SetColorEdit(RGB(255,0,0));m_edit2.SetColorEdit(RGB(0,0,255));9.void CCEdit_1Dlg::OnButton1(){// TODO: Add your control notification handler code hereCString str;UpdateData(TRUE);if((strcmp(m_name,"张三")==0)&&(strcmp(m_password,"1113")==0)) str="密码正确,登陆成功!";else if((strcmp(m_name,"")==0)||(strcmp(m_password,"")==0)) str="请输入用户名或密码:";elsestr="用户名或密码错误:";MessageBox(str);}10.void CCEdit_2Dlg::OnChangeEdit1(){UpdateData(TRUE);// m_write="d\nyyy";m_read=m_write;UpdateData(FALSE);}11.CSpinButtonCtrl m_spinage;BOOL CSpinButtonDlg::OnInitDialog()中的:m_spinage.SetRange(1,100);m_spinage.SetBase( 0 );void CSpinButtonDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) {NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;// TODO: Add your control notification handler code hereUpdateData(TRUE);m_age=m_age+(float)pNMUpDown->iDelta;if(m_age<0) m_age=0;if(m_age>10) m_age=10;UpdateData(FALSE);*pResult = 0;}void CSpinButtonDlg::OnOK(){// TODO: Add extra validation hereUpdateData(TRUE);CString str;char *temp=new char;itoa(m_age,temp,10);str="结果显示:\n姓名:";str+=m_name;str+="\n年龄:";str+=temp;str+="\n年级:";str+=m_class;str+="\n电话:";str+=m_phone;MessageBox(str);//CDialog::OnOK(); }。
MFC实例教程何礼富(安徽理工大学)实例1 最简单的对话框程序实例2 鼠标测试程序实例3 点鼠标游戏实例4 为程序添加图标1.新建一个MFC AppWizard(exe)工程,工程名为IconTest2.在MFC AppWizard的Step 1步骤,选择“Dialog based”,其余的步骤全部选择默认。
3.切换到ResourceView视图,右键点击Icon,选择“import”,导入三个图标(.ico)文件,如下图:4.找到CIconTestDlg类的构造函数,找到下面的语句:m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);将其修改为:m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);5.运行程序,可以看到程序的图标已被修改成我们自己定义的图标。
6.继续回到Resource View视图,打开IDD_ICONTEST_DIALOG的设计界面,删除之前生成的文字框和按钮,重新添加一个文字框和一个按钮,如下图:7.将按钮控件的Style中的Icon选项选中8.找到CIconTestDlg类的OnInitDialog()函数,在其中添加下图中的语句:9.执行程序,图标就被显示在界面上了。
实例5 三国游戏之选择武将1.建立一个基于MFC对话框的项目“ComposedDialog”。
2.切换到Resource View视图,在左边的资源树上点右键,选择“insert”,弹出“Insert Resource”对话框,选择“Bitmap”,点“import”,导入事先准备好的位图文件。
3.设计界面:4.右键点性别组合框,选择“property”,添加以下数据:5.打开Class Wizard,添加以下变量:。
咱们通常知道按钮控件是分两种的,一种是多选按钮(即复选按钮),另一种是单选按钮,要实现这些并非难,你只需要知道相应控件的利用规则和C++的基础即可。
请看实现程序的截图年龄选项固然是单选的,是圆形按钮,而爱好可以有多个,所以是复选按钮,在MFC中的控件格式是方块,此程序实现的功能是选择相应的年龄和爱好后点击肯定按钮即可出现所选选项,如图所示:我选择的年龄是15到30岁之间,爱好是聊天交友和查阅资料,此时我点击肯定按钮后出现如下图示:实现源代码如下:按钮空间的利用.cpppp : 概念应用程序的类行为。
"#include "按钮控件的利用"#ifdef _DEBUG#define new DEBUG_NEW#endif"#include "按钮控件的利用"#ifdef _DEBUG#define new DEBUG_NEW#endif.”菜单项添加到系统菜单中。
pppp : 概念应用程序的类行为。
"#include "吹泡泡"#ifdef _DEBUG#define new DEBUG_NEW#endif"#include "吹泡泡"#ifdef _DEBUG#define new DEBUG_NEW#endifCRect m_rectBubble[MAX_BUBBLE]; COLORREF m_colorBubble[MAX_BUBBLE]; int m_nBubbleCount;CRect m_rectClient;COLORREF m_colorCurrent;.”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必需在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) ==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL){CString strAboutMenu;(IDS_ABOUTBOX);if (!()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。
例程1. MFChello步骤1.选择新建-项目,打开后出现如果1所示对话框。
选择VC++中的智能设备,在右边选择MFC 智能设备应用程序。
在下方的名称中输入MFChello,点击确定。
步骤2.步骤3.步骤4.步骤5.步骤6在BOOL CMFChelloApp::InitInstance()添加如下代码AfxEnableControlContainer(); //调用此函数的目的是为了使程序支持包含OLE控件MessageBox(NULL,_T("一个简单的MFC程序"),_T("你好"),MB_OK); //谈出对话框例程2.鼠标测试程序同例程1一样,建立一个基于对话框的MouseTest程序。
在右边的对话框编辑器中选择Static Text,添加到对话框中一个静态文本,然后更改右下角的静态文本的属性,Caption改为提示:点一下鼠标右键或左键,ID改为IDC_STATIC点击对话框,在右下角点击消息按钮,出现下图。
找到WM_LBUTTONDOWN消息,添加OnLButtonDown函数。
在函数中添加代码如下MessageBox(NULL,_T("你点的是左键"),_T("The first Dialog"),MB_OK);同样操作在WM_RBUTTONDOWN消息,添加OnRButtonDown函数。
在函数中添加代码如下MessageBox(NULL,_T("你点的是右键"),_T("The first Dialog"),MB_OK);进行仿真即可。
例程3.添加图标创建一个基于对话框的IconTest程序。
切换到资源视图。
右键点击Icon,选择添加资源,弹出下图。
选择导入,导入一个图标文件(.ico)文件,如下图。
点击CIconTestDlg类,找到CIconTestDlg函数。
void CMy122Dlg::OnButton1open() {m_OPEN.EnableWindow(false ); //EnableWindow()方法可以使按钮失效MessageBox("已打开");m_CLOSE.EnableWindow(true );}void CComboboxDlg::Onmony(){UpdateData(TRUE);CString str,strmoy;strmoy.Format("%d",m_money);str="你确定要将";str+=strmoy;str+="元打入对方账户?";if (IDOK==MessageBox(str,"提示",MB_ICONQUESTION|MB_OKCANCEL)){MessageBox("付款成功","提示",MB_ICONASTERISK);}}控制显示的文本利用成员函数SetWindowText/GetWindowText 用于设置/得到当前显示的文本。
通过GetLimitText/SetLimitText 可以得到/设置在输入框中输入的字符数量。
输入框几种常用的消息映射宏:ON_EN_CHANGE 输入框中文字更新后产生ON_EN_ERRSPACE 输入框无法分配内存时产生ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框失去/得到输入焦点时产生在创建滚动条后需要调用void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )设置滚动范围, int GetScrollPos( )/int SetScrollPos( )用来得到和设置当前滚动条的位置。
void ShowScrollBar( BOOL bShow = TRUE );用来显示/隐藏滚动条。
BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH )用来设置滚动条上箭头是否为允许状态。
nArrowFlags 可取以下值:ESB_ENABLE_BOTH 两个箭头都为允许状态ES_DISABLE_LTUP 上/左箭头为禁止状态MessageBox("这个是自定义的消息!!!" ,"自定义消息对话框!!!",MB_ICONINFORMATION); MB_ABORTRETRYIGNORE 显示终止重试或忽然按钮 MB_OK 显示确定按钮 MB_RETRYCANCEL 显示确定或取消按钮 MB_YESNO 显示重试或取消按钮 MB_YESNOCANCEL 显示是或否按钮 MB_ICONQUESTION 带问号图标 MB_ICONHAND 、MB_ICONSTOP 、MB_ICONERROR 三种都是带叉号图标 MB_ICONEXCLAMA TION 、MB_ICONW ARNING 两种都是带感叹号图标 MB_ICONASTERISK MB_ICONINFORMA TION 带信息号图标 AfxMessageBox()函数缺点就无法设置消息对话框的标,提示消息框的标题与工程名称相同, 优点:就是在动态链接库工程或其它工程中,可以直接用它来显示消息提示对话框。
MessageBox()函数必须用于一个窗口对象,没有窗口对象,就无法调用MessageBox()函数ESB_DISABLE_BOTH 两个箭头都为禁止状态SB_TOP/SB_BOTTOM 已滚动到顶/底部SB_LINEUP/SB_LINEDOWN 向上/下滚动一行SB_PAGEDOWN/SB_PAGEUP 向上/下滚动一页SB_THUMBPOSITION/SB_THUMBTRACK 滚动条拖动到某一位置,参数nPos指明当前位置(参数nPos在其它的情况下是无效的)SB_ENDSCROLL 滚动条拖动完成(用户松开鼠标)注意:如果出现以上功能不好使的情况,可以关闭当前的工程,然后在工程目录下删除扩展名为“.ncb”的文件,然后重新打开工程,Visual C++会重建一个“.ncb”文件,此时完全取词功能将恢复正常。
void C_bj::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: Add your message handler code here and/or call defaultvoid C_bj::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){SCROLLINFO scrollinfo;SetScrollRange (SB_VERT, 0, 850, TRUE);//这个就是设置你的滚动条的范围GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);switch (nSBCode){case SB_BOTTOM:ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax));scrollinfo.nPos = scrollinfo.nMax;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_TOP:ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin));scrollinfo.nPos = scrollinfo.nMin;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_LINEUP:scrollinfo.nPos -= 20;if (scrollinfo.nPos<scrollinfo.nMin){scrollinfo.nPos = scrollinfo.nMin;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,20);break;case SB_LINEDOWN:scrollinfo.nPos += 20;if (scrollinfo.nPos>scrollinfo.nMax){scrollinfo.nPos = scrollinfo.nMax;break;}ScrollWindow(0,-20);break;case SB_PAGEUP:scrollinfo.nPos -= 20;if (scrollinfo.nPos<scrollinfo.nMin){scrollinfo.nPos = scrollinfo.nMin;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,20);break;case SB_PAGEDOWN:scrollinfo.nPos += 20;if (scrollinfo.nPos>scrollinfo.nMax){scrollinfo.nPos = scrollinfo.nMax;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,-20);break;case SB_ENDSCROLL:// MessageBox("SB_ENDSCROLL");break;case SB_THUMBPOSITION:// ScrollWindow(0,(scrollinfo.nPos-nPos));// scrollinfo.nPos = nPos;// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_THUMBTRACK:ScrollWindow(0,(scrollinfo.nPos-nPos));scrollinfo.nPos = nPos;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}void CTestScrollDlg::OnSize(UINT nType, int cx, int cy){SCROLLINFO scrollinfo;SetScrollRange (SB_VERT, 0, 600, TRUE);//这个就是设置你的滚动条的范围GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);scrollinfo.nPage=400;//页的大小,SetScrollInfo(SB_VERT,&scrollinfo,SIF_PAGE);CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code here}void CFirstProjectDlg::OnOK(){if (!IsWindow(m_Book.m_hWnd)) //是否关联了对话框{m_Book.Create(IDD_BOOKDLG, NULL); //创建对话框}m_Book.ShowWindow(SW_SHOW); //显示对话框}void CMy122Dlg::OnButton2close(){m_CLOSE.EnableWindow(false);MessageBox("已关闭");m_OPEN.EnableWindow(true);}void CFirstProjectDlg::OnOK(){if (!IsWindow(m_Book.m_hWnd)) //是否关联了对话框{m_Book.Create(IDD_BOOKDLG, NULL); //创建对话框}m_Book.ShowWindow(SW_SHOW); //显示对话框}1.自定义一个消息;------>2.申明一个涵数---------------->3.把函数设成消息响应函数--------------->4.发送消息处理函数#define MESSAGE1 WM_USER+1 //windows定义好从下一个开始如有多个+1或+2 前面都是大写。