随笔分类 - C/C++
摘要:刚才在写一个小程序,需要在类中添加一个能开启后台线程的函数。为了能让线程函数参入到类中的数据处理,这个线程函数要么作为类的成员函数,要么设为友元函数。不过我对友元函数不太感冒,就没采用这种方法。但是,如果单纯的作为类的成员函数,那么这个又存在一个问题,就是因为成员函数隐含的this指针会导致线程函数不满足AfxBeginThread以及_beingthreadex等函数的参数要求。刚才在这里卡住了。函数声明都没问题,但是就差在this指针上。所以只要除去this指针就能实现要求。我们知道C++中,静态成员函数是不存在this指针的。接下来就很简单了,函数前面添加一个static就OK了~但是另
阅读全文
摘要:今天中午的时候解决了这个问题。在使用document view结构的MFC程序时,在view上进行绘图绘画很简单,但是很容易导致的后果就是当窗口的尺寸改变的时候由于重绘会导致闪屏。这个效果还是比较捉急的,因为很难看。在网上看了什么双缓冲法解决闪屏问题,我觉得吧,有的真的是纯属扯淡。他们的代码我拿来试过的,都不好使,闪屏依旧。而且最恶心的就是只有一份原创,其余的好多都是抄的,连个引用都没有。首先,闪屏闪的时候能发现闪烁的背景色是白色,这个就说明了在重绘的时候,发生了屏幕擦写问题。在vc2010版的对应的MFC中,这个消息开头是是WM_ERASEBK。。。具体记不清了,我也懒得开编译器,但是只要你
阅读全文
摘要:刚才看到这个函数,可以用来改变窗口的属性,甚至如窗口过程的地址。百度百科上将的比较详细,链接如下:http://baike.baidu.com/view/1080272.htm
阅读全文
摘要:1 void qsort(int * array, int length) 2 { 3 if(length = KeyWord && j > i)11 -- j;12 swap(array[j], array[i]);13 while(array[i] i)14 ++ i;15 swap(array[i], array[j]);16 }17 qsort(array, i);18 qsort(&array[i] + 1, length - i - 1);19 }快排...
阅读全文
摘要:这个函数隶属CListCtrl.在调用前,必须要先设置索引项,调用该函数将会无效。索引项设置使用InsertItem函数。示例代码如下: 1 m_listctrl.InsertColumn(0,L"属性",LVCFMT_CENTER,58); 2 m_listctrl.InsertColumn(1,L"数值",LVCFMT_CENTER,58); 3 4 TCHAR * pItemPro[] ={ 5 L"长度", 6 L"宽度" 7 }; 8 m_listctrl.InsertItem(0,L"&quo
阅读全文
摘要:在使用多列的列表框中可以使用CCtrlList类。唯一需要注意的就是,一定要在其属性的View选项中选中 Report否则再多的努力都是没结果的。
阅读全文
摘要:VC DLL(1) DLL全名为:dynamic link library,就是动态链接库的意思。在安装软件的时候大家应该经常能看到各种文件后缀为.dll的文件,就是用于程序执行时进行动态链接的。那么为什么要使用动态链接? 在最初,C/C++程序使用的是静态链接。也就是我们在写代码的时候,使用多个文件。一旦需要什么函数,就将其包含进来,然后调用其中的函数。这样的连接方式就是将函数代码一起连接到可执行文件中,程序被调用时统一复制到内存中,实现调用。而动态链接,顾名思义,就是在程序运行阶段将程序代码附加到进程地址空间中,再实现调用。 为何要使用动态链接?我们知道,将文件加载到内存是需要时间的,如果
阅读全文
摘要:二叉树模板 完成于:2012,11,11 光棍节首先说明,这个模板的通用性比较差。目前测试阶段仅仅适用于char类型的数据。限制就在于出入的无效判断上。我先去看会书,然后再回来好好解决一下。 1 #include <iostream> 2 using namespace std; 3 template<class T> 4 class BTree 5 { 6 private: 7 class Node 8 { 9 public:10 T element;//...
阅读全文
摘要:首先,我想到写这个算法的时候,是因为我在想数据结构中二叉树的时候想到的。没一本数据结构都应该有一个很经典的二叉树应用举例,就是算式的拆分。这样经过二叉树拆分的式子在感觉上很直观,而且一旦这个树能构造出来,那么计算起来用函数递归的方式很快就能算出来了。不过,我用的并不是这种方法。因为在对于将一个包含括号的四则运算字符型表达式差分到一个二叉树中,我当时没想到甚么好思路。所以,很干脆的,我采用了操作符优先级的判定来实现四则运算的方法。这个是我代码中主要的三个buffer和全部的成员函数: 1 private: 2 vector<float> fArray; 3 vec...
阅读全文
摘要:之前我一直被这个问题所迷惑,那时我是用的是C,而不是C++。在使用malloc函数的时候,我可能是有些东西处理得不太好,学的不精,在那时一直没有实现二维数组的生成。今天在实验室正好要写一个console的小游戏玩,就顺手重拾了这个问题。不过在这里,我用的是C++。这个小游戏的名字是MAP的,所以需要创建一个地图。之前测试的方向控制成员函数用的是一个二维数组变量,直接声明的。但是我觉得如果能够添加一个地图大小控制那么乐趣就会有一定提升。首先,创建一个一维数组需要一个一维指针。形式如下:View Code 1 int *valinttemp=NULL;2 valinttemp=new int [1
阅读全文
摘要:在使用cin输入时,有时需要使用异常的输入来结束cin的执行。比如在一个数字输入的结尾处用一个字符作为结尾输入。但是当涉及到多次的输入时,重新整理输入缓冲区就成为了必须要做的工作。常用的循环输入语句:while(!cin.fail()){//执行语句}输入失败后,将会导致failbit被置为1。因此导致循环终止。但是如果需要再次输入int数据,就需要清除failbit位并清空缓冲区。用一下两条语句执行:cin.clear(); cin.sync();这样缓冲区就被清理干净,并可以正常等待输入。而且需要注意的是,在我测试过程中发现,如果failbit被置位,将导致后面的cin语句无法执行。另外需
阅读全文
摘要:目前仅仅建议使用char类型数据,因为之前cin.fail()函数处理失败,有点小迷惑,所以暂时改用了固定无效字符限定的形式处理。麻雀虽小,五脏俱全,这里面该处理的基本上都包含了。 1 #include <iostream> 2 3 using namespace std; 4 template<class T> 5 class BTree 6 { 7 private: 8 class Node 9 { 10 public: 11 T el...
阅读全文
摘要:这个代码写的时间比较短,也就是半个小时,测试的也不多,但是有一定的参考价值。 1 #include <iostream> 2 3 using namespace std; 4 template<class T> 5 class Queue 6 { 7 private: 8 T *queuehead; 9 int maxsize; 10 int front; 11 int rear; 12 public: 13 Queue(int max=10); 14 ~Queue(); 15 bool Isempty(); 16 bool Isfull(); 17 bool addi
阅读全文
摘要:总结就是一句话:还没写完所以各位看官如果觉得写得不堪入目,我在这给您道歉了~~~代码在codeblocks上调试通过已定义的函数都能正常使用。目前还没发现别的什么bug,如果有发现,还望指正~~~/************START****************/ 1 #include <iostream> 2 #include <cstdlib> 3 #define badswap(a,b) {(a)+=(b);(b)=(a)-(b);(a)=(a)-(b);} 4 #define swap(a,b) if(&a==&b);else{(a)+=(b)
阅读全文
摘要:今天在写一个类的继承,在调试的时候,虚函数的特点并没有体现出来,让我很是不解,用了两个编译器,结果都是一样的。 类的代码是这样的: 1 #ifndef CLASSBRASS_H_INCLUDED 2 #define CLASSBRASS_H_INCLUDED 3 #include <iostream> 4 #include <cstdlib> 5 6 using namespace std; 7 //extern int a; 8 class Brass 9 {10 private:11 char *name;//the name of this a...
阅读全文