VC++常用函数.doc

上传人:文库蛋蛋多 文档编号:2385720 上传时间:2023-02-17 格式:DOC 页数:86 大小:246KB
返回 下载 相关 举报
VC++常用函数.doc_第1页
第1页 / 共86页
VC++常用函数.doc_第2页
第2页 / 共86页
VC++常用函数.doc_第3页
第3页 / 共86页
VC++常用函数.doc_第4页
第4页 / 共86页
VC++常用函数.doc_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《VC++常用函数.doc》由会员分享,可在线阅读,更多相关《VC++常用函数.doc(86页珍藏版)》请在三一办公上搜索。

1、itoa(num, str, 10);printf(The number num is %d and the string str is %s. n ,num, str);itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为10。10:十进制;2:二进制.CWnd*和HWND差别很大 HWND是SDK 定义的类型,是一个无确切意义的32-bit值,在调用 API 时用于指代窗体。 CWnd*是一个有确切意义的指针,指向一个MFC窗体类CWnd 的实例。因为 MFC对SDK做了封装,大部分调用都可以用

2、CWnd*作为参数,所以很容易混淆。从一个CWnd*获取句柄的方法是 pWnd-GetSafeHwnd(),他比pWnd-m_hWnd 安全,因为前者在 pWnd = NULL 的时候返回 NULL 而后者出现 access violation 从hWnd转换到CWnd * 一个可以使用的方法是 CWnd:FromHandle CWnd *pTempWnd = CWnd:FromHandle(hWnd); / 如果 hWnd存在对应的CWnd*,则返回其指针,否则,创建一个 MFC 临时窗体并返回其指针。 注意这个函数会返回临时窗体的指针,如果需要更安全,调用 CWnd:FromHandleP

3、ermanent ,他在不存在对应的CWnd*时返回NULL。 GetDlgItem CWnd:GetDlgItem 是CWnd的成员函数,如果在CWnd派生的类中使用,可直接使用 CWnd* pWnd = GetDlgItem(ID_XXX); 否则,用SDK函数 HWND GetDlgItem( HWND hDlg, int nIDDlgItem);这样用: HWND hWnd; :GetDlgItem(hWnd,ID_XXX); CWnd* pWnd=CWnd:FromHandle(hWnd);/或创建一个CWnd对象Attach上去CComboBox *myBox1 = (CCombo

4、Box *)GetDlgItem(IDC_COM_PORT);/myBox-SetTopIndex(1);myBox1-SetCurSel(0);CComboBox *myBox2 = (CComboBox *)GetDlgItem(IDC_COM_BAUD);myBox2-SetCurSel(1);CEdit* output;/首先获得CEdit控件的指针, output=(CEdit*) GetDlgItem(IDC_EDIT1); /添加显示内容 output-SetWindowText(m_sShowText);上面就是通过GetDlgItem获得指向Edit控件的指针GetDlgIt

5、emText函数里面的个参数:第一个是句柄API都得通过句柄操作,如果在MFC中,本项可以不写,默认为this第二个为ID,即你想要得到那个控件的ID第三个为TEXT值,你得先定义一个字符串用来获取该值第四个为文本最大长度例如得到IDC_BUTTON1的caption:CStringsCaption;GetDlgItemText(IDC_BUTTON1,sCaption);函数功能:该函数获取对话框中与控制有关的文本或标题。函数原型:UINT GetDlgltemText(HWND hDlg,int nlDDlltem,LPTSTR IpString int nMazCount);参数: hD

6、lg:指向含有控制的对话框的句柄。 nlDDlgltem:指定标题或文本将被检索的控制的标识符。 IpString:指向获取标题或文本的缓冲器的指针。 nMaxCount:指定被复制到lpString参数指向的缓冲区的字符串的最大长度。如果字符串的字符最大长度超过范围,则该字符串被截断。 返回值:如果函数调用成功,则返回值表示被复制缓冲区的字符串的长度,不包括以NULL结尾的字符串。如果函数调用失败,则返回值为零。若想获得更多错误信息,请调用GetLastError函数。 备注: GetDlgltemText函数把一个WM_GETTEXT消息发送到控制。串口通讯中的DCB结构typedef s

