C/C++
bdmh
多年从事软件开发工作,现在主要从事移动端应用开发
展开
-
C++快速排序模板
关于快速排序原理,这里不再多写,这里将其写出模板来适应多种数据类型。//交换数据template void Swap(T& a, T& b){ T c(a); a = b; b = c;}//排序template void QuickSort(T* arr, int left, int right){ int l, r; T v; l = left; r = right; v = arr[(left + right原创 2010-12-02 09:33:00 · 3383 阅读 · 6 评论 -
文字录入无限制Undo,Redo的实现
这里只针对Edit的内容做一个简单的undo,redo功能;原理就是,将新增字符和相关信息添加到undo列表,在undo动作时,取记录信息,并在edit中删除新增的字符,然后将此动作添加到redo列表,以便恢复。 本程序只对文本框文字的顺序增加做了处理,对于任意位置的删除,复制粘贴等没有进行处理,大家可以根据实际情况完善,增加辅助信息来完成对撤销和恢复的操作。 明白了原理,对于原创 2011-05-17 12:21:00 · 4357 阅读 · 10 评论 -
控制台中使用SetTimer的提醒
SetTimer是设置定时器,每隔一段时间执行一个操作,原型如下 UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc // 回调函数 );它是通过分发WM_TIMER消息来触发回调函数的,看下面代码void CALLBACK TimerProc(HWND hWnd,UINT原创 2011-04-29 11:11:00 · 2797 阅读 · 2 评论 -
在Win32程序中显示Dos调试窗口
在很多程序中,都可以看到程序运行中,会有一个Dos窗口,实时显示一些运行信息,这里就告诉大家是如何实现的,我们做个简单的,其实对控制台的操作还有很多,有兴趣的可以去查资料。 用到的API函数如下: //创建控制台 AllocConsole; //获取控制台窗口 GetStdHandle; //向控制台输出信息 WriteConsole; //释原创 2011-06-15 13:59:00 · 3865 阅读 · 2 评论 -
在窗体上创建自己的光标并输入文字
我们知道在文本框等可以接收输入的组件中,我们可以看到闪烁的光标,并可以输入文字,如果我们在,比如窗体上时,因为不支持输入,也无法显示闪烁的光标,那我们 有办法做自己的输入吗?当然可以,下面我们演示在Form上来输入文字。 用到的API函数如下GetTextMetrics:获取程序当前的字体信息,存放到TEXTMETRIC结构中CreateCaret:为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口。插入标记的形状。可以是线、块或位图ShowCaret:显示光标SetCa原创 2011-05-31 11:19:00 · 4075 阅读 · 3 评论 -
在GUI中输出信息到CRT(控制台)
<br />微软连接http://support.microsoft.com/kb/105305<br /> <br />在dll中想输出信息,并显示在控制台的dos窗口中,发现printf等已无法使用,GUI程序中不能直接输出了,查阅资料后解决方法如下:<br /> <br />void _declspec(dllexport) PrintStr(char* p){ //创建控制台 AllocConsole(); //打开用于输出的句柄,这里用STD_OUTPUT_HANDLE,表示输出句原创 2011-04-04 10:00:00 · 2379 阅读 · 0 评论 -
超大数相加减
先写两个简单的,加和减,原理就是逐个字符相加减,如果有进位和借位做个标记,继续下一个字符的操作。//相加char* AddNum(char* a,char* b){ int maxlen = max(strlen(a),strlen(b)); //多申请两个字符,一个是结束符'/0',一个是放到第一个字符,当两个数最高位相加后,如果有进位,保存到这里 char* p = new char[maxlen+2]; //为最后一位写上结束符 *(p+maxlen+1)='/0';原创 2011-01-04 17:24:00 · 5517 阅读 · 12 评论 -
链表-简易学生成绩管理
看到论坛里总有学生在寻求链表实现学生成绩管理的帖子,动手写一个,也算学习,虽然功能很少,以前还真没写过完整的,不合适的地方欢迎指正。LinkTable.hclass StudentInfo{public: char code[6]; float chinesescore; float mathscore; StudentInfo* next; StudentInfo* prior;};//添加学生信息,如果prior为NULL,则newinfo为头结点Studen原创 2011-01-02 17:33:00 · 9125 阅读 · 24 评论 -
C++ 打印蛇形矩阵
<br />代码根据论坛的一个帖子修改而成。<br />#include<iostream>int row,col;int matrix[100][100]={0};void UpFillNum(int);void DownFillNum(int);int main(){ int n; int i,j; printf("请输入矩阵的阶数:(0<n<=100)"); scanf("%d",&n); matrix[0][0]=1; matrix原创 2010-12-29 14:48:00 · 7917 阅读 · 0 评论 -
取PE文件的引入表和导出表
直接上代码,PE结构可参阅资料,很多很详细,需要注意的是,本例中是映射到内存,不是通过PE装载器装入的,所以对于节的RVA地址需要转换成为文件偏移地址。Delphi代码unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type //导入表元素结构 TImageImportDis原创 2010-12-27 15:20:00 · 5432 阅读 · 0 评论 -
KMP(字符串匹配)算法
这里不做研究,只是为个人加深印象而写,以便日后查阅,具体可以参考下面两篇文章,写的比较详细:http://wenku.baidu.com/view/5045c90cba1aa8114431d994.htmlhttp://www.matrix67.com/blog/archives/115C++代码#include//获取模式数组void GetNext(const char* p,int next[]){ int m=0; int n=-1; next[0] = -1; wh原创 2010-12-22 09:56:00 · 3274 阅读 · 1 评论 -
FormatMessage获取错误代码描述
大家都知道获取错误代码用GetLastError,但是它返回的是错误标识,不是描述,我们可以用FormatMessage将其转换为本地语言的错误描述。FormatMessage的具体解释可以查看API的帮助。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 =原创 2010-12-13 11:02:00 · 1991 阅读 · 0 评论