要求:
{
1。当键盘上输入任一字符串时(如:abcde), 在窗口中,从左至右显示该字符串2。当键入一个Enter 键时能另起一行显示后续键入的字符串。
   
提示:每个字符大致高14宽8(可根据实际效果作更改)。
}
我是用vc++6.0
我建立工程是用:Win32 Application---An empty project----然后写源代码文件。窗口是用windouw的API函数建立的,就是:注册窗口类--创建窗口--显示窗口--消息循环,这些都没问题,就是最后的消息处理有问题。原来的字符处理是这样的:case WM_CHAR:
hdc=GetDC(hwnd);
TextOut(hdc,1,1," ",3);
sprintf(str,"%c",(char)wParam);
TextOut(hdc,1,1,str,strlen(str));
ReleaseDC(hwnd,hdc);
break;但是这样只能显示1个字符,第二个字符会覆盖到第一个字符上去,也没有处理回车的功能。
我应该怎么改?其中的str在一开始是这样定义的:char str[255]=""
此外,不过我还有点不明白,后面的""是干吗的。我想过把一个个字符写到数组里去,可是具体怎么弄呢?我想要源代码。
能帮我写一下关于消息处理这里的源代码吗?(另:能给我个c++教程的连接吗?不是vc++的)

解决方案 »

  1.   

    int i;
    switch
    case WM_CHAR:
             i++;  //定以为整形变量
    hdc=GetDC(hwnd);
    TextOut(hdc,i*9,1," ",3);
    sprintf(str,"%c",(char)wParam);
    TextOut(hdc,1,1,str,strlen(str));
    ReleaseDC(hwnd,hdc);
    break;
      

  2.   


    其中的str在一开始是这样定义的:char str[255]=""
    此外,不过我还有点不明白,后面的""是干吗的。把str初始化为空!
      

  3.   

    具体显示字符的代码如下,首先你必须建立窗体类的成员变量m_nXPosition,m_nYPosition,用于记录你当前所写字符的行列数,在初始化时将它们设为0,0,表示第0行,第0列。,然后,使用下面的代码:
    case WM_CHAR:
             if(wParam!=13)
             {
                  TEXTMETRIC tm;
                  int nHeight,nWeight;
         hdc=GetDC(hwnd);              GetTextMetrics(hdc,&tm);
                  nHeight=tm.tmHeight+tm.ExternalLeading;
                  nWeight=tm.tmWeight;      sprintf(str,"%c",(char)wParam);              TextOut(hdc,m_nXPosition*nWeight,nHeight*m_nYPostion,str,
                          strlen(str));
                  m_nXPostion++;              ReleaseDC(hwnd,hdc);
               }
               else
               {
                  m_nYPosition++;
                  m_nXPostion=0; 
               }