一个用vc6写的程序,要求可以用picture显示文字。
如果我用vb实现,代码很简单
Private Sub Command1_Click()
pic1.CurrentX = 100 '设置字的x坐标
pic1.CurrentY = 200'设置字的y坐标
pic1.Print "abcd"'写字
MsgBox "aa"
pic1.Cls'清空End Sub
如果用vc,怎样实现同样的功能?
问题非常幼稚,望各位朋友帮忙,非常感谢!

解决方案 »

  1.   

    呵呵,我vc几乎可以说完全不会用,所以才提出这么幼稚的问题。
    我刚刚查了一下,SetWindowText可以设置显示内容,但似乎不能设置显示位置。
    不过我对vc不熟,也不敢说自己正确。
    如果这个函数能实现我的功能,哪位朋友能否给几行示例代码?
    呵呵,要求可能有些过分了,先谢了。
      

  2.   

    GetDC()TextOut()ReleaseDC()自绘应该没问题。实现滚动播放,有字幕类可以使用。
      

  3.   

    在PictureBox的OnDraw中用TextOut貌似可以吧
      

  4.   

    原理和过程就是这个帖了中讲的http://topic.csdn.net/u/20091227/15/47e7f0a5-c34d-4d6e-a4dd-dfd4e6bb7771.html而字幕类的效果就是设置一个计时器,不停的更新输出文本的X从标(Y坐标不动)。有现成的字幕类可用,在家里,你要的话,晚上发给你。
      

  5.   

    用picutre控件实现你这个需求确实会比VB麻烦许多
    需要重载CStatic控件
    如果你完全没基础恐怕不太容易上手
      

  6.   

    非常感谢
    实际上,我原先想这样做的
    在picture中放一edit,在edit中显示文本(或不放edit,直接在picture上写字,道理差不多)
    程序启动,设置字体、字号、字色、背景色、文字内容,然后分别处理:
    左右滚动:先确保显示内容宽度>显示区域宽度(不足就后补空格,直到满足条件为止),然后在ontimer不停的把显示内容的第一个字符放到最后即可;
    上下滚动:
    在ontimer中不停改变edit纵坐标(例如,客户要求自下向上滚动,则不断上提edit,直到整个edit都出了picture,则将edit顶点纵坐标置为Picture下边界)。
    但因为我对vc不熟,有些代码不知怎样实现。
    如果能有更好的思路或已经实现的代码可以分享,我将非常感谢!
    [email protected]
    再次感谢!
      

  7.   

    哦,我原先vb用的比较多一些,所以总带着vb的思路考虑代码
      

  8.   

    这有个例子你看以看一下,你要的功能都已经实现。
    http://www.vckbase.com/code/viewcode.asp?id=1820
      

  9.   

    TextOut(GetDC(GetDlgItem(hwnd,IDC_PIC)),0,0,TEXT("Hello"),5);
      

  10.   

    case WM_PAINT:
            {
                hDC = BeginPaint(hWnd,&stPs);
                hFont = CreateFont(24,16,0,0,400,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,
                    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SCRIPT,FontName);            hOldFont = (HFONT)SelectObject(hDC,hFont);
                SetTextColor(hDC,RGB(200,200,50));
                SetBkColor(hDC,RGB(0,0,255));
                TextOut(hDC,0,0,szText,sizeof(szText));
                SelectObject(hDC,hOldFont);
                EndPaint(hWnd,&stPs);
            }
            break;
    这是窗口重绘消息里的一段代码,包括字体设置,字体颜色,背景色,输出字体的位置控制
      

  11.   

    这个程序的思路似乎不能满足我的应用。我的程序要求根据客户设置,界面可能分成几个区域,每区域分别滚动显示文本。按照这个例子,其直接在屏幕上写字,如果文字过长,有可能滚动时显示不全,同时会出区域边界。我想这样解决这个问题:
    根据客户显示区域划分,每区域动态生成一组控件(1picture+1edit,edit生成在picture中,用Picture的目的就是当edit出了picture边界时,出界部分自动不可见,picture的大小和坐标为区域大小和坐标)
    程序启动,设置字体、字号、字色、背景色、文字内容,然后分别处理:
    左右滚动:启动时按照客户设置的区域坐标,放好picture和edit(edit大小和坐标=picture,其实左右滚动不需picture), 先确保显示内容宽度>显示区域宽度(不足就后补空格,直到满足条件为止),然后在ontimer不停的把edit显示内容的第一个字符放到最后即可;
    上下滚动:
    将动态生成的edit设成自动换行,启动时edit大小=picture,edit初始坐标的上边界=picture的下边界,在ontimer中让edit的top不断减小,但bottom不变,直到所有文字都显示出来(这里有些计算),再设edit大小=picture,edit初始坐标的上边界=picture的下边界。
    代码的主要部分已经实现,但还有几个问题需要请教:
    1.如何设置这种动态生成的picture的背景色?edit的背景色及字色?
    2.为了计算显示文字所占区域我需要调用GetTextExtent函数
    CSize txtsize;
    CDC *dc=edit_array[screenid]->GetDC();//edit_array可以看作是edit的数组
    edit_array[screenid]->SetFont(m_Font[screenid]);//m_Font[screenid]是一个cfont
    txtsize=dc->GetTextExtent(txt);//txt是要显示的文本
    但是当我设置cfont的字大小不同(显示出来的效果也确实不同)时,txtsize得到的结果没有变化(似乎就是默认字体字号),应如何解决?
    呵呵,自己啰嗦了很多,就为了把问题说清楚,再次感谢
      

  12.   

    别用Picture控件了
    你自己自定义一个控件吧
    我做过一个绘制坐标系的例子
    你可以参考一下
    原理都是一样的
    而且你需要的应该更简单些吧
    希望对你有帮助吧
    http://download.csdn.net/source/2308688
      

  13.   

    感谢热心帮助,因为单位计算机没安装.net,只能晚上回家去看了。但是,现在除了我提到的几个功能点外,代码已经都实现了,现在主要就还剩几个问题:
    例如代码:
    CStatic p1;
      CEdit t1;
    运行某事件时
    p1.Create(NULL,WS_VISIBLE,CRect(100,100,250,250),this,0);
    t1.Create(WS_VISIBLE,CRect(0,-50,150,100),&p1,0);
    问题:
    1.如何设置这种动态生成的picture的背景色?edit的背景色及字色?(也就是上面示例代码提到的p1,t1)
    2.为了计算显示文字所占区域我需要调用GetTextExtent函数
    CSize txtsize;
    CDC *dc=edit_array[screenid]->GetDC();//edit_array可以看作是edit的数组
    edit_array[screenid]->SetFont(m_Font[screenid]);//m_Font[screenid]是一个cfont
    txtsize=dc->GetTextExtent(txt);//txt是要显示的文本
    但是当我设置cfont的字大小不同(显示出来的效果也确实不同)时,txtsize得到的结果没有变化(似乎就是按照默认字体字号计算的,没有更新),应如何解决?
    多谢!
      

  14.   

    代码创建的Picturebox的背景色问题自己找到解决办法了,用OnCtlColor,但picturebox中的edit(picturebox和edit均为代码运行时创建)怎样设置字色和背景色?
    在线等,急!!!!
    望高手帮忙,多谢!