摘要:
开发环境VS2010这个小程序用到了UDP通信和多线程的知识。已知问题:不能显示中文。发送内容不能过长。滚动条没有自动滚到最后一行。基本思路:在初始化对话框的时候就创建一个线程,在这个线程里进行套接字初始化,然后一直阻塞到接受到消息。总结:接受消息显示采用的是往CString 变量里面追加东西,然后再分行显示。这样做个人感觉肯定不是最优,但是我目前只能想到这个办法了。至于不能显示中文的问题,我知道发生在接收消息阶段。整个消息发送接收过程是这样处理的:从控件上获取到CString的,然后转换格式成wchar_t,再格式化成char*通过sendto函数发送过去。接受端接收了char*也是转成wc 阅读全文
摘要:
初学MFC,写了一个小应用,选择文件显示其文件路径和文件大小。在win2003能成功运行,并显示结果,但是在win 7的环境下就显示无法打开文件,还有显示文件大小为0的情况。编译环境是VS2010目前这一问题还在研究中。关键代码如下/* m_file 是CFile类型的, m_filePath和m_fileName都是CString类型的*/void Cno1Dlg::OnBnClickedButton1(){ CFileDialog dlg(TRUE); if(dlg.DoModal() == IDCANCEL) return; if(m_... 阅读全文
摘要:
多态和虚函数 取一个对象地址(指针或者引用),并将其作为基类的地址来处理,这被称为向上类型转换(upcasting),因为继承树的绘制方式是以基类为顶点的。 virtual 关键字只用在定义函数的时候,不用在函数实现的时候。 基类中定义了虚函数,派生类中无论是否说明,同原型函数都自动成为虚函数。 调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。虚函数遵循的规则 如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,那么即使加上了virtual关键字,也是不会进行动态联编的。 只有类的成员函数才能说明为虚函数,因为虚函数仅适合于有继承关系的类... 阅读全文
摘要:
构造函数: 构造函数里的参数不应该和成员属性名一样,否则编译可以通过,结果大吃一惊。构造函数可以直接写在类里面,也可以另外通过域操作符写在类外面。C++里面,如果你构造函数一个没写,编译器默认给你准备了一个。一旦你写了构造函数,编译器就不给你准备了。这个和Java似乎不太一样。反正,正常人都会写不止一个的构造函数吧。自己好好写是没有错的。函数的重载: 重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同,函数返回值类型可以相同也可以不同。 函数的重载一定发生在相同范围,一定是同一个类。 virtual关键字可有可无。operator运算符重载不影响优先级。不是所有的运算符都能... 阅读全文
摘要:
1、新建文本文件img.rc,写入以下内容A ICON "img.ico"2、生成img.res文件windres -i img.rc --input-format=rc -o img.res -O coff3、将img.c编译成hello.o文件gcc -c -o hello.o hello.c4、连接成exe文件gcc hello.o img.res -o hello.exe原文链接:http://liuzhen8346.blog.163.com/blog/static/10583925201143015352377/ 阅读全文
摘要:
代码一View Code void GetMemory(char *p , int num){ p = (char *)malloc(sizeof(char) *num);}int main(){ char *str = NULL; GetMemory(str,100); //str 还是 NULL strcpy(str,"hello"); //运行出错}分析:编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p... 阅读全文
摘要:
1. 若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 。 x=(i=4,j=16,k=32) A) 4 B) 16 C) 32 D) 52 赋值的时候,逗号表达式里的值总是由最后一项决定的. 2. 下列四组选项中,均不是C语言关键字的选项是 。 A) define IF type B) getc char printf C) include case scanf D... 阅读全文
摘要:
一、基本编辑功能1、复制、剪切和粘贴复制特定的某一段:把光标移到要复制的文本的头部,按下“v”,往后移动光标,光标所过之处的字符>都会高亮,移到欲复制文本的尾部后,按下“y”,高亮文本全部被复制到剪粘板。复制某一行:把光标移到要复制的那一行,按下“yy”,该行就被复制到剪粘板。剪切特定的某一段:把光标移到要剪切的文本的头部,按下“v”,往后移动光标,光标所过之处的字符>都会高亮,移到欲剪切文本的尾部后,按下“y”,高亮文本全部被复制到剪粘板。剪切某一行:把光标移到要剪切的那一行,按下“dd”,该行就被复制到剪粘板。粘贴剪粘板的内容到光标处:把光标移到要粘贴的位置,按下“p”。2、搜 阅读全文
摘要:
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量;以下则可行: typedefchar*PCHAR;//一般用大写 PCHARpa,pb;//可行,同时声明了两个指向字符变量的指针 虽然: char*pa,*pb; 也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。用途二:方便定义结构体,见C结构体小结用途三:用typedef来定义与平台无关的类型。比如定义一个叫REAL的浮点类型,在目标平台 阅读全文
摘要:
预处理功能主要包括宏定义,文件包含,条件编译三部分。分别对应宏定义命令,文件包含命令,条件编译命令三部分实现。 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。 指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define ... 阅读全文