不能透明,不能旋转想直接继承CEdit吧,根本搞不定想从CWnd继承,又不知道如何下手望不吝赐教,有代码最好,谢谢。

解决方案 »

  1.   

    这里找找
    http://www.codeproject.com/editctrl/
      

  2.   

    一般来说应用程序最终都使用Edit来进行输入
    这样的话成本和可靠性都有所保证
    如果你要自己开发一个Edit的话,工作量是很大的
    包括对输入法的支持,对unicode,对copy-paste的支持,对drag的支持
    是件吃力不讨好的事情
    可能你做一个edit的成本要超过一个项目,呵呵,随便说说,
    不是很推荐这样的做法
    如果真的想做,
    你可以从MFC window程序编程中键盘输入开始
    然后学习IME
    再是研究VIM和SciTE的源代码
      

  3.   

    更为重要的就是还要考虑到复用
    也就是还需要设计架构成本
    如果能够轻易的在其他程序中reuse
      

  4.   

    嗯,Windowless的RichEdit可以透明
    不过旋转??这个……你还是用Microsoft Windows Presentation Foundation吧
      

  5.   

    看样子真是不好办那能不能让CEdit在不显示的情况下可以接受输入我主要是想在CView里面直接输入文本,而且这个文本还可以转动如果CEdit在不可视情况下也能输入的话也可以但那个光标闪烁间隔应该从哪儿取到?谢谢
      

  6.   

    你可以在VIEW类的OnDraw()函数中加入一些代码,在Edit的显示区域上画一个相应大小的矩形,同时为这个Edit控件加入一个EN_CHANGE的消息响应函数,在这里面也加入这段代码即可。另外你说的“文本可以转动和但那个光标闪烁间隔应该从哪儿取到?”是什么意思?
      

  7.   

    view 里面的文本旋转不是很麻烦的吧?
    文本有多种style,在drow的时候使用沿路径输入文本的方法就可以了
    可以参考一下 windows 图形编程这本书的文字部分
    BOOL DrawChar(HDC hDC, double x0, double y0, double x1, double y1, TCHAR ch)
    {
    x1 -= x0;
    y1 -= y0; int escapement = 0; if ( (x1<0.01) && (x1>-0.01) )
    if ( y1>0 )
    escapement = 2700;
    else
    escapement =  900;
    else
    {
    double angle = atan(-y1/x1);

    escapement = (int) ( angle * 180 / pi * 10 + 0.5);// TCHAR temp[MAX_PATH];
    // sprintf(temp, "%8.5f %8.5f %8.5f %8.5f -> %d\n", x0, y0, x1, y1, escapement);
    // OutputDebugString(temp);
    } LOGFONT lf;
    GetObject(GetCurrentObject(hDC, OBJ_FONT), sizeof(lf), &lf); if ( lf.lfEscapement != escapement )
    {
    lf.lfEscapement = escapement; HFONT hFont = CreateFontIndirect(&lf); if ( hFont==NULL )
    return FALSE; DeleteObject(SelectObject(hDC, hFont));
    }

    TextOut(hDC, (int)x0, (int)y0, &ch, 1); return TRUE;
    }
    void PathTextOut(HDC hDC, LPCTSTR pString, POINT point[], int no)
    {
    // MoveToEx(hDC, point[0].x, point[0].y, NULL);// for (int i=1; i<no; i++)
    // LineTo(hDC, point[i].x, point[i].y); double x0 = point[0].x;
    double y0 = point[0].y; for (int i=1; i<no; i++)
    {
    double x1 = point[i].x;
    double y1 = point[i].y; double curlen = dis(x0, y0, x1, y1); while ( true )
    {
    int length;
    GetCharWidth(hDC, * pString, * pString, & length); if ( curlen < length )
    break; double x00 = x0; 
    double y00 = y0; x0 += (x1-x0) * length / curlen;
    y0 += (y1-y0) * length / curlen; DrawChar(hDC, x00, y00, x0, y0, * pString); curlen -= length;
    pString ++; if ( * pString==0 )
    {
    i = no;
    break;
    }
    }
    }
    }
      

  8.   

    To wzh0591(企鹅):
     
    我说的文本转动就是说输入框不是水平或者垂直的,它可能是45度角或者其它角度光标闪烁间隔就是控制面板里面键盘设置里面那个闪烁间隔To redjuly(凤凰木):
    View里面要旋转文本倒是很容易,可是怎么在这个旋转的文本后面跟个光标,并且要能进行输入,这个怎么办实在不行就只能不旋转了,就用输入框将就吧。
      

  9.   

    你可以去vchelp.com这个网站看看,里面有很多代码