谁有自己写的从CWnd继承下来的CEdit类,MFC的这东西不太好用 不能透明,不能旋转想直接继承CEdit吧,根本搞不定想从CWnd继承,又不知道如何下手望不吝赐教,有代码最好,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里找找http://www.codeproject.com/editctrl/ 一般来说应用程序最终都使用Edit来进行输入这样的话成本和可靠性都有所保证如果你要自己开发一个Edit的话,工作量是很大的包括对输入法的支持,对unicode,对copy-paste的支持,对drag的支持是件吃力不讨好的事情可能你做一个edit的成本要超过一个项目,呵呵,随便说说,不是很推荐这样的做法如果真的想做,你可以从MFC window程序编程中键盘输入开始然后学习IME再是研究VIM和SciTE的源代码艾 更为重要的就是还要考虑到复用也就是还需要设计架构成本如果能够轻易的在其他程序中reuse 嗯,Windowless的RichEdit可以透明不过旋转??这个……你还是用Microsoft Windows Presentation Foundation吧 看样子真是不好办那能不能让CEdit在不显示的情况下可以接受输入我主要是想在CView里面直接输入文本,而且这个文本还可以转动如果CEdit在不可视情况下也能输入的话也可以但那个光标闪烁间隔应该从哪儿取到?谢谢 你可以在VIEW类的OnDraw()函数中加入一些代码,在Edit的显示区域上画一个相应大小的矩形,同时为这个Edit控件加入一个EN_CHANGE的消息响应函数,在这里面也加入这段代码即可。另外你说的“文本可以转动和但那个光标闪烁间隔应该从哪儿取到?”是什么意思? 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; } } }} To wzh0591(企鹅): 我说的文本转动就是说输入框不是水平或者垂直的,它可能是45度角或者其它角度光标闪烁间隔就是控制面板里面键盘设置里面那个闪烁间隔To redjuly(凤凰木):View里面要旋转文本倒是很容易,可是怎么在这个旋转的文本后面跟个光标,并且要能进行输入,这个怎么办实在不行就只能不旋转了,就用输入框将就吧。 你可以去vchelp.com这个网站看看,里面有很多代码 关于 在WIN7系统下 搜索CPP文件里面的内容 找不到 向伊健先生请教RichEdit中字符颜色问题 急!!加载资源DLL,大部分资源没有问题,只有一个对话框有问题 CMSFlexGrid对象使用另一个类的方法,出错 请教高手一个愚蠢的问题 MFC使用命令行参数 關於GetSockName()的問題。 资源文件打不开了,请大家帮忙呀! VARIANT的问题 怎样用GDI画一副动态图? smtp发送邮件的问题! CStatic的继承类图片控件输出问题
http://www.codeproject.com/editctrl/
这样的话成本和可靠性都有所保证
如果你要自己开发一个Edit的话,工作量是很大的
包括对输入法的支持,对unicode,对copy-paste的支持,对drag的支持
是件吃力不讨好的事情
可能你做一个edit的成本要超过一个项目,呵呵,随便说说,
不是很推荐这样的做法
如果真的想做,
你可以从MFC window程序编程中键盘输入开始
然后学习IME
再是研究VIM和SciTE的源代码
艾
也就是还需要设计架构成本
如果能够轻易的在其他程序中reuse
不过旋转??这个……你还是用Microsoft Windows Presentation Foundation吧
文本有多种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;
}
}
}
}
我说的文本转动就是说输入框不是水平或者垂直的,它可能是45度角或者其它角度光标闪烁间隔就是控制面板里面键盘设置里面那个闪烁间隔To redjuly(凤凰木):
View里面要旋转文本倒是很容易,可是怎么在这个旋转的文本后面跟个光标,并且要能进行输入,这个怎么办实在不行就只能不旋转了,就用输入框将就吧。