现在的位置: 首页 > 综合 > 正文

读书笔记2009-09-29

2013年04月27日 ⁄ 综合 ⁄ 共 6228字 ⁄ 字号 评论关闭

//分割字符串
CString str = _T("ab ac dd PM");
TCHAR seps[] = _T(" ");
TCHAR* token = _tcstok( str.GetBuffer(), seps ); 
while( token != NULL )
{
    MessageBox( token, token, MB_OK );
    token = _tcstok( NULL, seps );
}

void CStrDlg::OnButton1()
    {
    // TODO: Add your control notification handler code here
    CString ss="1212.12";
    int temp=atoi(ss);
    CString aa;
    aa.Format("%d",temp);
    AfxMessageBox("var is " + aa);
    }

bool取值false和true,是0和1的区别
BOOL取值FALSE和TRUE,是0和非0的区别

 

注意:1:不管读/写文件,在读/写文件完之后一定要关闭文件(即IO流)。
           2:注意以文本方式读/写文件和以二进制方式读写文件方式的区别。(如文本方式写文件遇到换行字符(10)自动转

为ASCIII代码1310,而读文件时反过来,即1310变为10。而二进制读/写文件却不变)。

读取t文件:

方法一:CStdioFile类 一行一行的读取整个文本文件

CString readText(CString fileName)//fileName为文件名
{
    CStdioFile   pFile;
    CString   str,rstr;//str为读取到的一行字符,rstr把所有读取到的str整合成一个字符串!
    pFile.Open(fileName,CFile::modeRead);
    while(pFile.ReadString(str))
         rstr=rstr+str+"/r/n";
    pFile.Close();
    return rstr;
}
方法二:CFile类 一次性读取整个文件
CString readText(CString fileName)
{
    CFile readFile(fileName,CFile::modeRead);
    char *rBuf;//用于存放读取到的整个字符串的字符串指针
    DWORD dwFileLen;//用于存放文件的长度
    dwFileLen=readFile.GetLength();//获取文件的长度
    rBuf=new char[dwFileLen+1];
    rBuf[dwFileLen]=0;//字符串的结尾符
    readFile.Read(rBuf,dwFileLen);//读取指定长度(dwFileLen)的字符串并存放在指定的字符串指针(rBuf)
    readFile.Close();
    return rBuf;
}
方法三:C语言fread函数
CString readText(CString fileName)
{
    FILE *pfile=fopen(fileName,"r");//r为读文件方式,默认为文本方法,rb为二进制方式!
    fseek(pfile,0L,SEEK_END);//将文件指针移到文件尾处从而用ftell获得文件长度
    long int len=ftell(pfile);//获取文件长度
    rewind(pfile);//注意文件指针要移回到文件开始的地方
    char *ch=new char[len+1];//文件长度加1是为了把结尾符设为0,也可不加1而用memset方法
    ch[len]=0;//结尾设为0,以防出现乱码,也可用memset(ch,0,len);方法。
    fread(ch,1,len,pfile);
    fclose(pfile);
    return ch;
}

写文件:
方法一:
void writeText(CString fileName,CString content)
{
    FILE *pfile=fopen(fileName,"w");//w写文件方式,默认为文本方式。wb为二进制写文件方式
    fwrite(content,1,strlen(content),pfile);
    fclose(pfile);
}
方法二:
void writeText(CString fileName,CString content)
{
    ofstream out(fileName);
    out.write(content,strlen(content));
    out.close();
}

当出现error C2110: cannot add two pointers时,是因为字符串相加不能以常量开头,举例如下:
strCheckSum = FREAM_LENGHT+ FREAM_TYPE + strResult;
FREAM_LENGHT、FREAM_TYPE 都是字符串常量宏,如果按照上面方式书写代码会出现上面的错误。
改为:strCheckSum = strCheckSum + FREAM_LENGHT+ FREAM_TYPE + strResult; 即可。

如果是char型的,用str.Format("%s",temp);

 

 CString   str="aa,bb,cc,dd,ee";  
  CString   strTemp;  
  int   nIndex=0,   nLast=0;  
   
  while   (nIndex   !=   -1)  
  {  
        nIndex   =   str.Find(",",   nLast);  
        if(nIndex   !=   -1)  
        {  
            strTemp   =   str.Mid(nLast,   nIndex   -   nLast);  
            nLast   =   nIndex   +   1;  
        }  
        else  
        {  
            strTemp   =   str.Mid(nLast,   str.GetLength()   -   nLast);  
        }  
   
        TRACE0(strTemp);   //   你可以在这将它插入到数组中去.  
  }

 

这是VC编辑器的一个BUG,我也经常碰到,解决的办法就是打开看不到的那个类的头文件,随便加点东西比如加个空行,然后保

存,在ClassView中就会出现类了。

 

unsigned long __cdecl CloseZipZ

一般是头文件没有从工程中加进来---project ----add files to project

 

 //SetCurrentDirectory();
 DWORD nBufferLength;
 LPTSTR lpBuffer  ;
 TCHAR tchBuffer[255];
 lpBuffer = tchBuffer;
 GetCurrentDirectory(nBufferLength,lpBuffer);
 AfxMessageBox(lpBuffer);
 //设置工作目录
 SetCurrentDirectory(".//readzip//test//");
 GetCurrentDirectory(nBufferLength,lpBuffer);
 AfxMessageBox(lpBuffer);

 

