'CString' to 'const unsigned short *'类型转换问题


const unsigned short *FilePath = L"D:\\G\\2001\\a2.jpg";程序能实现抓屏功能;
现在想用2个组合起来用,但用下面语句就报错,不能实现抓屏功能:error C2440: 'initializing' : cannot convert from 'CString' to 'const unsigned short *'
          CString strPathtype = L"D:\\G\\2001\\";
 CString strPathName = L"a2.jpg";
 CString strPath = strPathtype + strPathName;

 const unsigned short *FilePath = strPath;
请问如何实现,
功能函数如下:
void CLynACPDlg::OnShowPNG() 
{
// TODO: Add your control notification handler code here
CDC* pDC =GetDC();
         Graphics graphics(pDC->m_hDC);
Image image(L"res\\Nipic01.png",TRUE);
graphics.DrawImage(&image,0,0);

//       CString strPathtype = L"D:\\G\\66\\";
// CString strPathName = L"a2.jpg";
// CString strPath = strPathtype + strPathName;


// const unsigned short *FilePath = strPath;
const unsigned short *FilePath = L"D:\\G\\66\\a2.jpg";
SaveCurScreenJpg(FilePath, 1440, 900, 100); 
//     ::SetCursorPos(1440,900);
}
关于SaveCurScreenJpg()函数如下:

VOID CLynACPDlg::SaveCurScreenJpg(LPCWSTR pszFileName, int xs, int ys, int quality)  

    HWND    hwnd = ::GetDesktopWindow(); 
    HDC     hdc = ::GetWindowDC(NULL); 
    int     x = GetDeviceCaps(hdc, HORZRES); 
    int     y = GetDeviceCaps(hdc, VERTRES); 
    HBITMAP hbmp = ::CreateCompatibleBitmap(hdc, x, y), hold; 
    HDC     hmemdc = ::CreateCompatibleDC(hdc); 
    hold    = (HBITMAP)::SelectObject(hmemdc, hbmp); 
    BitBlt(hmemdc, 0, 0, x, y, hdc, 0, 0, SRCCOPY); 
    SelectObject(hmemdc, hold); 
    { 
        Bitmap  bit(xs, ys), bit2(hbmp, NULL); 
        Graphics    g(&bit); 
        g.ScaleTransform((float)xs/x, (float)ys/y); 
        g.DrawImage(&bit2, 0, 0); 

        CLSID             encoderClsid; 
        EncoderParameters encoderParameters; 

        encoderParameters.Count = 1; 
        encoderParameters.Parameter[0].Guid = EncoderQuality; 
        encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; 
        encoderParameters.Parameter[0].NumberOfValues = 1; 
        encoderParameters.Parameter[0].Value = &quality; 

        GetEncoderClsid(L"image/jpeg", &encoderClsid); 
        bit.Save(pszFileName, &encoderClsid, &encoderParameters); 
    } 
    ::DeleteObject(hbmp); 
    ::DeleteObject(hmemdc); 
    return; 
}

13 个解决方案

#1


CStringW

#2


引用 1 楼 zgl7903 的回复:
CStringW

顶一次

#3


你用wchar_t[]不就可以了

#4


CString 是Unicode,可以用CStringA等来转车成char*

#5


SaveCurScreenJpg((const unsigned short *)(LPCTSTR)FilePath, 1440, 900, 100);

#6


有点不解,似乎是:
convert from 'const unsigned short *'to'CString'  

这一句:
const unsigned short *FilePath = L"D:\\G\\66\\a2.jpg"; 

直接用可以吗?

CString *FilePath = L"D:\\G\\66\\a2.jpg"; 

#7


自己实现一个String类,重载常用的操作符,

#8


To zgl7903:
CStringW,编译报错,显示没有定义;
需不需要什么配置的?能不能说具体点哈。

#9


引用 3 楼 visualeleven 的回复:
你用wchar_t[]不就可以了

st unsigned short *FilePath = strPath;
改成:
st unsigned short *FilePath = wchar_t(strPath);
报错,‘Class CString’ to 'unsigned short';

#10


TO hztj2005:
这一句:
const unsigned short *FilePath = L"D:\\G\\66\\a2.jpg";  直接能用;

注意VOID CLynACPDlg::SaveCurScreenJpg(LPCWSTR pszFileName, int xs, int ys, int quality)中PSZFileName类型;
CString *FilePath = L"D:\\G\\66\\a2.jpg";估计用不了。

#11


Unicode项目下:
编译通过了,运行看看:

CString FilePath = _T("D:\\G\\66\\a2.jpg"); 
LPWSTR pwStr=new wchar_t[FilePath.GetLength()+1]; 
wcscpy(pwStr,T2W(FilePath.GetBuffer())); //(LPTSTR)
SaveCurScreenJpg(pwStr, 1440, 900, 100);  

#12


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#13


阅读还需要回复下?  对CSDN无语~!
关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com