7、truct _DCB/ dcb DWORD DCBlength; / sizeof(DCB) DWORD BaudRate; / current baud rate/ 指定当前的波特率 DWORD fBinary: 1; / binary mode, no EOF check/ 指定是否允许二进制模式,/ WINDOWS 95中必须为TRUE DWORD fParity: 1; / enable parity checking/ 指定奇偶校验是否允许 DWORD fOutxCtsFlow:1; / CTS output flow control/ 指定CTS是否用于检测发送控制。/ 当为TRU

8、E是CTS为OFF,发送将被挂起。 DWORD fOutxDsrFlow:1; / DSR output flow control/ 指定CTS是否用于检测发送控制。/ 当为TRUE是CTS为OFF,发送将被挂起。 DWORD fDtrControl:2; / DTR flow control type/ DTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR握手,DWORD fDsrSensitivity:1; / DSR sensitivity 当该值为TRUE时DSR为O

9、FF时接收的字节被忽略; DWORD fTXContinueOnXoff:1; / XOFF continues Tx/ 指定当接收缓冲区已满,并且驱动程序已经发/ 送出XoffChar字符时发送是否停止。/ TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字符中止接收字节之后,发送继续进行。/ FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复发送的XonChar之后,发送继续进行。 DWORD fOutX: 1; / XON/XOFF out flow control/ TRUE时,接收到XoffCha

10、r之后便停止发送/ 接收到XonChar之后将重新开始 DWORD fInX: 1; / XON/XOFF in flow control/ TRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去/ 接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去 DWORD fErrorChar: 1; / enable error replacement/ 该值为TRUE且fParity为TRUE时,用ErrorChar 成员指定的字符代替奇偶校验错误的接收字符 DWORD fNull: 1; / enable null stripping/ TRUE

11、时,接收时去掉空(0值)字节 DWORD fRtsControl:2; / RTS flow control RTS_CONTROL_DISABLE时,RTS置为OFF RTS_CONTROL_ENABLE时, RTS置为ON RTS_CONTROL_HANDSHAKE时,/ 当接收缓冲区小于半满时RTS为ON/ 当接收缓冲区超过四分之三满时RTS为OFF RTS_CONTROL_TOGGLE时,/ 当接收缓冲区仍有剩余字节时RTS为ON ,否则缺省为OFF DWORD fAbortOnError:1; / abort reads/writes on error/ TRUE时,有错误发生时中止

12、读和写操作 DWORD fDummy2:17; / reserved/ 未使用 WORD wReserved; / not currently used/ 未使用,必须为0 WORD XonLim; / transmit XON thresholdCOMMTIMEOUTSCOMMTIMEOUTS 结构体被用在SetCommTimeouts和GetCommTimeouts 函数中,以便设置和查询通讯设备的超时参数。这个参数决定ReadFile, WriteFile, ReadFileEx, 和WriteFileEx 操作设备的行为。typedef struct _COMMTIMEOUTS DWO

13、RD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORDWriteTotalTimeoutConstant; COMMTIMEOUTS, *LPCOMMTIMEOUTS;成员ReadIntervalTimeout 在通讯过程中接收两个字符之间的最长超时时间,按毫秒计算。在ReadFile操作,当接收到第一个字符时,开始一个计时周期。如果接收任意两个字符之间的时隔超过本限制,ReadFile操作

14、将完成并返回任何已缓冲的数据。0代表本参数未设置。 如果设置为MAXDWORD, 并且ReadTotalTimeoutConstant和ReadTotalTimeoutMultiplier成员为0,代表读取操作立即返回那些已接收的数据,即使没有收到任何字符。(两个字符之间的接收间隔)ReadTotalTimeoutMultiplier 乘数用于计算读取操作的总超时时间,按毫秒计算。对于每个读取操作,这个值将乘以要读取的字节数。(读取单个字符的最大超时)ReadTotalTimeoutConstant 一个用于计算对于读取操作的总超时周期的常数,按毫秒计算。对每次读取操作,实际总超时时间为Rea