回车,ASCII码13  
  换行,ASCII码10  
  空格,ASCII码32

 

  ReadString功能就是遇到回车。。。换行就停止的  
  你要读好多行的话,弄个循环,把这个ReadString放在循环体里  
   
  问题2:  
  virtual   LPTSTR   ReadString(  
        LPTSTR   lpsz,  
        UINT   nMax    
  );  
  virtual   BOOL   ReadString(  
        CString&   rString  
  );  
   
  第一种形态:当返回值为NULL,说明到达了文件尾  
  第二种形态:当返回值为FALSE,说明到达了文件尾  
   
  示例:  
  BOOL   bEnd=TRUE;  
  while(bEnd)  
  {  
        bEnd=ReadString(str);  
  }

 

iter = find(m_filevector.begin(), m_filevector.end(), "Key 5000");

CString 转换为float型
(float)atof((char *)(LPTSTR)(LPCTSTR)strTemp)

 

 

book.SaveAs(COleVariant("C:////2.xls"),covOptional,covOptional, //

  covOptional,covOptional,covOptional,0,//

  covOptional,covOptional,covOptional,covOptional); 

books.Open("C:////1.xls",     

   covOptional, covOptional, covOptional, covOptional, covOptional,

   covOptional, covOptional, covOptional, covOptional, covOptional,

   covOptional, covOptional );   

 

Excel颜色索引值
1.黑色
2.白色
3.红色
15.灰色

msdn中搜索主题GetHyperlinks

COleVariant   vOpt(DISP_E_PARAMNOTFOUND,   VT_ERROR);  
Hyperlinks link = oRange.GetHyperlinks();
最好转换成CString的形式
link.Add(oRange,"#Sheet2!A1",vOpt,vOpt,COleVariant((short)group.at(i)->warnNum));

 

error LNK2001: unresolved external symbol "public: void __thiscall

一般是工程里面没有把文件加进来。

HOWTO: Create Automation Project Using MFC and a Type Library

 

 

 

 

 

 

const放在函数最后起什么作用  
  如:  
  float   Circumference(void)   const;

表明这个函数不会修改成员变量。

 

   操作系统:win98
    编程工具:vc++
    问题:我在编译程序中老出现“fatal error C1010: unexpected end of file while looking for precompiled header directive”这一句,但我查看了程序并没有错,请问这是怎么一回事?

A回答:

    肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可。

compress压缩函数:
pCompress 目标缓存区的指针
u32CompressLen 目标缓存区的大小
pSource源缓存区的指针
u32Source源缓存区的大小

 

  (1)int compress (Bytef *dest,  uLongf *destLen, const Bytef *source, uLong sourceLen);

  把源缓冲压缩成目的缓冲, 就那么简单, 一个函数搞定

 int uncompress (Bytef *dest,  uLongf *destLen,const Bytef *source, uLong sourceLen);

vc  文件   内存映射

//只是对字符串操作的

   int err;

   Byte compr[200], uncompr[200];    // big enough
  
   uLong comprLen, uncomprLen;
  
   const char* hello = "12345678901234567890123456789012345678901234567890";

   uLong len = strlen(hello) + 1;
   comprLen  = sizeof(compr) / sizeof(compr[0]);

   err = compress(compr, &comprLen, (const Bytef*)hello, len);

   if (err != Z_OK)
   {
       std::cerr << "compress error: " << err << '/n';  
    exit(1);   
   }
   cout << "orignal size: " << len << " , compressed size : " << comprLen << '/n';

 

   strcpy((char*)uncompr, "garbage");
   //uncmpr = "garbage"
  
   err = uncompress(uncompr, &uncomprLen, compr, comprLen);
  
   if (err != Z_OK) {
   
    cerr << "uncompess error: " << err << '/n';   
    exit(1);   
   }
  
   cout << "orignal size: " << len << " , uncompressed size : " << uncomprLen << '/n';

   if (strcmp((char*)uncompr, hello))
   {   
    cerr << "BAD uncompress!!!/n";
    exit(1);
   } else
   {
    cout << "uncompress() succeed: /n" << (char *)uncompr;  
   }

 

   操作系统:win98
    编程工具:vc++
    问题:我在编译程序中老出现“fatal error C1010: unexpected end of file while looking for precompiled header directive”这一句,但我查看了程序并没有错,请问这是怎么一回事?

A回答:

    肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可。

 

char szCurPath[MAX_PATH];  
memset(szCurPath,0,MAX_PATH);  
GetModuleFileName(NULL,szCurPath,sizeof(szCurPath)/sizeof(char));

 

看了你的FindResource()的第一参数,它要求是HINSTANCE一个句柄的!!  
   
  HINSTANCE   hInst   =   GetModuleHandle(“Mydll.dll”);  
  HRSRC   hResource   =   FindResource(hInst,   MAKEINTRESOURCE(你的资源ID),RT_RCDATA);  
  ASSERT(hResource!=NULL);  
 

 

抱歉!评论已关闭.