MFC
MFC相关知识记录
Scarlett2025
种一棵树最好的时间是十年前,其次是现在。——非洲经济学家Dambisa Moyo《dead aid》
展开
-
MFC 修改AfxMessageBox默认标题
双击新建的字符串ID,改为**AFX_IDS_APP_TITLE**:修改标题为“温馨提示”原创 2022-04-15 16:54:40 · 524 阅读 · 0 评论 -
MFC IPAddressCtrl控件的使用
利用MFC进行网络通信离不开IP控件的操作,本例程基于VS 2017平台构建IP控件的使用例程1、利用MFC建立对话框程序2、在对话框界面上加载IP控件、编辑框和按键等如下图所示3、添加控件的变量和按键的响应函数4、XXDlg.cpp文件中添加程序void CNetDlg::OnBnClickedShow(){ BYTE valueip[4]; CString stringip; UpdateData(TRUE); if (m_ip.IsBlank()) //判断IP控件是否有写入原创 2022-04-15 11:19:58 · 1238 阅读 · 0 评论 -
MFC 制作socket服务端
界面配置一个IP Control、一个Button Control,5个Edit Control等建立两个文件,如下图所示:TcpClient.h中代码如下:#pragma once#define _WINSOCK_DEPRECATED_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#include<winsock2.h>#pragma comment(lib,"ws2_32.lib")#define err(errMsg) prin原创 2022-04-14 16:28:05 · 844 阅读 · 0 评论 -
MFC 将Unicode下的CString转换为char*
IP Control中获取的IP为CString类型,而网络连接时需要的是char类型。因此需要将CString转换为char**在xxDlg.h中声明函数void CString2Char(CString str, char ch[]); //字符格式转换函数在xxDlg.cpp中定义函数/* * 函数名: CString2Char * 参数1: CString str 待转换字符串 * 参数2: char ch[]原创 2022-04-13 17:55:30 · 669 阅读 · 2 评论 -
MFC 判断IP Control中输入的IP地址是否正确
IP Control会限定输入数字的大小,如果超过255,会显示255;如果输入汉字或英文字母则不显示。所以只需判断输入的IP地址是否与要求输入的IP一致即可。界面设置一个IP Control和一个Button Control为IP Control添加变量代码void CWareHouseMFCDlg::OnBnClickedButton4(){ UpdateData(TRUE); //把IP Address控件里的值转化为 CString格式 CString strIP; m_I原创 2022-04-13 17:30:19 · 510 阅读 · 0 评论 -
MFC 比较两个CString类型数据是否相同
界面设置界面上添加两个Edit Control和一个Button Control代码void CWareHouseMFCDlg::OnBnClickedButton3(){ UpdateData(TRUE); CString str1, str2; GetDlgItem(IDC_EDIT3)->GetWindowText(str1); GetDlgItem(IDC_EDIT4)->GetWindowText(str2); if (str1.Compare(str2)) /原创 2022-04-13 17:11:41 · 2009 阅读 · 0 评论 -
MFC 判断编辑框输入的是不是数字
界面添加两个控件:Edit Control和Button Control为按钮添加点击事件:代码如下:void CWareHouseMFCDlg::OnBnClickedButton1(){ CString str; GetDlgItem(IDC_EDIT1)->GetWindowText(str);//获取编辑框内容 if (str.SpanIncluding(_T("0123456789.")) != str) { MessageBox(_T("不是数字"), _T("温馨提示原创 2022-04-13 16:49:56 · 595 阅读 · 0 评论 -
MFC组框文本设置
CFont * font; font = new CFont; font->CreateFont(16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("宋体"));//宽度为16、粗体的原创 2022-04-08 12:01:15 · 218 阅读 · 0 评论 -
TabCtrl标签控件使用
将TabSheet.h和TabSheet.cpp文件放在项目目录下将这两个文件添加至项目中添加Tab Control控件要在代码中找到该控件插入新的界面去掉边框,Border —> None弹出方式,Style —> Child关联对话框...原创 2021-12-27 22:13:58 · 661 阅读 · 0 评论 -
CTreeCtrl 树控件使用
设置属性 设置线、按钮设置图片集合setImageList(CImageList* list , 正常显示的宏)list准备 create(30,30, 32位色,4,4) add (HICON)添加节点 InsertItem( 节点名称,显示图片,选中后显示的图,父节点)在xxDlg.cpp的OnInitDialog()函数中添加以下代码/*treeCtrl控件使用*/// 1 设置资源//准备HICONHICON icon[4];icon[0] = AfxGe.原创 2021-12-27 16:40:12 · 513 阅读 · 0 评论 -
MFC 容器中存放结构体数据
新建一个.h文件定义结构体在xxDlg.h文件中声明容器在xxDlg.cpp的OnInitDialog()函数中向结构体传递数据,并将结构体添加至容器中在xxDlg.cpp的OnPaint()函数中可以使用原创 2021-12-21 17:41:29 · 403 阅读 · 0 评论 -
MFC 的定时器SetTimer
使用定时器实时显示系统时间添加静态文本控件为控件添加变量界面布局void CSetTimerDlg::OnTimer(UINT_PTR nIDEvent){ if (nIDEvent == 1) { CTime now = CTime::GetCurrentTime(); CString str = now.Format(L"%Y-%m-%d %H:%M:%S"); m_lable.SetWindowText(str); } CDialogEx::OnTimer...原创 2021-12-19 20:40:35 · 1555 阅读 · 0 评论 -
MFC 子窗口利用双缓冲在指定控件中绘制椭圆
想通过点击一个按钮,弹出一个对话框,在此对话框中绘制椭圆(对话框弹出时椭圆已绘制完毕,不需要点击按钮触发)。则需要在新建对话框的OnPaint()函数中绘制1 建立模态对话框1.1 插入一个新的对话框1.2 修改对话框ID:选择对话框,Alt+Enter快捷键进入属性表1.3 对话框关联到 类中右键对话框 添加类(或者双击窗口也可)加入类名1.4 模态创建xxDlg.h窗口加入模态类头文件在xx.DIALOG对话框双击【双缓冲绘制椭圆】按钮,进入xxDlg.cpp窗口在OnB原创 2021-12-15 15:31:09 · 1479 阅读 · 0 评论 -
MFC 在指定控件中利用双缓冲绘图
想在指定控件如Group控件中利用双缓冲绘图修改控件ID在xx.Dlg.cpp的OnPaint()函数的else中加入以下代码:CWnd *pWnd = GetDlgItem(IDC_TEXT); //IDC_TEXT为Group控件IDCRect rect2; //存放组框控件大小pWnd->GetClientRect(&rect2);CDC *dc2;dc2 = pWnd->GetDC(); //获取控件的CDC指针CDC dcMem2; //用于缓冲作图的原创 2021-12-15 12:02:56 · 447 阅读 · 0 评论 -
MFC textout()输出字体设置
//设置字体CFont font;font.CreateFont(33, // 字体的高度 0, // 字体的宽度 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight 字体的粗细 FALSE, // bItalic 字体是否斜体 FALSE, // bUnderline原创 2021-12-15 10:05:53 · 2008 阅读 · 0 评论 -
MFC 在特定控件中绘图
拖入了一个长方形的Group类型控件,控件的ID为IDC_MYSTATIC,现在想在该控件中画图。实现起来很简单:要获取某个区域的指针,然后获取画布void CGroupDrawDlg::OnPaint(){ ...... CWnd *pWin = GetDlgItem(IDC_MYSTATIC);//获取该控件的指针,就可以对该控件直接操作了 CRect rect; pWin->GetClientRect(rect);//把控件的长宽、坐标等信息保存在rect里 int width原创 2021-12-14 15:40:00 · 1936 阅读 · 0 评论 -
AfxMessageBox()函数消息框按钮和图标
消息框中显示的按钮CString str1; str1.Format(_T("MB_ABORTRETRYIGNORE"), height, width); //消息框包含三个按钮:Abort,Retry和Ignore AfxMessageBox(str1, MB_ABORTRETRYIGNORE | MB_ICONINFORMATION, 0);CString str2; str2.Format(_T("MB_CANCELTRYCONTINUE"), height, width); //消原创 2021-12-14 13:41:13 · 7830 阅读 · 1 评论 -
基于MFC的对话框程序添加启动画面
创建一个基于对话框的工程,名曰“demo”,系统会自动生成一些文件。包含一个Dlg,这是主函数的Dlg。在资源管理器中插入一个新的对话框和一张位图,ID设置为IDD_SPLASH,在对话框上面添加一个picture控件,类型设为”Bitmap”,图像选择刚才插入的位图。设置对话框的Style为Popup,Border为None,去掉TitleBar属性,并调整对话框的大小与位图等大,这样对话框显示的时候,你看到的只是图片。如下:右键界面,点击‘添加类”,建立一个新类CSpl..原创 2021-12-13 16:05:49 · 1697 阅读 · 3 评论 -
MFC 控制台调试
本来用freopen,但报C4996错误,加了**#define _CRT_SECURE_NO_WARNINGS**也没用AllocConsole();//创建控制台SetConsoleTitle(_T("浮生华梦"));//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置蓝色SetConsoleTextAttribute(GetStdHandle(原创 2021-12-09 18:00:27 · 771 阅读 · 0 评论 -
MFC 模态窗口弹出时绘制图形
在.cpp文件中添加消息映射标志ON_WM_PAINT()在.h文件中添加OnPaint()函数声明afx_msg void OnPaint();在.cpp文件中实现OnPaint()函数,这样模态对话框弹出的时候,图形就绘制好了 CDC *p = GetDC();//获取设备上下文 CPen pen;//定义画笔 pen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0));//创建颜色画笔 CPen *poldone = p->SelectObj原创 2021-12-07 10:18:04 · 573 阅读 · 0 评论 -
CListCtrl控件使用
设置风格 报表风格 view 改为report添加编辑设置表头 参数 列数 内容 对齐方式 列宽m_list.InsertColumn(i,str[i],LVCFMT_LEFT,100);设置正文 从0开始设置行第一个内容 m_list.InsertItem(0,TEXT("姜山"));设置该行的其他内容 m_list.SetItemText(0,1,TEXT("男"));设置额外属性 整行选中 网格显示设置风格 报表风格 view 改为report设置表头 参数 列数 内容原创 2021-12-03 17:12:44 · 614 阅读 · 0 评论 -
ComboBox下拉框使用
属性里设置内容 data 中间数据用;进行分割默认会进行排序 sorttype 改为不可编辑状态 drop list代码:添加AddString 删除 deleteString 插入 InsertString设置当前索引 setCurSel(索引值)获取内容 getLBText(索引值,CString str)SEL_CHANGE 事件获取当前索引 getCurSel...原创 2021-12-03 15:06:25 · 2094 阅读 · 0 评论 -
CEditCtrl控件使用
默认不支持多行输入想支持多行输入属性修改 multiline wantReturn垂直无限输入内容 auto VScroll垂直/水平滚动条 Horizontal Scroll Vertical Scroll单行小bug 回车默认退出对话框 修改? 右键属性CEditCtrl 设置内容Control setWindowText getWindowTextvalue将控件内容 同步到变量上 UpdateData(TRUE)将变量内容 同步到控件上 UpdateData(FALSE)原创 2021-12-03 13:32:19 · 592 阅读 · 0 评论 -
MFC StaticText静态文本使用
代码中使用静态文本控件,需要添加变量STATIC为结尾的ID控件,需要修改ID设置内容 setWindowTextW获取内容 getWindowTextW通过 Static Text 显示 bmp 图片 //设置静态控件窗口 m_img.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);通过路径获取bitmap句柄 #define HBMP(filepath,width,height) (HBITMAP) LoadImage(AfxGetInstan原创 2021-12-03 11:01:19 · 2430 阅读 · 0 评论 -
MFC 模态/非模态对话框创建
基于 对话框学习 修改窗口标题 captain 插入 dialog 创建新的对话框 点击按钮 弹出模态和非模态对话框 点击按钮 触发点击事件 右侧属性 控件事件 右键按钮 添加事件处理程序 双击按钮 对话框关联到 类中 右键对话框 添加类 模态创建 CDlgExec dlg dlg.doModal 阻塞 非模态 CDlgShow dlg 保存成员中 dlg.Create(ID) 初始化中保证只创建一次 dlg.ShowWindow(...)...原创 2021-12-01 16:53:51 · 818 阅读 · 0 评论 -
基于对话框的MFC界面添加菜单栏
在资源视图中右键单击->添加资源->menu->新建,并命名ID为IDR_MENU1新建之后默认ID为IDR_MENU1;(若想要修改ID,可以找到属性栏(方法见下),之后双击ID,进行修改)找属性栏:(1)右击窗口点击属性2)点击刚才的新建的菜单资源—>右键—>属性,即可看到菜单的相关属性(包括ID)现在说如何插入刚才新建的菜单:找到窗口的属性(本例中为ID_MFCAPPLICATION1_DIALOG),找到menu,将值设置为刚才新建的菜单ID.原创 2021-11-30 17:38:56 · 2114 阅读 · 2 评论 -
MFC更换运行窗口图标
找到一张后缀名我.ico的图片,放置在项目所在目录的res文件夹内在资源视图右击icon文件夹,添加资源->导入->选择刚才的ico文件,即可自动生成资源ID,默认为IDI_ICON1将xxDlg.cpp代码中LoadIcon函数的参数更换成自己设置的ico文件的ID,点击运行即可完成图标的更换。...原创 2021-11-30 16:49:20 · 1256 阅读 · 0 评论 -
MFC控件之组框Group Box
Group Box本质就是CButton类,只需要创建的时候dwStyle指定样式BS_GROUPBOX即可定义:在对话框类中private: CButton m_group;创建:在对话框OnInitDialog()函数中m_group.Create(L"姜山", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, CRect(100, 100, 500, 300), this, 10000);运行效果:...原创 2021-11-30 10:13:28 · 4201 阅读 · 0 评论 -
MFC实现一个空窗口
头文件 #include<afxwin.h>应用程序类 MyApp :public CWinApp有且仅有一个应用程序对象 MyApp app入口函数 BOOL InitInstance();创建窗口窗口框架类 MyFrame :public CFrameWnd构造函数 Create(NULL, 标题名);InitInstance 创建窗口 MyFrame *frame = new MyFrame; 显示 更新 保存主窗口指针 m_pMainWnd = frame; r原创 2021-11-29 22:13:37 · 433 阅读 · 0 评论