大家进来瞧瞧!!请各位大峡路见不平一声吼救一下小弟!!

yiruirui0507 2010-03-24 02:20:59
// CMFCView 构造/析构

CMFCView::CMFCView()
: m_ptOrigin(0)
, m_StrLine(_T(""))
{
// TODO: 在此处添加构造代码

}

void CMFCView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);

if(0x0d==nChar)
{
m_StrLine.Empty();
m_ptOrigin.y+=tm.tmHeight;

}
else if (0x08==nChar)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_StrLine);
m_StrLine=m_StrLine.Left(m_StrLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_StrLine+=(_In_ char )nChar;
}
CSize sz=dc.GetTextExtent(m_StrLine);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_StrLine);
CView::OnChar(nChar, nRepCnt, nFlags);
}

以上是一个基于SDI的MFC应用程序,我想完成简单的记事本功能,目前输入字符是可以的.但是输入汉字是不行的,显示不出来
我怀疑是ANSI和UNICODE 之间的关系吧,不太确定也不会,希望大家能帮忙指导指导,万分感谢!!
另外初始化中
, m_StrLine(_T("")) 这里面的_T是什么意思呢?求大家详细点,小弟先说谢谢了!
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiruirui0507 2010-03-25
  • 打赏
  • 举报
回复
问题终于解决了.关键在 m_StrLine+=(TCHAR)nChar;
宏TCHAR的定义:
  #ifdef UNICODE typedef wchar_t TCHAR;
  #else typedef unsigned char TCHAR;
  #endif
主要还是没多接触过VS2008,不知道它和VC6.0的区别导致的!呵呵!!终于OK了!!
zgl7903 2010-03-24
  • 打赏
  • 举报
回复
中文使用 WM_IME_CHAR 消息接收
Eleven 2010-03-24
  • 打赏
  • 举报
回复
你怎么把中文按出来的
yiruirui0507 2010-03-24
  • 打赏
  • 举报
回复
首先感谢大家回答!
2楼的不行啊,还是弄不出来中文输入!
大家看看问题出在什么地方!
再次感谢大家!
finder_zhang 2010-03-24
  • 打赏
  • 举报
回复
3楼正解,_T("abc") TEXT("abc"),这样写都行的,为了我们的程序可以在ANSI或UNICODE的编译环境下都可以正常编译.如果编译器是ANSI设定,那么_T("abc")与"abc"是一样的.
如果编译器是UNICODE设定,那么TEXT("abc")就解释成L"abc",每一个字符都是unsigned short而不是char了
wuhuwy 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kier2 的回复:]
VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

如果将来你不打算升级到unicode,那么也不需要_T。

_t("hello world")
在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unic……
[/Quote]
正解!
kier2 2010-03-24
  • 打赏
  • 举报
回复
VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

如果将来你不打算升级到unicode,那么也不需要_T。

_t("hello world")
在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unicode编码。
这样做的好处,不管是ansi环境,还是unicode环境,都适用。
SullenSun 2010-03-24
  • 打赏
  • 举报
回复
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont font;
font.CreatePointFont(300,"华文行楷",NULL);
CFont *pOldFont=dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
CString temp;
temp.Format("%c",nChar);
m_strLine+=temp;
}
CSize sz=dc.GetTextExtent(m_strLine);

CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;

SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

dc.SelectObject(pOldFont);

CView::OnChar(nChar, nRepCnt, nFlags);
}
gslqy 2010-03-24
  • 打赏
  • 举报
回复
接分! 你没装输入法@!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