« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
|
Blog信息 |
blog名称:FoxWolf 日志总数:127 评论数量:246 留言数量:0 访问次数:854942 建立时间:2006年5月31日 |

| |
[c/c++]不知道的函数总结 文章收藏, 软件技术, 电脑与网络
FoxWolf 发表于 2007/6/11 16:24:15 |
1.关于SetSel()的用法: CEDIT选取(反白)5-30个字符 SetSel(5,30)或者SetSel(MAKELONG(5,30)); 选取所有字符 SetSel(0,-1)或SetSel(MAKELONG(0,-1)); 取消所有选取 SetSel(-1,9)或SetSel(MAKELONG(-1,2002))
2.转换问题
CString to Char * : LPCTSTR.
Char * to CString: LPTSTR
3.GetDlgItem()
GetDlgItem(控件ID):返回该控件的指针 CWnd::EnableWindow(布尔值):True使控件可用,False则禁用控件。
4.SetFocus 方法将焦点移至指定的控件或窗体。
语法
object.SetFocus
object 所在处代表对象表达式,其值是“应用于”列表中的一个对象。
说明
对象必须是 Form 对象、MDIForm 对象或者能够接收焦点的控件。调用 SetFocus 方法以后,任何的用户输入将指向指定的窗体或控件。
焦点只能移到可视的窗体或控件。因为在窗体的 Load 事件完成前窗体或窗体上的控件是不可视的,所以如果不是在 Form_Load 事件过程完成之前首先使用 Show 方法显示窗体的话,是不能使用 SetFocus 方法将焦点移至正在自己的 Load 事件中加载的窗体的。
也不能把焦点移到 Enabled 属性被设置为 False 的窗体或控件。如果已在设计时将 Enabled 属性设置为 False,必须在使用 SetFocus 方法使其接收焦点前将 Enabled 属性设置为 True。
5.
main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",s);getchar();return 0;} 3。memset() 函数常用于内存空间初始化。如:char str[100];memset(str,0,100);4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, '\0', sizeof(a));memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。5.补充:某人的一点心得memset可以方便的清空一个结构类型的变量或数组。如:struct sample_struct{char csName[16];int iSeq;int iType;};对于变量struct sample_strcut stTest;一般情况下,清空stTest的方法:stTest.csName[0]='\0';stTest.iSeq=0;stTest.iType=0;用memset就非常方便:memset(&stTest,0,sizeof(struct sample_struct));如果是数组:struct sample_struct TEST[10];则memset(TEST,0,sizeof(struct sample_struct)*10);6。strcpy原型:extern char *strcpy(char *dest,char *src);用法:#include功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);用法:#include功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。memset原型:extern void *memset(void *buffer, int c, int count);用法:#include功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。
6.AnsiString类的c_str()的作用
举个例子:比如你调用API函数:ShellExcuteString FilePath("E://main//Test.exe");ShellExecute(Application->Handle,"Open",FilePath.c_str(),NULL,NULL,SW_SHOW);
很简单,把string类表示的字符串转换为一个普通的c字符串(char *)类型的,有些老式的函数要这个类型---------------------------------------------------------------------------------------------------
把string类串转换 字符串(char *)类型char *a;string ss;ss="asdfsdg";a=ss.c_str();//必须这样//不可以a=ss;--------------------------------------------------------------------------------------------------------
AnsiString是一个类,其中的空间是动态分配的,当我们对变量进行赋值的时候,AnsiString会根据赋值字符串的大小决定空间的大小,比如:AnsiString str = "111111";那么,这个空间现在就是7个字节。如果下一次你又另外的赋值:str = "1111111111";那么现在空间就是11个字节,空间大小发生了变化AnsiString::c_str()成员函数返回当前的对象的字符串空间的首指针,让你可以对该空间进行基于字符串的操作,但是,正是因为AnsiString是动态分配的,所以该字符指针不是永远不变的,而是随时会变的,所以该指针只是一个临时的指针,不要永久的保存,因为说不定什么时候就“野”了。
c_str()返回的是AnsiString内部字符串存贮区的地址,但不提倡将这个地址保留下来(见BCB帮助),原因在于AnsiString有自己的内存管理机制,这个地址是可能不断变化的,保留下来的指针在某一时刻就会失效导效内存的非法访问错误.典型的情况是保留了指针后字符串加长了,AnsiString不得不重新分配内存以放下新的字符串,此时的c_str()将返回新的地址,原地址内存已经释放. 所以c_str()应该随用随调,不要用一个指针变量来保存.这种错误是逻辑错误,编译器无法发现,建议AnsiString转换char时采用下列方法:char* cTemp = new char[ sScr.length() + 1 ];strcpy( cTemp, sScr );...delete [] cTemp;cTemp = NULL;
7.
void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。 它和 UpdateWindow( )区别在于: UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。 |
|
|