
c/c++
文章平均质量分 77
mxway
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
十二、Linux实现截屏小工具
本文介绍了如何在Linux操作系统下基于xlib实现一个屏幕截图工具,详细介绍说明了如何创建一个能够覆盖全屏的窗口;获取屏幕桌面像素并保存为BMP图片,在实现过程中我们结合前面文章介绍的XRender扩展功能实现复杂效果的界面。在应对绘制时出现的闪烁现象,详细介绍如何使用集合运算来解决该问题。原创 2025-05-22 16:08:39 · 1078 阅读 · 0 评论 -
十一、xlib绘制编辑框-续
本文介绍了如何进一步完善编辑框功能,包括实现插入光标眨眼、支持键盘左右键移动光标、鼠标选择显示插入光标点、从插入光标处插入和删除文字等功能。具体实现中,通过继承定时器基类 Timeout,创建 EditTimeout 类来处理编辑框的定时器事件,控制光标的显示与隐藏。通过 ShowCaret 函数实现光标的闪烁效果,并在 DoPaint 函数中清除编辑框区域以避免残留光标。最后,通过事件循环和非阻塞接口处理定时器超时事件,确保光标闪烁的流畅性。原创 2025-05-21 15:13:33 · 1325 阅读 · 0 评论 -
十、基于xlib实现定时器
本文介绍了如何在Xlib中实现定时器功能。由于Xlib本身不提供定时器支持,文章通过结合网络异步事件模型和Xlib的文件描述符,使用C++、最小堆和poll机制来实现定时器功能。首先,定义了一个定时器基类Timeout,包含定时器ID、过期时间、执行间隔等属性。接着,使用最小堆来管理定时器事件,确保最早过期的事件优先执行,并详细描述了最小堆的上移(ShiftUp)和下移(ShiftDown)操作。最后,在Xlib事件循环中,通过XPending和poll结合的方式,实现了非阻塞的事件处理与定时器触发。原创 2025-05-21 10:40:02 · 729 阅读 · 0 评论 -
九、异形窗口
文章摘要:本文介绍了如何在Xlib中创建非矩形窗口,特别是如何移除窗口的标题栏并实现窗口的移动功能。通过使用XCreateSimpleWindow创建窗口,并结合XChangeProperty移除窗口装饰,可以创建无标题栏的窗口。为了处理键盘事件,程序监听KeyPress事件,并在按下Esc键时退出。此外,通过XSendEvent发送ClientMessage事件,实现了窗口的拖动功能。文章还详细解释了operateCode参数的含义,用于控制窗口的移动和大小调整。原创 2025-05-19 21:34:43 · 686 阅读 · 0 评论 -
八、实现编辑框控件
在GUI应用程序中,实现编辑框控件需要处理复杂的键盘和鼠标事件。与使用高级UI库(如QT、GTK)不同,使用xlib开发需要手动组合底层接口来实现控件功能。本文介绍了如何在xlib下实现编辑框控件,重点包括接收输入法输入(支持中英文混合输入)、显示输入光标以及响应Backspace键。文章还提到了一些关键函数,如XOpenIM、XSetLocaleModifiers、XCreateIC等,用于处理输入法和文本渲染。此外,文章详细描述了编辑框的绘制过程,并提供了一个结构体UIEdit来存储编辑框的基本信息。原创 2025-05-19 15:56:57 · 1170 阅读 · 0 评论 -
七、xlib窗口渲染
本文介绍了如何在X Window系统中使用XRender扩展渲染带有透明度的PNG图片。由于默认的24位颜色深度窗口无法正确处理PNG的alpha通道,导致图片显示为黑色背景。解决这一问题有两种方法:一是创建支持32位颜色的窗口,二是使用XRender扩展。XRender不仅支持透明度绘制,还能实现图片混合和渐变窗口等复杂效果。文章提供了使用XRender渲染PNG图片的代码示例,包括加载PNG文件、创建Pixmap和Picture对象,并通过XRenderComposite函数将图片绘制到窗口上。原创 2025-05-18 19:50:16 · 975 阅读 · 0 评论 -
六、绘制图片
本文介绍了如何在Linux系统下使用Xlib接口在窗口中绘制图片,并通过示例代码展示了两种不同的图片绘制方式。第一部分通过手动生成红色块图片,展示了如何分配内存并设置像素颜色,最终将图片绘制到窗口中。第二部分则演示了如何加载24位的BMP图片,并将其转换为适合Xlib显示的格式。通过这个示例,读者可以了解Xlib处理图片的基本原理,为后续更复杂的图像处理打下基础。原创 2025-05-17 21:12:19 · 1026 阅读 · 0 评论 -
五、xlib绘制按钮控件
本文简单介绍了在linux操作系统如何不使用qt、gtk库的情况下,创建GUI程序,并在窗口中绘制按钮控件。xlib没有提供控件这类高级概念,我们可以通过直接在主窗口中绘制,或是子窗口的方式实现按钮控件绘制;直接绘制和子窗口方式绘制本质上没有区别,只是对于事件处理逻辑不同。这种绘制控件的思想与具体操作系统、或界面库无关,只要提供基本绘图元素和鼠标事件处理接口,我们可以在任意操作系统下,使用任意UI绘制控件。通过按钮控件的绘制我们提示了gtk、QT这样的UI库事件循环、高级控件的基本原理。原创 2025-05-17 12:19:53 · 1094 阅读 · 0 评论 -
四、xlib区域
本文介绍了如何在linux操作系统xlib窗口系统中使用Xft库进行文本渲染,并通过设置有效绘制区域来限制文本的显示范围。文章首先提到,在前一篇文章中已经实现了基本图形元素的绘制,但未对文本绘制范围进行限制,导致文本可能覆盖其他控件内容。为了解决这一问题,展示了如何通过创建区域(如矩形和多边形)来约束文本的绘制区域。利用区域(Region)。我们可以在xlib窗口系统创建复杂的控件,实现异形窗口效果。原创 2025-05-16 11:00:00 · 1581 阅读 · 0 评论 -
三、xlib窗口图元
本文介绍了如何在xlib窗口系统中绘制文本和图形元素。本文使用最简洁的代码展示了如何在xlib窗口系统中渲染文本。使用Xft库绘制特效文字。在xlib窗口系统中如何绘制点线、矩形、弧形。以及如何在xlib窗口系统使用颜色对一些特定区域进行填充。原创 2025-05-16 09:45:00 · 665 阅读 · 0 评论 -
二、xlib事件
在Xlib窗口系统中,窗口创建后可以接收鼠标点击、键盘输入、窗口位置和大小改变等操作,这些操作由X Server以事件形式处理。客户端程序通过XPending和XNextEvent等C语言函数查询和处理事件。XPending以非阻塞方式立即返回待处理事件的数量,而XNextEvent会阻塞程序直到有事件发生。示例程序展示了如何使用XSelectInput设置窗口接收的事件类型(如ExposureMask和KeyPressMask),并通过事件循环处理Expose和KeyPress事件。原创 2025-05-15 13:53:25 · 825 阅读 · 0 评论 -
C++项目总四之内存溢出造成的诡异函数调用
通过简单的程序展现出内存溢出造成的诡异函数调用,程序中发生的诡异函数调用基本都与内存溢出有关原创 2017-10-11 21:56:50 · 1806 阅读 · 0 评论 -
C++项目总结三之内存泄漏
浅谈内存泄漏出现的几种情况原创 2017-09-28 21:38:23 · 605 阅读 · 0 评论 -
C++项目总结二之内存溢出
内存溢出用一个比较形象的比喻就好比向一个容量300ml的杯子中倒水。如果倒的水超出300ml,水就溢出。在程序中如果我们写入(或读取)数据的范围超出了变量的“容量”就可有可导致未知的程序行为。本方将从两个方面讨论内存溢出问题,一种是写入的数据超出变量“容量”;另一种是访问的数据超出变量范围,这种情况称为越界访问;大多数时候访问溢出内存区域不会造成程序异常行为。 一、字符处理函数使用不当 1.字符原创 2017-09-26 21:36:06 · 1478 阅读 · 0 评论 -
C++项目总结一之内存泄漏检测
c++内存泄漏检测原创 2017-09-24 17:43:22 · 620 阅读 · 0 评论 -
ARP攻击及实现详解
声明:本文只用于技术交流和学习使用,严禁用于任何其它用途,严禁转载。若因本文带来的任何麻烦,本人不承担任何连带责任。一、ARP协议关于arp协议作用就不再这里多说了,直接看下图 图1 上图来源于TCP-IP协议详解卷1的图4-3 图1中以太网目的地址,以太网源地址,发送端以太地址,发送端IP地址,目的以太网地址,目的IP地址这几个字段的含义很明显。主要看剩下几个字段的取值用途是什原创 2016-03-26 07:59:13 · 9193 阅读 · 0 评论 -
飞鸽传书源码分析六-文件传输续
分析飞鸽传书对文件传输时的详细步骤。原创 2016-01-15 21:42:50 · 2072 阅读 · 0 评论 -
C++智能指针管理类
c++最麻烦的一件事莫过于对动态内存的管理了,本例采用引用计数机制实现了一个用于管理动态分配内存的类。使用这个类,使用者可以不必要再关心动态内存的释放。原创 2015-06-11 09:45:15 · 1891 阅读 · 3 评论 -
飞鸽传书源码分析五-文件传输
在源码v2.06的基础上,分析飞鸽传书的文件传输实现机制。原创 2015-04-26 10:36:31 · 5887 阅读 · 0 评论 -
飞鸽传书源码分析三-网络
简单分析飞鸽传书如何对网络进行编程。原创 2015-03-11 12:15:34 · 4120 阅读 · 1 评论 -
webbench源码分析
webbench源码分析,对webbench源码中的主要代码进行详细的注释。原创 2015-03-27 22:07:54 · 4977 阅读 · 1 评论 -
hdu1558--并查集+判断线段相交
简单的计算几何题,判断两线段是否相交。将相交的两线段使用并查集归到一类中。查询时输出线段对应集合中元素的个数。#includestruct Point{ double x,y;};struct Segment{ Point s,e;}node[1010];int n,parent[1010];int getAbs(int value){ if(value>=0)retur原创 2013-07-09 09:31:12 · 1216 阅读 · 0 评论 -
hdu1198--并查集
Problem DescriptionBenny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are placed in these squares. Different square h原创 2013-07-09 14:12:56 · 1162 阅读 · 0 评论 -
hdu4287(字典树)
题目大意:手机键盘中与数字2相对应的字母有a,b,c;3相对应的字母有d,e,f。给出一些数字串如34,和一些小写字母串。求小写字母对应的数字串出现的次数。字符串abc对应的数字串是111,dh对应的数字串是34。则小写字符串中111出现一次,34出现一次。程序中也用到简单的hash映射。#include#includeint hash[128];struct TrieNode{原创 2013-06-30 15:41:52 · 1940 阅读 · 0 评论 -
c++虚函数的学习
1.虚函数#includeclass Base{public: void print() { cout<<"Base"<<endl; }};class Son:public Base{public: void print() { cout<<"Son"<<endl; }};void fun(Base *obj){ obj->print();}原创 2013-07-31 21:36:20 · 1013 阅读 · 0 评论 -
矩阵在编程中的一个小应用
比如我们已经知道f1=1,f2=1,fn=a*fn-2+b*fn-1。用普通方法求fn就是一个循环。从3循环到n,时间复杂度为O(n)。下面用另一种方法求fn的值。设矩阵 A =原创 2013-07-25 13:15:42 · 3519 阅读 · 0 评论 -
c++中运算符的重载
程序1.cpp#includeint main(){ int a=3,b=2; cout<<a+b<<endl; return 0;}上面的程序中定义了两个整形变量a和b。并输出两个整形变量之和。程序2.cpp#includeusing namespace std;class A{public: int getData() { return data;原创 2013-08-01 22:00:08 · 1141 阅读 · 0 评论 -
c++学习笔记
1.常量--在类中使用常量#includeusing namespace std;class A{private: const int SIZE=18;public: A(){}};int main(){ return 0;}上面的程序在编译时报错,类中用const定义的成员变量只能在构造函数中初始化进行初始化。#includeusing namespace s原创 2013-08-05 11:07:14 · 847 阅读 · 0 评论 -
c++模板
#includeusing namespace std;int add(int a,int b){ return a+b;}double add(double a,double b){ return a+b;}char add(char a,char b){ return a+b;}int main(){ cout<<add(1,2)<<endl; cout<<原创 2013-08-05 17:52:00 · 817 阅读 · 0 评论 -
STL MAP及字典树在关键字统计中的性能分析
对C++ STL map和字典树在对关键字进行统计时运行时间,内存使用进行了对比和分析。同时分析了下map和字典树的应用场合。原创 2014-03-16 16:05:33 · 5944 阅读 · 1 评论 -
从百万关键字中提取前K个关键字
使用最小堆找出关键字出现次数最多的前K个关键字。给出使用C++实现的源码。原创 2014-03-22 09:51:38 · 2430 阅读 · 0 评论 -
stl map底层之红黑树插入步骤详解与代码实现
文章用图片的方式对红黑树插入过程的调整进行了详细解释。并给出红黑树插入调整实现的C++源码。原创 2014-06-08 08:24:11 · 21774 阅读 · 7 评论 -
一种新的删除红黑树节点的算法
文章根据红黑树的性质提出了红黑树一些新结论。这些结论可以帮助我们在红黑树删除节点时需不需要进入删除调整算法。原创 2014-07-24 11:25:53 · 3952 阅读 · 3 评论 -
飞鸽传书源码分析-程序启动过程
根据飞鸽传书的源码,简单分析了飞鸽传书应用程序启动过程代码执行的流程。原创 2014-09-26 15:49:15 · 7412 阅读 · 1 评论 -
java调用c++ dll出现中文乱码
java调用c++代码,参数传递中出现的乱码解决方法原创 2014-11-11 22:16:31 · 7772 阅读 · 0 评论 -
飞鸽传书源码分析二消息机制
本篇文章分析飞鸽传书对不同类型窗口消息的处理流程和机制,以及虚函数在飞鸽传书在的应用。原创 2014-10-19 11:14:50 · 4429 阅读 · 0 评论 -
飞鸽传书源码分析四-消息发送
本篇文章是在飞鸽传书源码v2.06的基础上进行分析的 飞鸽传书是一款工作在局域网的软件,支持局域网里不同设备之间的消息发送及文件的传输(消息发送使用udp,文件传输使用tcp)。 发送消息及文件传输是在飞鸽传书的发送对话框中进行,而发送对话框的打开是通过双击拖盘(win7系统)到任务栏的图标。而拖盘到任务栏的这个图标就是飞鸽传书的主窗口,对应的源码就是Mainwin.cpp中的TMainWin原创 2015-03-24 09:05:51 · 4271 阅读 · 0 评论 -
字典树在车站查询功能中的应用
1.在12306的火车票订票系统中,当我们在出发地或者目的地框中输入一个汉语拼音的简写时,就会出现相应的地名。如输入"wh"就会出现"武汉","威海","芜湖"等地名供选择。2.用数据库实现上面的功能:建立一张表包括两个字段,一个字段用于存储汉字地名,另一个用于存储汉字拼音的简写。对于每次查询需要遍历整张表的记录数,筛选出满足条件的记录。假设每次查询字符串的长度为n,数据库的记录数为m。那么每原创 2013-06-21 16:59:22 · 1705 阅读 · 0 评论