![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 66
Coding14
这个作者很懒,什么都没留下…
展开
-
win32模态与非模态对话框
win32模态与非模态对话框一、模态对话框与非模态对话框的区别二、模拟实现模态窗口1. 非阻塞的方式实现窗口的模态2. 阻塞的方式实现窗口的模态一、模态对话框与非模态对话框的区别使用DialogBox、DialogBoxIndirect、DialogBoxParam、DialogBoxIndirectParam创建模态对话框时,系统会首先将此模态窗口的父窗口disable掉,然后启动和运行一个消息循环,接受和拆分消息。在EndDialog调用时结束消息循环,设置结束模式对话框的返回值,销毁窗口。使用C原创 2021-08-11 19:24:43 · 1320 阅读 · 0 评论 -
使用MsgWaitForMultipleObjects在主线程等待子线程退出
使用MsgWaitForMultipleObjects在主线程等待子线程退出在主线程中使用WaitForSingleObject等待子线程的退出,涉及到sendmessage相关的消息驱动函数就会造成死锁的问题。在这种场景下,就需要使用MsgWaitForMultipleObjects来处理了。static void WaitObjectAndMsg(HANDLE hHandle) { while (TRUE) { DWORD ret; MSG msg;原创 2021-08-04 11:55:12 · 819 阅读 · 0 评论 -
AppendMenu使用时的一个诡异问题?
AppendMenu使用时的一个诡异问题?1、问题背景2、问题现象3、问题代码4、问题原因5、参数说明1、问题背景自定义右键菜单列表,使用AppendMenu进行子条目的插入操作。2、问题现象大部分情况下,右键菜单项正常显示。极少情况下,出现某个或者某几个菜单项后面多出来了子菜单列表。出现这种情况,没有固定的时间地点,没有固定的流程或者操作,没有确定的操作系统。出现或者不出现一切皆随缘。3、问题代码HMENU rightMenu=CreatePopupMenu();HMENU popup =原创 2021-08-04 10:17:15 · 269 阅读 · 0 评论 -
Win32树控件实现多选的几个关键点
Win32 树控件实现多选的几个关键点CreateWindowEx创建WC_TREEVIEW控件添加选中条目的list记录下选中的节点,在选中状态发生改变的时候,更新list中条目的选中状态WM_LBUTTONDOWN时,判断ctrl和shift键的按下状态,判断当前是单选还是多选,记下本次点击的条目,记下当前所有选中的条目WM_LBUTTONUP时,更新选中条目的选中状态。sendmessage TVM_SETITEM消息可以更新选中状态TVITEM _ms_TVi;_ms_TVi.mas原创 2021-06-11 16:22:57 · 273 阅读 · 0 评论 -
TeamTalk WinClient编译问题及解决方案
本人微信公众号:CPP进阶之旅如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货VS编译TeamTalk的Windows客户端错误处理清单一、 is deprecated and will be REMOVED.二、error C2440: “初始化”: 无法从“int”转换为“mbstate_t”三、无法打开文件“mfcs120ud.lib”四、error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900”(IM.BaseDefin.原创 2021-03-31 20:34:35 · 744 阅读 · 1 评论 -
TeamTalk部署问题及解决方案
TeamTalk部署问题及解决方案1、部分源下载地址2、编译安装libiconv报错3、找不到tt4、编译im-server5、缺少daeml6、找不到mysql.h7、centos7 mini 安装后无法连接到网络8、使用mwget提高下载速度9、nginx: [emerg] unknown log format "access" in错误解决方法10、PHP报错1、部分源下载地址gmpwget ftp://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.gzmpfrwge原创 2021-03-18 17:11:25 · 759 阅读 · 0 评论 -
TeamTalk部署详细教程(最全最新TeamTalk部署教程助你一次部署成功)
本人微信公众号:CPP进阶之旅如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货TeamTalk部署详细教程背景1、更新操作系统2、删除已经安装的软件3、安装必要的依赖软件4、安装mysql4.1 下载4.2 解压编译4.3 添加mysql用户4.4 修改配置文件4.5 初始化mysql4.6 启动mysql4.7 查看到mysql进程,安装成功4.8 后期配置4.9 结束5、安装PHP5.1 下载PHP5.2 安装依赖5.2.1 libiconv5.2.2 libmcryp.原创 2021-03-18 16:33:13 · 5721 阅读 · 0 评论 -
TeamTalk各个服务的IP配置方案
TeamTalk各个服务的IP配置方案1.纯公司内网2.公网ip3.公网ip,路由器映射TeamTalk源码中的IM_SERVER下共有8种服务器,所以在服务器环境配置完成后,也需要对这些服务器进行分别配置。假设所有服务都部署在一台机器上1.纯公司内网安装的机器内网ip为: 192.168.1.2login_server:ClientListenIP=192.168.1.2 ClientPort=8008HttpListenIP=192.168.1.2HttpPort=8080MsgS转载 2021-03-18 15:47:58 · 863 阅读 · 0 评论 -
win32创建单选框、多选框(附代码)
win32使用WS_GROUP属性创建单选框,复选框/*win32使用WS_GROUP属性创建单选框,复选框*/void CreateRButton(HWND hWnd){ /*创建一个GroupBox*/ CreateWindowEx(WS_EX_WINDOWEDGE, L"BUTTON", L"Select Process Mode:", WS_VISIBLE | WS_CHILD | BS_GROUPBOX,// <----BS_GROUPBOX does nothing原创 2021-02-24 20:31:15 · 957 阅读 · 0 评论 -
win32实现ListBox自绘
win32实现ListBox自绘1、ListBox控件自绘要点2、ListBox控件自绘关键代码3、重要说明1、ListBox控件自绘要点在CreateWindowEx创建窗口时,需要对参数dwStyle设置上LBS_OWNERDRAWFIXED | LBS_HASSTRINGS这两个属性。并且需要在创建listbox窗口的父窗口中处理WM_DRAWITEM和WM_MEASUREITEM两个消息进行列表框的重绘。LBS_OWNERDRAWFIXED:指定列表框的父窗口负责绘制其内容,并且列表框中的项原创 2021-02-24 20:05:29 · 927 阅读 · 0 评论 -
I/O多路复用之select
微信公众号:CPP进阶之旅如果觉得这篇文章对您有帮助,欢迎关注 CPP进阶之旅 查看更多技术干货I/O多路复用之select1、select函数作用2、select详细介绍3、select注意事项4、select函数缺点5、重要说明1、select函数作用 select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。select,poll,epoll本质上都是.原创 2021-02-14 21:11:47 · 170 阅读 · 1 评论 -
C++实现缓动动画效果,使用Tween算法(含详细代码)
C++实现缓动动画效果,使用Tween算法(含详细代码)1、简介2、代码3、重要说明1、简介在实际的项目开发中,遇到需要通过算法为程序提供流畅的显示效果的时候,我们通常需要借助计时器和位置计算的算法来实现。这里的Tween就是一个缓动数据计算的类,有了tween算法,我们就可以在此基础上,根据具体的业务调整数据实现流畅的缓动效果了。2、代码#pragma once// Algorithm Reference://http://www.cnblogs.com/cloudgamer/archive/原创 2021-02-09 09:20:03 · 1260 阅读 · 0 评论 -
ubuntu修改open files限制(Too many open files解决方法)
ubuntu修改open files限制(Too many open files解决方法)1、第一种方法2、第二种方法3、重要说明Ubuntu 报too many open files错误解决方案1、第一种方法使用在终端中输入ulimit -a,可以查看当前open files,默认一般为1024,如下图所示。对于使用非gui login时,使用如下方法即可实现open files的修改。//1、修改/etc/security/limits.conf文件sudo vi /etc/securit原创 2021-02-08 15:40:48 · 4777 阅读 · 4 评论 -
windows内存泄露检测
windows内存泄露检测一、VLD简介二、测试代码三、重要说明一、VLD简介VLD(Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。相比较其它内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:[1] 可以得到内存泄漏点的调用堆栈,还能得到其所在文件及行号(Visual studio在输出的调试信息里直接双击即可定位到内存泄漏的位置);[2] 可以得到泄露内存的完整数据;[3] 可以设置内存泄露报告的级别;它是一个已经打包的 lib原创 2021-02-04 15:36:08 · 585 阅读 · 0 评论 -
windows多线程之WaitForSingleObject中隐含的坑
windows多线程之等待函数WaitForSingleObject一、函数简介二、使用注意三、重要说明一、函数简介该函数可以使线程进入等待状态,直到一个特定的内核对象进入有信号或者有通知的状态。//函数原型DWORD WaitForSingleObject(HANDLE hObject, //指明一个内核对象的句柄DWORD dwMilliseconds); //等待时间该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;如果原创 2021-01-30 10:01:03 · 1687 阅读 · 0 评论 -
C++ 二叉树序列化与反序列化
微信公众号:CPP进阶之旅如果这篇文章对您有帮助,欢迎关注、评论、转发!C++ 二叉树序列化与反序列化1、题目要求2、题目说明3、核心问题4、解题思路5、代码实现6、问题扩展7、重要说明1、题目要求 请实现两个函数,分别用来序列化和反序列化二叉树?2、题目说明 序列化的意思是指将一些特定的数据结构,变成有格式信息的字符串。例如对一个链表,可以将1->2->3->4->NULL序列化为"1,2,3,4"。对于序列化算法,必须支持反序列化,即在约定的格式下,可以将满足.原创 2021-01-25 09:14:31 · 876 阅读 · 0 评论 -
windows屏幕分辨率及系统缩放获取方法大全
windows屏幕分辨率获取方法大全方法一:MonitorFromWindow方法二:SystemParametersInfo方法三:GetSystemMetrics方法四:GetDeviceCaps重要说明 废话就不多说了,这里直接将windows下获取屏幕分辨率的集中方法的代码详细列举如下。方法一:MonitorFromWindow//获取程序当前所在显示器的分辨率大小,可以动态的获取程序所在显示器的分辨率SIZE GetScreenResolution(HWND hWnd) { SI原创 2021-01-21 21:00:50 · 4569 阅读 · 2 评论 -
C++ 遍历文件夹(含详细代码)
C++遍历文件夹遍历当前目录遍历当前目录及所有子目录重要说明遍历当前目录/***************************************** 遍历当前目录下的文件夹和文件,默认是按字母顺序遍历****************************************/#include<io.h>#include<iostream>using namespace std;bool FindAllFilesOnCurFolder(string p原创 2021-01-17 11:13:43 · 8612 阅读 · 3 评论 -
STL增减元素对迭代器的影响?
说到容器增减元素时,对迭代器的影响,我们需要考虑到连续内存容器和非连续内存容器,在增加和减少元素时对迭代器的影响。连续内存容器 对于连续内存容器,如vector、deque等,增减元素均会使得当前迭代器之后的所有迭代器失效。例如,当使用erase()删除元素后,此时的迭代器相当于是指向了被删除元素的下一个元素的有效迭代器。删除元素时常见的编程写法为:for(auto iter = myvec.begin(); iter != myvec.end()) //另外注意这里用 "!=" 而非 "<原创 2021-01-17 09:52:26 · 149 阅读 · 0 评论 -
C++ 重载EditBox默认ContextMenu(含详细代码)
在做windows下的C++客户端程序开发的时候常常会遇到自定义右键菜单的功能开发。这时候,我们一般只需要在窗口的时间过程中处理WM_CONTEXTMENU消息。处理时,根据需要使用CreatePopupMenu创建弹出菜单,并插入指定的子菜单项,最后处理对应菜单项的消息即可。然而,之前遇到需要一个需求需要继承Edit默认的右键菜单,再次基础上添加一些自定义的右键菜单项。在写代码的过程中发现,WM_CONTEXTMENU消息触发的时候,不能获取到默认的右键菜单句柄信息,也就拿不到右键菜单中的菜单列表原创 2021-01-15 23:24:12 · 198 阅读 · 1 评论