15、dTotalTimeoutMultiplier 成员与请求的字节数年的乘积加此值。ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant成员为0代表总读取总超时时间无效(读取所有字节的时间为ReadTotalTimeoutMultiplier*BytesToRead+ReadTotalTimeoutConstant)。WriteTotalTimeoutMultiplier 乘数用来计算写操作的总超时周期,按毫秒计算。对每个写操作,这个值将乘以要写入的字节数。(写单个字符的最大超时) WriteTotalTimeoutConstant 一个用于计算

16、写入操作的总超时周期的常数,按毫秒计算。对于每一次写入操作,实际总超时时间为WriteTotalTimeoutMultiplier 成员与要写入字节的乘积再加此值. WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant成员为0代表总写入时间无效(写入所有字节的时间为WriteTotalTimeoutMultiplier*BytesToWrite+WriteTotalTimeoutConstant)。备注如果一个应用程序设置ReadIntervalTimeout和ReadTotalTimeoutMultiplier为 MAXDWORD并且设置

17、ReadTotalTimeoutConstant 为一个大于零且小于MAXDWORD的值, 在调用ReadFile时将会发生如下现象: 如果在输入缓冲区中有任何字符,ReadFile 立即返回缓冲区中的内容。 如果在缓冲区中没有任何字符,ReadFile 将等待接收到一个字符并立即返回. 如果在ReadTotalTimeoutConstant指定的时间值内无任何字节返回,ReadFile超时.wsprintf在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是用 wsprintf这个函数 它的格式如下:wsprintf(缓冲区,格式,

18、要格式化的值);第一个参数是字符缓冲区,后面是格式字符串,wsprintf不是将格式化结果写到标准输出,而是将其写入缓冲区中,该函数返回该字符串的长度。比如我们想通过MessageBox来输出一个整形变量的值,可以用以下代码实现:char szBuffer100;ing number=100;wsprintf(szBuffer, “%d”,number);MessgaeBox(NULL,szBrffer,TEXT(“格式化字符串”),0);这个函数除了将内容格式化输出到第一个参数所提供的字符串缓冲区以外,其它功能与printf函数相同wsprintf对应的字符串是宽字符型wchar_t,即一个

19、字符占用2个字节的内存空间.sprintf对应的字符串是字符类型为char,几一个字符占用1个字节的内存空间.sprintf是用于对ASCII码的127个字符进行操作,wsprintf是对UNICODE的多语言字符进行操作.如:sprintf(buffer, ascii);wsprintf(buffer, Lunicode);一、总结UpdateData()函数UpdateData(true);/用于将屏幕上控件中的数据交换到变量中。UpdateData(false);/用于将数据在屏幕中对应控件中显示出来。 当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而

20、希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。如何把CString转换为char*?需要使用的是strcpy函数 譬如: char buffer100;/标准的数组 GetDlgItem(IDC_EDIT1)-GetWindowText(buffer, 99); 如果不要求数组的话,可以使用: CString str; GetDlgItem(IDC_EDIT1)-GetWindowText(str); char buf = malloc(strlen(str)

21、 + 1); strcpy(buf, str);memset 原型:extern void *memset(void *buffer, int c, int count); 用法:#include 功能:把buffer所指内存区域的前count个字节设置成字符c。 说明:返回指向buffer的指针。 举例: / memset.c #include #include main() char *s=Golden Global View; clrscr(); memset(s,G,6); printf(%s,s); getchar(); return 0; memset ,memcpy 和strcp

22、y 区别 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所指内存区域

23、不能重叠,函数返回指向dest的指针。memset原型:extern void *memset(void *buffer, int c, int count);用法:#include 功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为 或0;例:char a100;memset(a, 0, sizeof(a); memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a100,b50; memcpy(b, a, siz

24、eof(b);注意如用sizeof(a),会造成b的内存地址溢出。 strcpy就只能拷贝字符串了,它遇到0就结束拷贝;例:char a100,b50;strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个0之前)是否超过50位,如超过,则会造成b的内存地址溢出。memset可以方便的清空一个结构类型的变量或数组。 如:struct sample_structchar csName16;int iSeq;int iType; 对于变量struct sample_strcut stTest; 一般情况下,清空stTest的方法:stTest.csName0=0;stT

