关于LPCSTR LPCTSTR const char*的问题

void CMyCapDoc::OnFileOpen()
{
CString filename;
//	static char szFilter[]="BMP文件(*.bmp)|*.bmp||";
//	 char szFilter[]="BMP文件(*.bmp)|*.bmp||";
CFileDialog dlg(TRUE,_T("bmp"),NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("BMP文件(*.bmp)|*.bmp||"));
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
if(!(m_dib.LoadBmp(filename)))
return;
UpdateAllViews(NULL);
}
}

  

 其中修改前,参数5用szFileter[]来代替,若是把注释掉行的字符加上_T(),提示找不到LszFilter。去掉static会出现新的错误,

干脆一了百了,直接把字符串写进参数,不要中间过渡的szFilter


 

int CDIB::SaveBmp(LPCTSTR filename)
{
	BITMAPFILEHEADER hdr;
	//打开文件
	CFile file(filename,CFile::modeWrite|CFile::modeCreate);
	//文件头
	hdr.bfType = ((WORD)'M'<<8) + 'B';
	LPBITMAPINFO pbi = GetBitmapInfo(); 
	PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER) pbi; 
	hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof(RGBQUAD) + pbih->biSizeImage); 
    hdr.bfReserved1 = 0; 
    hdr.bfReserved2 = 0; 
    // Compute the offset to the array of color indices. 
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof (RGBQUAD); 
	
    //写入文件头
	file.Write((LPVOID) &hdr, sizeof(BITMAPFILEHEADER));
	//写入信息头
    file.Write((LPVOID) pbih, sizeof(BITMAPINFOHEADER) 
                  + pbih->biClrUsed * sizeof (RGBQUAD)); 
    // Copy the array of color indices into the .BMP file. 
	//写入数据
    int nTotal = pbih->biSizeImage; 
	
    LPVOID lpBits = GetBits(); 
    file.Write(lpBits, nTotal);
	//关闭文件
	file.Close();	
	
	delete pbi;
	return 1;
}

  

这段代码里直接修改了参数类型为LPCTSTR,原来为LPCSTR,行5的 CFile file()会出错。当然修改完了还得到头文件里把声明也修改了。

posted on 2010-09-25 11:53  LateStop  阅读(1015)  评论(0)    收藏  举报

导航