- 博客(67)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 MFC对话框窗口的折叠和展开
当某些功能不经常使用或者只有获得了某种权限密码后方可使用时可以使用这种折叠与展开方式。2.点击折叠按钮后:按钮下方的部分折叠起来。3.点击展开按钮:恢复到初始的展开状态。
2024-02-28 15:43:17
482
原创 隐藏和显示电脑下方任务栏
1.隐藏void CMyDlg::Onhide() { CWnd *taskBar; taskBar=FindWindow("Shell_TrayWnd",NULL);//获得任务栏窗口对象指针 taskBar->GetWindowRect(&taskBarRECT);//保存原任务栏窗口的大小 taskBar->SetWindowPos(NULL,0,600,0,0,SWP_HIDEWINDOW);//改变大小}2.显示void CMyDlg::Onsho
2021-12-01 13:16:28
893
原创 MFC窗口置顶
1.置顶::SetWindowPos ( AfxGetMainWnd ()->m_hWnd ,HWND_TOPMOST, -1, -1, -1, -1, SWP_NOMOVE|SWP_NOSIZE); //或 //SetWindowPos ( &wndTopMost , -1, -1, -1, -1, SWP_NOMOVE| SWP_NOSIZE);2.取消置顶SetWindowPos ( &wndNoTopMost , -1, -1, -1, -1, SWP_NOM
2021-12-01 13:03:18
1637
原创 改变对话框的背景色
1.头文件里定义一个画刷:CBrush m_brushColor;2.在OnInitDialog()初始化时创建画刷,并设置实际的颜色:m_brushColor.CreateSolidBrush ( RGB ( 100, 100, 255 ));//初始化颜色画刷3.通过类向导添加afx_msg HBRUSH OnCtlColor()函数,并返回颜色刷子:HBRUSH CxxxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { H
2021-12-01 12:54:48
886
原创 C++函数模板(Template Function)
模板(Template)指C++程序设计语言中采用类型作为参数的程序设计,支持通用程序设计。下面以不使用函数模板,和使用函数模板来实现同一功能的示例:例子:实现计算一个数的幂次方的函数power,接受正幂次方数,如果是负幂次方数,就让结果等于0.1.不使用模板如果不使用函数模板,对于需要实现的功能相同,但参数的数据类型却不同的情况,则需要定义多个不同数据类型的函数://对于实现 整数类型 的幂次方函数int power(int base,int exponent){ int result =
2021-11-30 14:19:02
1136
1
原创 MFC单文档中创建控件
MFC单文档中创建控件的步奏: 1.在xxView头文件中声明要添加的控件类型,如按钮 CButton m_button; 2.xxView.cpp中通过宏的形式定义控件的ID,如#define IDB_BTN 130 3.在OnCreate函数中通过Create、ShowWindow函数来在界面中创建控件例:1.CTestView.h中添加控件声明:public: CButton m_button; CStatic m_static;2.CTestView.cpp中添加宏定
2021-03-29 11:07:52
2249
2
原创 MFC单文档实现拆分窗口
拆分窗口使用CSplitterWnd来实现,实现步奏如下 第一步:在父框架中创建一个CSplitterWnd成员变量 第二步:在资源中插入一个对话框,Style设置为Child(必须) ,Border设置为None CSplitterWnd m_wndSplitter; 第三步:重载父框架的CFrameWnd::OnCreateClient成员函数,并在该函数中调用类CSplitterWnd的Create或CreateStatic成员函数,配合CreateView来创建视图例:CMainF
2021-03-29 09:53:45
804
原创 设计模式之单例模式
单例模式:单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点,使整个系统中只有唯一的一个对象实例。应用:常用于管理资源,如日志、线程池。实现要点: 在类中,要构造一个实例,就必须调用类的构造函数,并且为了保证全局只有一个实例,需防止在外部调用类的构造函数而构造实例, 需要将构造函数的访问权限标记为private,同时阻止拷贝创建对象时赋值时拷贝对象,因此也将它们声明并权限标记为private。 另外,需提供一个全局访问点,所以要在类中定义一个static函数,返回在类内部唯一构造的
2021-03-17 13:50:00
96
原创 MFC 封装删除目录的函数
void CBubbleMachineDlg::DeleteDirectory(CString strDir){ TCHAR szFind[MAX_PATH] = { _T("\0") }; lstrcpyn(szFind, strDir, MAX_PATH); lstrcat(szFind, _T("\\*.*")); //指明通配符,读取所有文件和目录 CFileFind finder; BOOL bfind = finder.FindFile(szFind, 0); while
2021-03-05 09:24:09
167
1
原创 MFC编写界面dll,加载并显示dll中的UI
1、创建一个“MFC dll”工程,确定。选择“使用共享MFC DLL的规则DLL”,点击“完成”。2、再创建的dll工程中插入一个对话框Dialog资源。3、在该对话框中添加一新类,如:UiDlg,基类为CDialog。4、在dll工程的.cpp文件最顶部处添加 #include “UiDlg.h”,并添加一个接口函数:extern "C" __declspec(dllexport) void ShowUIDlg(){ AFX_MANAGE_STATE(AfxGetStaticMo
2021-03-03 09:35:43
824
1
原创 C++ 16进制转成byte
#include <iostream>using namespace std;#define byte unsigned charbyte hex2byte(char hexstr[]);int main(){ char hex[3] = "67"; cout << int(hex2byte(hex));}byte hex2byte(char hexstr[]){ byte h = hexstr[0]; byte l = hexst
2021-02-25 17:04:21
1332
原创 CSV文件读写
写void CcsvWriteDlg::WriteCsv(){ CString strFilePath = _T("D:\\DataCsv.csv"); CFileFind finder; //判断文件是否存在,存在返回true,不存在返回false BOOL bWorking = (bool)finder.FindFile(strFilePath); if (!bWorking) { //不存在,创建 if (CStdioFile *fsp = new CStdioFile(st
2021-02-23 12:58:09
324
1
原创 MFC判断文件是否存在,不存在则创建+CSV文件操作
MFC判断文件是否存在,不存在则创建+CSV文件操作 CString strFileName; SYSTEMTIME sysLocaltime; GetLocalTime(&sysLocaltime); strFileName.Format(_T("D:\\TestData\\%04i-%02i-%02i"), sysLocaltime.wYear , sysLocaltime.wMonth, sysLocaltime.wDay); //创建目录 SHCreateDirectoryE
2021-02-22 14:19:14
1854
3
原创 MFC中IP控件常规操作
MFC中IP控件的使用void CMFC_IPControlDlg::OnIPAddressCtrl(){ /*获取计算机名和本机IP地址*/ WORD wVersionRequested; WSADATA wsaData; char name[255];//本机名 CString ip;//本机IP PHOSTENT hostinfo; wVersionRequested = MAKEWORD(2, 0); if (WSAStartup(wVersionRequested, &am
2021-02-04 15:27:20
545
原创 MFC--事件控制线程的开启和停止
使用线程过程中,如果while循环(死循环)比较多的话, 建议使用事件来控制线程的开启和终止。因为如果用sleep()轮询的方式来控制线程的停止,sleep是有不可避免的时间差的,不能及时准确地控制线程的开启和停止。而且,如果强行终止线程的话,容易造成内存泄漏的问题。所以,最好的方法,就是设置一个值(事件)作为标志. 如果这个标志发生了变化,就break即可。事件的使用流程:1.创建事件: CEvent* pExitEvent = new CEvent(FALSE, TRUE); 2.重
2021-01-09 22:28:14
1863
原创 WindowsAPI--获取系统目录信息GetSystemDirectory()
WindowsAPI–获取系统目录信息GetSystemDirectory( szSystemDir, MAX_PATH );该函数取得Windows系统目录(System目录)的完整路径名。该目录包含了所有必要的系统文件。根据微软的标准,其他定制控件和一些共享组件也可放到这个目录。通常应避免在这个目录里创建文件。在网络环境中,往往需要管理员权限才可对这个目录进行写操作。案例程序:功能:使用WindowsAPI函数获取系统目录信息,并写入到文件中#include<Windows.h&
2020-10-31 23:56:03
2999
原创 WindowsAPI --Windows数据结构(GetFileAttributesEx())
WindowsAPI --Windows数据结构GetFileAttributesEx() GetFileAttributesEx()获取指定文件或目录的文件系统的属性信息。如果要实现交互式操作,可以使用GetFileAttributesTransacted 函数。 参数: lpFileName[in]:文件或目录的名字,对于ANSI版本,名字不能大于MAX_PATH(260)。 返回值: 如果成功,返回值包含文件或目录的属性。如果失败,返回值是INVALID_FILE_AT
2020-10-31 23:44:56
1484
原创 WindowsAPI--CreateFile、ReadFile
WindowsAPI--CreateFile、ReadFileHANDLE CreateFile(BOOL ReadFile(BOOL WriteFile(案例:读取已经存在文件的内容文件内容:运行结果:结语:由于编码问题,有些字符(包括一些空格等)不能正常显示,需要修改文件的编码格式。如有更好的方法望各位指点明津!谢谢!HANDLE CreateFile( LPCTSTR,lpFileName, //指向文件名的指针
2020-10-31 23:02:09
622
原创 TCP 和 UDP网络通讯技术
TCP和UDP基本编程步骤:TCP: 服务器端: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); (可选) 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数send()和recv(),或者read()和write(); 7、关闭网络连接; 8、关闭监听; 客户
2020-06-08 11:55:35
651
原创 MFC显示OpenCv类型的Mat图片
void CXXXDlg::DrawOpenCvMat(Mat& img, UINT nID){ Mat imgTmp; CRect rect; GetDlgItem(nID)->GetClientRect(&rect); // 获取控件大小 int nWidth = rect.Width(); int nHeight = rect.Height(); resize(img, imgTmp, Size(nWidth, nHeight));// 缩放
2020-06-05 15:49:03
438
原创 OpenCV计算指定区域的黑白像素个数
过程模拟模板匹配过程,可修改成模板匹配方式:过程:读取一张图片->从图片中选取感兴趣区域(ROI),并保存->把保存下来的区域图片(ROI)读取出来->预处理后计算黑白像素的个数#include "stdafx.h"#include "opencv2/highgui/highgui.hpp"#include "cv.h"#include <opencv2/imgproc/imgproc.hpp>#include <iostream>using nam
2020-06-05 15:22:46
9063
4
原创 OpenCV模板匹配,匹配同一幅图中的多个目标
#include "stdafx.h"#include "opencv2/highgui/highgui.hpp"#include "cv.h"#include "highgui.h"#include <vector>#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <math.h>#include <iostream>#i
2020-06-05 13:11:40
4990
1
原创 OPenCV框选感兴趣区域ROI,按ESC退出时画框并输出坐标
/*OPenCV框选感兴趣区域ROI,按ESC退出时画框并输出坐标*/#include "stdafx.h" #include "opencv2/highgui/highgui.hpp" #include < iostream >#include "cv.h"#include "highgui.h"#include <vector>#include <opencv2/core/core.hpp>#include <opencv2/imgproc
2020-06-01 14:30:18
873
1
原创 MFC—分级创建目录及文件
分级创建目录及文件:在根目录下按照日期分类生成目录,在日期目录下再按照分钟生成分钟目录,文件按每分钟生成在不同的文件夹下。#include <io.h> //_access头文件#include <direct.h> //_mkdir()目录头文件void CFindFilesDlg:: TestLog(){ SYSTEMTIME LocalSystemTime; GetLocalTime(&LocalSystemTime); CStri
2020-05-27 17:26:53
574
原创 C++ STL之向量vector
vector成员函数: push_back( )在向量的末尾插入值,必要时会扩展向量的大小 size( )显示向量的大小 begin( )返回一个指向向量开头的迭代器 end( )返回一个指向向量末尾的迭代器 例:#include <iostream>#include <vector>using namespace std; int main(){ // 创建一个向量存储 int vector<int> vec; int
2020-05-26 14:35:13
335
原创 C++深入之内联函数
C++内联函数对常规函数的调用对应着跳转到标记函数起点的内存单元,然后执行函数代码,执行完毕后跳回到地址被保存的命令处。来回跳跃并记录跳跃位置是需要一定开销的。C++提供的内联函数与常规函数不同,内联函数在编译阶段就将函数代码与调用者内联起来了,也就是使用函数代码替换了函数的调用,从而实现较快的执行速度,但是代价是需要额外的存储空间。使用方式为在函数声明前加上关键字inline;在函数定以前加上关键字inline。什么时候考虑使用内联函数:(内联函数不需要出入栈,效率上会好点,但编译后的
2020-05-26 11:23:29
233
原创 CString几个常用方法
常用:CString Left(int nCount)const; //从左边1开始获取前 nCount个字符CString Mid(int nFirst)const; //从左边第 nCount+1个字符开始,获取后面所有的字符CString Mid(int nFirst, int nCount)const; //从左边第 nFirst+1 个字符开始,获取后面nCount个字符CString Right(int nCount)const; //从右边1开始获取从右向左前 nCount个字符v
2020-05-25 10:29:37
869
原创 取得字符串长度的几种方法及区别
sizeof :取得字符串的字节长度,包含 '/0'。strlen:取得多字节字符串中字符长度,不包含 '/0'。wcslen:取得宽字节字符串中字符长度,不包含 '/0'。tcslen:取得宽字节/多字节字符串中字符长度,不包含 '/0'。如:WCHAR wcsStr[] = L"ABCD";char chrStr[] = "ABCD";TCHAR tcsStr[] = _T("ABCD");//宽字符int wcslen01 = wcslen(wcsStr); //4 int w
2020-05-09 10:38:18
1009
原创 关于LPSTR、LPCSTR、LPTSTR和LPCTSTR
LPSTR: 指向一个字符串的32位指针,每个字符占1个字节。LPCSTR:指向一个常量字符串的32位指针,每个字符占1个字节。LPTSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2个字节。此字串可移植到Unicode和DBCSLPCTSTR:指向一个常量字符串的32位指针,每个字符可能占1个字节或2个字节。此字串可移植到Unicode 和DBCSANSI(即MBCS):多字节字符集,不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用
2020-05-09 10:17:14
2505
原创 C++不能往TXT、XML文件写入中文的解决方法
以下CStdioFile无法向文件(txt、xml)中写入中文,或写入的是乱码:CStdioFile file;file.Open(…);file.WriteString(_T(“abc你好”));//只能写入abc解决办法:使用setlocale语句设定区域#include <locale>//头文件CStdioFile file;file.Open(…);char...
2020-05-07 09:33:40
1232
原创 VS2015Socket警告warming:C4996 'inet_addr': Use inet_pton() or InetPton() instead or define _WIN...
原:sockAddr.sin_addr.s_addr = inet_addr(“192.168.1.6”);报警:Error C4996 ‘inet_addr’: Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings解...
2020-04-26 16:58:21
378
原创 MFC双击按钮不能跳转到代码的解决方法
首先在项目中–【生成】–【清除解决方案】关闭项目删除项目中的【Debug】下所有文件删除项目的.ncb文件打开项目重新编译完全OK
2020-04-26 14:26:49
5548
原创 Assert功能简介
断言assert的作用断言就是对某种假设条件进行检查。断言在 C 语言中被定义为宏的形式(assert(expression)),而不是函数,在<assert.h>文件中。assert 通过检查表达式 expression 的值来决定是否需要终止程序的执行。即,如果表达式 expression 的值为假(即为 0),那么它将首先向标准错误流 stderr 打印一条出错信息,然后再通过...
2020-04-09 17:28:25
376
原创 vc6.0 中报错#error : "eh.h is only for C++!"
vc6.0 中报错#error : “eh.h is only for C++!”原因:编译器是依据文件扩展名来判断是c还是c++语言的,而vc6.0在处理.c 文件是按C 语言编译的。报这个错时说明了程序中要求用到eh.h文件, 而eh.h文件是C++的文件,C中使用时需要c++支持。解决方法:把.c文件扩展名改成.cpp即可。...
2020-04-09 17:16:24
4879
原创 C++内存机制中内存泄露、内存溢出、内存越界和内存泄漏原因分析
在用C++做底层驱动时,经常会遇到内存不足的警告,往往是因为内存出现溢出、泄露或者越界等原因。内存溢出(out of memory) 是指程序在申请内存时,没有足够的内存空间供其使用。内存泄漏(memory leak) 是指程序申请的内存,用完后没有释放已申请的内存空间,占用有用内存。二者关系:内存泄漏的堆积最终会导致内存溢出内存溢出,就是你要的内存空间超过了系统实际分配给你...
2020-04-03 17:10:36
2093
原创 C++操作系统剪切板
剪切: if (OpenClipboard())//打开剪贴板 { CString str; HANDLE hClip; char* pBuf; EmptyClipboard();//清空剪贴板 GetDlgItemText(IDC_EDIT_SEND,str);//获取IDC_EDIT_SEND中的数据 //写入数据 hClip = GlobalAlloc(G...
2019-12-24 21:22:40
1497
4
原创 文件的复制、剪切、删除
#include <Windows.h>#include <stdio.h>//复制void CFileCopyClipDeleteDlg::OnBtnCopy() { DWORD getlastError; if (!CopyFileA("E:\\TestFile.txt", "E:\\Test\\TestFile.txt", false))//把1.txt...
2019-12-24 20:41:05
230
原创 MFC--文件对话框(选择路径和文件)
1.两个EDIT各自都关联一个CString变量2.选择文件夹路径Browse:void CFileDialogDlg::OnBnClickedBtnSelectPath(){ //获取目录路径 TCHAR szPath[MAX_PATH] = { 0 }; LPITEMIDLIST pitem; BROWSEINFO info; ::ZeroMemory(&...
2019-12-23 21:13:40
3074
原创 获取当前运行程序所在路径(exe/dll)
GetModuleFileName() 函数返回当前进程已加载可执行或DLL文件的完整路径名(以’\0’终止),该模块必须由当前进程地址空间加载。若要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx()函数。DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, //应用程序或DLL实例句柄,NU...
2019-11-27 21:57:01
1264
原创 MFC---获取combox内容的3种方法
//方法1:CString str;GetDlgItem(IDC_COMBO_NETCARD)->GetWindowText(str); //获得组合框中的选中内容int nChID = atoi(str);TRACE("%s", str);TRACE("%d", nChID);//方法2:int index = m_NetCard.GetCurSel();//m_NetC...
2019-11-27 21:03:37
12695
TCP-IP.zip
2020-04-16
怎么把CString转换成DWORD类型?
2019-08-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人