25、est.iSeq=0;stTest.iType=0; 用memset就非常方便:memset(&stTest,0,sizeof(struct sample_struct); 如果是数组:struct sample_struct TEST10;则memset(TEST,0,sizeof(struct sample_struct)*10);怎样把char类型转换成两个bytechar a=a; string s=Convert.ToString(a); byte b=System.Text.Encoding.Unicode.GetBytes(s); m_ShowInfor.SetSel(-1, -

26、1);/选择最末尾。 m_ShowInfor.SetSel(0, -1);/选择全部 下列CWnd或CEdit类的成员函数可用来修改编辑框控件。void SetWindowText( LPCTSTR lpszString );CWnd的成员函数,可用来设置窗口的标题或控件中的正文。参数lpszString可以是一个CString对象,或是一个指向字符串的指针。void SetSel( DWORD dwSelection, BOOL bNoScroll = FALSE );void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FA

27、LSE );CEdit的成员函数,用来选择编辑框中的正文。参数dwSelection的低位字说明了选择开始处的字符索引,高位字说明了选择结束处的字符索引。如果低位字为0且高位字节为-1,那么就选择所有的正文,如果低位字节为-1,则取消所有的选择参数bNoScroll的值如果是FALSE,则滚动插入符并使之可见,否则就不滚动参数nStartChar和nEndChar的含义与参数dwSelection的低位字和高位字相同void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE );CEdit的成员函数,用来将所选正文替换成指定的正文参数

28、lpszNewText指向用来替换的字符串参数bCanUndo的值为TRUE说明替换是否可以被撤消的在调用上述函数时,如果涉及的是一个多行编辑框,那么除了LineLength和GetLine函数外,都要把回车和换行符考虑在内例如,假设在编辑框中有如下几行正文:abcdefgij那么字母e的字符索引是6而不是4,因为abcd后面还有一对回车换行符调用LineLength(7)会返回第二行的长度3调用LineIndex(2)会得到11调用LineFromChar(8)会返回1如果没有选择任何正文,并且插入符在字母e上,那么调用GetSel返回值的低位和高位字都是6通过分析上述函数,我们可以总结出一

