
VC
qiuxue110
这个作者很懒,什么都没留下…
展开
-
typedef
学着学着、看着看着、突然蒙了????原创 2022-02-16 21:05:25 · 501 阅读 · 0 评论 -
wstring 大小写转换 性能
#include <algorithm>transform(str.begin(), str.end(), str.begin(), ::tolower);效率远远高于boost::to_upper(str)原创 2022-01-01 18:21:34 · 318 阅读 · 0 评论 -
MFC 路径
获取程序的当前路径WCHAR savePath[MAX_PATH];GetCurrentDirectoryW(MAX_PATH, savePath);原创 2021-12-25 11:07:54 · 373 阅读 · 0 评论 -
VC++ mfc 声音
播放 wav头文件#include <Mmsystem.h>#pragma comment(lib, "Winmm.lib")源文件// IDR_PromptSound添加的wav音频文件PlaySound(MAKEINTRESOURCE(IDR_PromptSound), AfxGetResourceHandle(), SND_SYNC | SND_RESOURCE | SND_NODEFAULT);...原创 2021-12-21 15:24:22 · 304 阅读 · 0 评论 -
剪贴版 clipboard
打开剪贴版,复制数据到剪贴版 wstring str = L"数据"; UINT uFormt = 0;#ifdef UNICODE uFormt = CF_UNICODETEXT;#else uFormt = CF_TEXT;#endif if (!::OpenClipboard(NULL)) { return; } EmptyClipboard(); HANDLE hglobal = GlobalAlloc(GMEM_MOVEABLE, sizeof(wchar_t)原创 2021-12-21 11:05:08 · 183 阅读 · 0 评论 -
进程
设置进程优先级// declaration process handle and initialization to nullHANDLE hProcess = NULL;// get current process handle hProcess = GetCurrentProcess();// set current process prioritySetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);原创 2021-12-19 10:25:58 · 113 阅读 · 0 评论 -
CMenu
弹出菜单// The code fragment below shows how to create a new menu for the// application window using CreateMenu() and CreatePopupMenu().// Then, the created menu will replace the current menu of the// application. The old menu will be destroyed with Des.原创 2021-12-18 12:52:54 · 113 阅读 · 0 评论 -
AfxMessageBox 顶层
AfxMessageBox(L"完成!", MB_OK | MB_TOPMOST);原创 2021-12-14 00:18:35 · 810 阅读 · 0 评论 -
Dialog
结束当前对话框void EndDialog(int nResult);//nResult 可以是idok 或是 5原创 2021-12-12 12:13:37 · 264 阅读 · 0 评论 -
CFile
保存utf-8文件wstring strExport = L"要导出的文件内容";CFile file;if (!file.Open(strFileName, CFile::modeWrite | CFile::modeCreate)){ return;}string str_out = "";const unsigned char LeadBytes[] = { 0xEF, 0xBB, 0xBF };file.Write(LeadBytes, sizeof(LeadBytes));原创 2021-12-06 14:49:21 · 155 阅读 · 0 评论 -
mfc 只允许一个实例运行
////////////////////////////////////////////////////////////////////////// CString strAppName = AfxGetAppName(); HANDLE handel = CreateMutexW(NULL, TRUE, strAppName);//让程序只有一个实例 if (handel) { if (ERROR_ALREADY_EXISTS == GetLastError()) { strAp..原创 2021-12-04 15:04:01 · 621 阅读 · 0 评论 -
vc 屏幕最顶层绘图
CxImage image;/*要把image载入图像*/CRect rect;GetWindowRect(&rect);//获取最顶层hdc ::GetDC(0)image.Draw(::GetDC(0), rect);原创 2021-12-03 23:09:56 · 268 阅读 · 0 评论 -
double、float设置精度
double d = 1234567890123;std::wstringstream ss;ss << std::setprecision(13) << d;str = ss.str();原创 2021-11-28 00:53:54 · 1051 阅读 · 0 评论 -
CTreeCtrl
2021年11月21日13点37分,上面是Treectrl控件的图像形式,下面分别用序号进行解释。①毫无疑问是TreeCtrl顶级根节点,获取treectrl控件的顶级根节点,使用GetRootItem。②是①的子节点,可以用GetChildItem(根节点)获取,注意:只可以通过父节点用此函数获取一个子节点,若是想获取父节点下多个子节点,要使用GetNextItem(子节点, TVGN_NEXT);获取同级节点方式获得。②,③,④,⑤都是①的子节点,同时②,③,④,⑤彼此之间都是同..原创 2021-11-21 13:50:05 · 876 阅读 · 0 评论 -
Richedit
改变某行文本int start = m_RichEdit.LineIndex(line - 1);int end = m_RichEdit.LineIndex(line);m_RichEdit.SetSel(start, end);m_RichEdit.ReplaceSel(str.data());原创 2021-08-30 16:21:51 · 298 阅读 · 0 评论 -
vector 对每个元素执行同样操作
// 这只是个例子 对vector中每个元素替换 "\t" 为 ""for_each(m_VStrRegular.begin(), m_VStrRegular.end(), [](wstring& str) { boost::replace_all(str, L"\t", L""); });原创 2021-08-28 20:29:43 · 1357 阅读 · 0 评论 -
vector 排序除去重复
sort(v.begin(), v.end());// 先排序v.erase(unique(v.begin(), v.end()), v.end());// 排序后 才能去除重复原创 2021-08-28 16:58:25 · 349 阅读 · 0 评论 -
C++ int to wstring 0补位格式化
// 第一种方式wstring str2 = L"";wsprintfW((WCHAR*)str2.data(), L"%04d", 11);//////////////////////////////////////////////////////////////////////////// 第二种方式int num = 1024;wstringstream ss;ss << setw(5) << setfill(L'0') << num;wstrin.原创 2021-08-18 20:59:51 · 665 阅读 · 0 评论 -
md5 需要注意中文
若是用于HTTP协议 那么需要把中文进行utf8编码后再加密 否则服务器接收的值是有问题的MD5 md5;//需要加密的字符串string str_a = CW2A(str.data(), CP_UTF8);// 编码utf8原创 2021-08-11 16:06:43 · 241 阅读 · 0 评论 -
c++ Windows 获取文件夹下 所有指定文件
bool SearchFile(wstring strFolder_in, vector<wstring>& vStrFileName_out){ vStrFileName_out.clear(); // strFolder_in += L"\\*.csv";// *.csv present filter csv file but all file type use *.* int i = 0; CFileFind ff; BOOL ret = ff.FindFile(s.原创 2021-06-19 18:13:53 · 370 阅读 · 0 评论 -
C++ Windows 获取目录下(包含子目录)所有文件夹
void Recurse(wstring& strPath){ CFileFind finder; // build a string with wildcards strPath += L"\\*.*"; // start working for files BOOL bWorking = finder.FindFile(strPath.c_str()); while (bWorking) { bWorking = finder.FindNextFile(); /.原创 2021-06-19 18:01:07 · 744 阅读 · 0 评论 -
Windows hook 注入DLL
进程A:是开发者的程序进程B:是其它任意GUI程序如果要在进程A的地址空间中创建一个指针访问进程B地址空间中的数据是不可能的原因是 进程A,B的地址空间是相互独立的虚拟地址空间,进程A,B的地址空间是操作系统为进程虚拟出来的内存空间,并不是实际的物理内存空间,当进程的数据存储或是写入时,有操作系统为虚拟地址空间与实际物理内存空间进行数据交换,操作系统这样设计的目的是让进程彼此之间空间相互独立且不可跨界访问,是系统更加安全。然而项目的实际需求是需要在进程A中访问进程B中的数据,把B进程 i原创 2021-06-05 20:04:20 · 471 阅读 · 0 评论 -
使用注册表注入DLL
如图 首先找到注册表的位置原创 2021-06-05 19:11:03 · 281 阅读 · 0 评论 -
DLL 延迟载入 及 卸载
假设有这样的场景 我们开发的程序需要用到第三方的dll 但是 又不想把发布的程序制作成安装包的形式把dll打包到安装包内 且 只想发布一个.exe的便携版那么 我们有两种方式把dll 给用户第一种 把exe给用户的同时 需要把第三方的dll一并给用户 (当用户弄掉dll时 软件会提示丢失dll 不能工作 显然这种方式易丢失dll)第二种 把dll文件作为资源文件集成在exe中 在exe程序的初始化阶段判断需要的目录下有没有 我们需要的第三方的dll 若是没有 释放dll文件到相应的目录原创 2021-06-04 18:06:33 · 780 阅读 · 1 评论 -
DllMain
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // dll映射到进程的地址空间后 进程的主线程调用且只调用.原创 2021-06-03 16:36:17 · 106 阅读 · 0 评论 -
visual studio 2019 查看DLL 导出函数
用到了 dumpbin /exports dll路径原创 2021-05-30 15:22:35 · 939 阅读 · 0 评论 -
高并发设计
使用 64 位体系结构对于应用程序开发者,Solaris 64 位和 32 位环境的主要区别在于所使用的 C 语言数据类型的模型。64 位数据类型使用 LP64 模型,其中long和指针的宽度为 64 位,其他所有基础数据类型仍然与 32 位实现的数据类型相同。32 位数据类型使用 ILP32 模型,其中的int、long和指针宽度为 32 位。以下简要概述了 64 位环境的主要特征以及使用该环境时的注意事项: 大虚拟地址空间 在 64 位环境中,进程的虚拟地址空间最高可达 64 ...转载 2021-05-28 18:25:04 · 64 阅读 · 0 评论 -
浅谈进程地址空间与虚拟存储空间
早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。 那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存 的呢?下面通过实例来说明当时的内存分配方法: 某台计算机总的内存大小是 128M ,现在同时运行两...转载 2021-05-28 16:48:37 · 590 阅读 · 0 评论 -
虚拟地址空间
当处理器读取或写入内存位置时,它会使用虚拟地址。 在读取或写入操作过程中,处理器会将虚拟地址转换为物理地址。 通过虚拟地址访问内存有以下优势: 程序可以使用一系列连续的虚拟地址来访问物理内存中不连续的大内存缓冲区。 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。 当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。 数据或代码页会根据需要在物理内存与磁盘之间移动。 不同进程使用的虚拟地址彼此隔离。 一个进程中的代码无法更改正在由转载 2021-05-28 13:02:26 · 370 阅读 · 0 评论 -
vector 移除指定所有元素
// 本示例 指 移除vector中 所有 L" " 元素m_VStrKeyWord.erase(std::remove(m_VStrKeyWord.begin(), m_VStrKeyWord.end(), L" "), m_VStrKeyWord.end());原创 2021-05-16 23:51:48 · 337 阅读 · 0 评论 -
boost 处理 string
#include <boost/algorithm/string.hpp>using namespace boost;原创 2021-05-13 23:15:41 · 327 阅读 · 0 评论 -
boost 分割字符串
wstring str = L"1 2 3"vector<wstring> v_out;boost::split(v_out, str, boost::is_any_of(L" "), boost::token_compress_on);原创 2021-05-11 22:12:07 · 509 阅读 · 0 评论 -
c++ Windows 判断文件及文件夹是否存在 及 创建
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/access-waccess?f1url=%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(CORECRT_IO%252F_access);k(_access);k(DevLang-C%252B%252B);k(TargetOS-Windows)%26rd%3Dtrue&view=msvc-160https://docs.micros原创 2021-05-09 15:40:49 · 534 阅读 · 0 评论 -
CImage 载入缓存区图像数据
HGLOBAL hRes = ::GlobalAlloc(GMEM_MOVEABLE, dLength);// dLength 缓存区大小 if (hRes != NULL) { IStream* pStream = NULL; LPVOID lpResBuffer = ::GlobalLock(hRes); ASSERT(lpResBuffer != NULL); memcpy(lpResBuffer, buffer, dLength);// buffer 图像缓存区 HRE.原创 2021-05-08 16:26:54 · 347 阅读 · 0 评论 -
C++ 从N个数中 取出 M个数 进行排列
template <class BidirectionalIterator>inline constexpr bool next_partial_permutation(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last){ using std::reverse; reverse(middle, last); return std::next_permutati.原创 2021-05-01 09:55:47 · 619 阅读 · 0 评论 -
C++ 从M个元素中 取出N个元素 组合
/** Function return all possible combinations of k elements from N-size inputVector.* The result is returned as a vector of k-long vectors containing all combinations.*/template<typename T> std::vector<std::vector<T>> getAllCombinati.原创 2021-04-30 21:18:07 · 747 阅读 · 1 评论 -
boost visual studio 2019 编译
boost 官网https://www.boost.org/因为自己编译觉得麻烦 有时会出现奇怪的问题 所以 下载编译好的 文件 地址https://sourceforge.net/projects/boost/files/boost-binaries/32.exe 64.exe 不解释了我下载的是 32安装在所在的安装目录小 找到 文件夹打开找到这个就是 静态库文件目录头文件 include 如图整个文件夹...原创 2021-04-28 13:47:14 · 330 阅读 · 0 评论 -
C++ vector 每个元素 加减
// m_VRow 是一个 整型的 vectorfor_each(m_VRow.begin() + iRow, m_VRow.end(), [](int& i) { i--; });原创 2021-04-27 20:42:46 · 4316 阅读 · 1 评论 -
wstring string 传入构造函数的buffer中有乱码 那么 buffer中的信息会被截断 wstring string 显示的值不完整
//正确做法如下str.assign(buffer, bufferLength);原创 2021-04-13 22:46:06 · 235 阅读 · 0 评论 -
C++ HTTP Server API
注意问题一HTTPAPI_LINKAGE ULONG HttpAddUrl( IN HANDLE RequestQueueHandle, IN PCWSTR FullyQualifiedUrl,// Url 要么是 域名类型 要么是本机内网ip 否则此函数报错 PVOID Reserved);原创 2020-08-22 06:03:02 · 493 阅读 · 0 评论