VC++可视化编程的问题!! 5

下面是代码(只写了消息处理函数),在vs2010里运行的(后面附有截图)。搞不懂运行后不管敲什么窗口中显示的都是一些竖杠,而且敲一次显示两个竖杠,后面还有乱码……晕死。。... 下面是代码(只写了消息处理函数),在vs2010里运行的(后面附有截图)。搞不懂运行后不管敲什么窗口中显示的都是一些竖杠,而且敲一次显示两个竖杠,后面还有乱码……晕死。。大虾们帮忙解决下吧。不胜感激。。没多少积分了,给少点哈~
void WINAPI CarePos(int *x_caret,int *y_caret);
#define BufSize 30

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
TCHAR c_char_buf[BufSize];
static int n_num_char=0, n_array_pos=0, n_ln_height, n_char_width, x_caret,y_caret;
int x;
HDC hdc;
TEXTMETRIC tm;
PAINTSTRUCT ps;

switch(iMessage)//处理消息
{
case WM_CREATE:return 0;

case WM_CHAR:
if(wParam==VK_BACK)
{
if (n_array_pos==0)
MessageBox(hWnd,_T("当前位置是文本的起始位置,不能回退"),NULL,MB_OK);
else
{
n_array_pos--;
CarePos(&x_caret,&y_caret);
n_num_char--;
InvalidateRect(hWnd,NULL,TRUE);
}
break;
}

if (wParam==VK_ESCAPE)
{
MessageBox(hWnd,_T("您现在不能按ESC键,请继续其他操作"),NULL,MB_OK);
break;
}
if (n_num_char>=BufSize)
{
MessageBox(hWnd,_T("缓冲区已满,不能再输入字符了\n若要删除字符,请按退格键"),NULL,MB_OK);
break;
}
for (x=n_num_char;x>n_array_pos;x--)
{
c_char_buf[x]=c_char_buf[x-1];
}
c_char_buf[n_array_pos]=(WCHAR)wParam;
n_array_pos++;
n_num_char++;
CarePos(&x_caret,&y_caret);
InvalidateRect(hWnd,NULL,TRUE);
break;

case WM_SETFOCUS:
CreateCaret(hWnd,0,0,n_ln_height);
CarePos(&x_caret,&y_caret);
ShowCaret(hWnd);
break;

case WM_KILLFOCUS:
DestroyCaret();
break;

case WM_KEYDOWN:
switch(wParam)
{
case VK_END:
n_array_pos=n_num_char;
CarePos(&x_caret,&y_caret);
break;
case VK_HOME:
n_array_pos=0;
CarePos(&x_caret,&y_caret);
break;
case VK_DELETE:
if (n_array_pos==n_num_char)
{
MessageBox(hWnd,_T("缓冲区已空,没有字符可供删除"),NULL,MB_OK);
}
else
{
for (x=n_array_pos;x<n_num_char;x++)
{
c_char_buf[x]=c_char_buf[x+1];
}
n_num_char--;
InvalidateRect(hWnd,NULL,TRUE);
}
break;
case VK_LEFT:
if (n_array_pos>0)
{
n_array_pos--;
CarePos(&x_caret,&y_caret);
}
else
MessageBox(hWnd,_T("您已经移到起始位置,不能再左移了"),NULL,MB_OK);
break;
case VK_RIGHT:
if (n_array_pos<n_num_char)
{
n_array_pos++;
CarePos(&x_caret,&y_caret);
}
else
MessageBox(hWnd,_T("已经到缓冲区的末尾,不能再右移了"),NULL,MB_OK);
break;
}
break;

case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);

TextOut(hdc,n_char_width,n_ln_height,c_char_buf,n_num_char*2);
EndPaint(hWnd,&ps);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}

void WINAPI CarePos(int *x_caret,int *y_caret)
{
SetCaretPos(*x_caret,*y_caret);
}
展开
 我来答
我不知道啊O
2010-08-10 · TA获得超过206个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:134万
展开全部
奇怪了,没有特殊要求谁还这么写啊,为什么不用MFC
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
东莞市易合传动科技有限公司
2024-11-06 广告
重载旋转平台是我们东莞市易合传动科技有限公司的明星产品之一。该平台采用高强度材料制造,具有卓越的承载能力和稳定性,能够承受极大的径向和轴向负载。其设计精密,旋转灵活,运转平稳,广泛应用于工业自动化、机器人、机床等领域。我们致力于为客户提供优... 点击进入详情页
本回答由东莞市易合传动科技有限公司提供
71907239
2010-08-10 · TA获得超过156个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:192万
展开全部
我也是这么想的,估计是不是在看孙鑫的教程?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimodeluren
2010-08-17 · TA获得超过751个赞
知道答主
回答量:284
采纳率:0%
帮助的人:270万
展开全部
是不是字体设置的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式