VS2008中写MFC
刚弄MFC就被搞郁闷了,从来没弄过这东西。new了一个MFCproject,命名为EXE1,然后选的MFCapplication,然后基本上一路缺省值点鼠标下去。然后在c...
刚弄MFC就被搞郁闷了,从来没弄过这东西。
new 了一个MFC project,命名为EXE1,然后选的MFCapplication,然后基本上一路 缺省值点鼠标下去。然后在classview中EXE1Doc右击添加variable,public型,char*,str(看到vc++中是选char类型,变量名为*str,但vs2008好像不让,于是我就改成char*型了),然后在构造函数里面把str赋值了一串字符串。
然后再在CEX1View中的OnDraw函数,把代码改成了
void CEX1View::OnDraw(CDC* pDC)
{
CEX1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOut(100,200,pDoc->str);
}
其实就改了第一行和最后一行。
结果build时出现一个error:
error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'char *' to 'const CString &'
就是指我贴上去的最后一行代码有问题 展开
new 了一个MFC project,命名为EXE1,然后选的MFCapplication,然后基本上一路 缺省值点鼠标下去。然后在classview中EXE1Doc右击添加variable,public型,char*,str(看到vc++中是选char类型,变量名为*str,但vs2008好像不让,于是我就改成char*型了),然后在构造函数里面把str赋值了一串字符串。
然后再在CEX1View中的OnDraw函数,把代码改成了
void CEX1View::OnDraw(CDC* pDC)
{
CEX1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOut(100,200,pDoc->str);
}
其实就改了第一行和最后一行。
结果build时出现一个error:
error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'char *' to 'const CString &'
就是指我贴上去的最后一行代码有问题 展开
4个回答
展开全部
其实你添加变量应该添加CString类型的,我认为char不好用,在 添加变量对话框 里的 变量类型 下拉列表框 里可以自己输入CString ,并不一定非得从那列表框里面选择。假设你定义CString m_str,在EXE1Doc里面会自动添加CEXE1Doc::CEXE1Doc()
: m_str(_T(""))
{
要初始化只要在分号(m_str(_T("")))里面写就行了,如m_str(_T("啊啊"))。
其它的pDC->TextOut(100,200,pDoc->m_str); 这里就会正确编译。
如果你一定要用char的话,修改这里代码:
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOut(100,200,CString(pDoc->str));
这样也行
还有一个重要问题,char* 类型,在构造函数里面你怎么给它赋值;应该这样的吧:CEXE1Doc::CEXE1Doc()
: str("ggg")
其实并不是很好
: m_str(_T(""))
{
要初始化只要在分号(m_str(_T("")))里面写就行了,如m_str(_T("啊啊"))。
其它的pDC->TextOut(100,200,pDoc->m_str); 这里就会正确编译。
如果你一定要用char的话,修改这里代码:
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOut(100,200,CString(pDoc->str));
这样也行
还有一个重要问题,char* 类型,在构造函数里面你怎么给它赋值;应该这样的吧:CEXE1Doc::CEXE1Doc()
: str("ggg")
其实并不是很好
展开全部
WCHAR *lpTextBuffer = L"abcd";
void CSketcherView::OnDraw(CDC* pDC)
{
CSketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOutW(100,100,lpTextBuffer, 4);
}
类型匹配的问题,我写过的一个程序,你参考一下吧。
其中:L"abcd" 前的“L”是个宏,通知编译器以Unicode方式录入字符串,当然前提是你的代码以Unicode方式编辑,一般默认的设置就是如此,无须改动。
void CSketcherView::OnDraw(CDC* pDC)
{
CSketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->TextOutW(100,100,lpTextBuffer, 4);
}
类型匹配的问题,我写过的一个程序,你参考一下吧。
其中:L"abcd" 前的“L”是个宏,通知编译器以Unicode方式录入字符串,当然前提是你的代码以Unicode方式编辑,一般默认的设置就是如此,无须改动。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类型不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用CString类的构造函数实现类型转换
CString str1(pDoc->str);
CString str1(pDoc->str);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询