29、些查询和设置编辑框的方法调用CWnd的成员函数GetWindowText和SetWindowText可以查询和设置编辑框的整个正文,在上一章的Register程序中,我们就使用过这两个函数如果想对多行编辑框逐行查询,那么应该先调用GetLineCount获得总行数,然后再调用GetLine来获取每一行的正文下面一段代码演示了如何对多行编辑框进行逐行查询char buf40;int total=MyEdit.GetLineCount();int i,length;for(i=0;ilength=MyEdit.GetLine(i,buf,39);buflength=0; /加字符串结束符. . .

30、 . . .可以利用LineIndex和LineFromChar来在字符索引和字符的行列坐标之间相互转换下列代码演示了在已知字符索引的情况下,如何获得对应的行列坐标:int row,column;row=MyEdit.LineFromChar(charIndex);column=charIndex-MyEdit.LineIndex(row);下列代码演示了在已知字符的行列坐标的情况下,如何获得对应的字符索引:int charIndex;charIndex=MyEdit.LineIndex(row)+column;不难看出字符索引与对应的行列坐标的关系是:字符索引=LineIndex(行坐标)+

31、列坐标对于选择正文的查询和设置,应该利用函数GetSel、SetSel和ReplaceSel可以利用GetSel和SetSel来查询和设置插入符的位置SetSel可以使编辑框滚动到插入符的新位置要获取插入符的行列坐标,可用下面的代码实现:MyEdit.SetSel(-1,0); /取消正文的选择int start,end,row,column;MyEdit.GetSel(start,end); /start或end的值就是插入符的字符索引row=MyEdit.LineFromChar(start); /获取插入符的行坐标column=start-MyEdit.LineIndex(row); /

32、获取插入符的列坐标下面的代码演示了如何把插入符移到指定的行和列:MyEdit.SetSel(-1,0); /取消正文的选择int charIndex=MyEdit.LineIndex(row)+column;MyEdit.SetSel(charIndex,charIndex);可以利用ReplaceSel函数在 插入符处插入正文,典型的代码如下所示:MyEdit.SetSel(-1,0); /取消正文的选择MyEdit.ReplaceSel(“.”);可以利用ReplaceSel清除编辑框中的正文,典型的代码如下所示:MyEdit.SetSel(0,-1); /选择全部正文MyEdit.Rep

33、laceSel(“”);int、char、double与byte相互转换的程序/整数到字节数组的转换public static byte intToByte(int number) int temp = number;byte b=new byte4;for (int i=b.length-1;i-1;i-)bi = new Integer(temp&0xff).bytevalue();/将最高位保存在最低位temp = temp 8; /向右移8位return b; /字节数组到整数的转换public static int byteToInt(byte b) int s = 0;for (i

34、nt i = 0; i = 0)s = s + bi;elses = s + 256 + bi;s = s * 256;if (b3 = 0) /最后一个之所以不乘,是因为可能会溢出s = s + b3;elses = s + 256 + b3;return s; /字符到字节转换public static byte charToByte(char ch)int temp=(int)ch; byte b=new byte2;for (int i=b.length-1;i-1;i-)bi = new Integer(temp&0xff).bytevalue();/将最高位保存在最低位temp =

35、 temp 8; /向右移8位return b; /字节到字符转换public static char byteToChar(byte b)int s=0;if(b00)s+=b0;elses+=256+b0;s*=256;if(b10)s+=b1;elses+=256+b1;char ch=(char)s;return ch; /浮点到字节转换public static byte doubleToByte(double d)byte b=new byte8;long l=Double.doubleToLongBits(d);for(int i=0;i8;return b; /字节到浮点转换p

36、ublic static double byteToDouble(byte b) 中国网管论坛 long l; l=b0;l&=0xff;l|=(long)b18);l&=0xffff;l|=(long)b216);l&=0xffffff;l|=(long)b324);l&=0xffffffffl;l|=(long)b432);l&=0xffffffffffl; l|=(long)b540);l&=0xffffffffffffl;l|=(long)b648);l|=(long)b756);return Double.longBitsToDouble(l); VC常用数据类型使用转换详解 (加入

37、时间:2001-3-12) 作者:程佩君 刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。 我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username=女侠程佩君; char temp200; char *buf; CString str; _variant_t v1; _bstr_t v2; 一、其它数据类型转换为字符串 短整型(int) itoa(i,temp,10);/将i转换为字符串放入temp中,最后一个数字表示

38、十进制 itoa(i,temp,2); /按二进制方式转换 长整型(long) ltoa(l,temp,10); 二、从其它包含字符串的变量中获取指向该字符串的指针 CString变量 str = 2008北京奥运; buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)员; buf = _com_util:ConvertBSTRToString(_bstr_t)v1); 三、字符串转换为其它数据类型 strcpy(temp,123); 短整型(int) i = atoi(temp); 长整型(long) l = atol(t

39、emp); 浮点(double) d = atof(temp); 四、其它数据类型转换到CString 使用CString的成员函数Format来转换,例如: 整数(int) str.Format(%d,i); 浮点数(float) str.Format(%f,i); 字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username; 五、BSTR、_bstr_t与CComBSTR CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。 char *转换到BSTR可以这样: BSTR b=_com_util:Con

40、vertStringToBSTR(数据);/使用前需要加上头文件comutil.h 反之可以使用char *p=_com_util:ConvertBSTRToString(b); 六、VARIANT 、_variant_t 与 COleVariant VARIANT的结构可以参考头文件VC98IncludeOAIDL.H中关于结构体tagVARIANT的定义。 对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;/指明整型数据 va.lVal=a; /赋值 对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: unsigned char bVal; VT_UI1 short iVal; VT_I2 long lVal; VT_I4 float fltVal; VT_R4 double dblVal; VT_R8 VARIANT_BOOL boolVal; VT_BOOL SCODE scode; VT_E

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备2025010119号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000987号