本篇是记录硕士期间开发的小软件。图形界面是基于MFC开发的,其中利用了OpenCV还有MySQL数据库。下面开始记录流水账式开发过程:
MFC框架
新建MFC项目,基于单文档,MFC标准项目,去掉工具栏
由于微软在VS2013中不建议使用C/C++的传统库函数scanf、strcpy、sprintf等函数,所以直接使用这些库函数会提示C4996错误。VS建议采用带_s的函数,如scanf_s、strcpy_s,但这些并不是标准C/C++函数。要想继续使用此函数,需要添加_CRT_SECURE_NO_WARNINGS预定义。或(项目->属性->C/C++预处理器->预处理器定义,添加_CRT_SECURE_NO_WARNINGS)设置窗口属性
设置图标
打开资源视图,添加本地ICO图标,在res文件夹中添加图标资源
//设置图标 IDI_ICON_SECLITE为图标资源ID
SetClassLong(m_hWnd, GCL_HICON, (LONG)AfxGetApp()->LoadIconW(IDI_ICON_SECLITE));
//设置右侧标题
SetTitle(TEXT("Version 1"));
//设置窗口位置和大小 (0,0)起点坐标x,y (800,500)窗口宽度和高度
MoveWindow(0, 0, 800, 500);
//将窗口移动到屏幕中央
CenterWindow();
利用上面的过程新建自己的项目界面,如下:
搭建内部框架
树控件切换时会触发TVN_SELCHANGED消息(指定选定项从一项变为另一项)
IDD_DIALOG_AUTHEN
CUserDlg 初始化m_user变量和m_name变量,并使用UpdateData将变量值显示到输入框控件中
没有OnInitialDalog()函数,使用下面函数试试效果,效果是显示出来后又被默认背景刷新掉
在初始化中画一次,则在后序的消息中,很有可能会导致各控件重画,这样就会把你原本画好的内容给刷掉了。
要么是放在对话框的OnPaint()中画,要么是放在picture control的子类中画,建议是放在picture control的子类中画,这样就会更好。
添加类CEployeePicture继承自CFromView,重载OnPaint()函数,对画框进行更新
不可行
重写CAutheDlg类的OnDraw方法,加入对图片的显示
更改静态控件static text中的值
GetDlgItem(IDC_DATA)->SetWindowTextW(data1);
List Control
报表模式
用内核对象进行线程同步
几乎所有内核对象都可以用来进行同步,对线程同步来说,这些内核对象中的每一种要么处于触发(signaled)状态,要么处于未触发(nonsignaled)状态。Microsoft为每种对象创建了一些规则,规定如何在这两种状态之间进行转换。例如,进程内核对象在创建的时候总是处于未触发状态。当进程终止时,操作系统会自动使进程内核对象变成触发状态。当内核对象被触发后,将永远保持这种状态,再也不会变回到未触发状态。(进程内核对象的内部有一个布尔变量,当系统创建内核对象的时候会把这个变量的值初始化为FALSE(未触发)。当进程终止的时候,操作系统会自动把相应的内核对象中的这个布尔值设为TRUE,表示该对象已经被触发)。
https://fishc.com.cn/forum.php?mod=viewthread&tid=78658&typeid=502
串口部分
最终效果