如何编写类似文本框的控件? 最近有个项目,需要从底层开始编写。从PictureBox派生,每打一个字,就会在PictureBox上显示,并且闪烁的光标向后移动。那么,这该如何实现?如何显示闪烁,可以移动的光标? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 光标的闪烁写成一个函数,使用线程使其运行;光标移动其实就是更改光标的位置参数。字符显示:读取字符库,在PictureBox对应位置按照字符库中获得的矩阵绘制。 1楼的回答似乎比较麻烦。听说Windows里有光标的API函数。写字的话,直接在上头用GDI+写不就行了吗。 键盘事件你怎么弄?输入法你怎么弄?ime的接口要搞定 //新建光标 [DllImport("user32.dll")] static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap,int nWidth,int nHeight); //显示光标 [DllImport("user32.dll")] static extern bool ShowCaret(IntPtr hWnd); //隐藏光标 [DllImport("user32.dll")] static extern bool HideCaret(IntPtr hWnd); //设置光标位置 [DllImport("user32.dll")] static extern bool SetCaretPos(int X,int Y); //获得输入焦点 [DllImport("user32.dll")] static extern IntPtr SetFocus(IntPtr hWnd); //例子:Panel的鼠标释放事件里 void panel1_MouseUp(object sender, MouseEventArgs e) { CreateCaret(panel1.Handle, (IntPtr)null, 1, 16); SetCaretPos(e.X, e.Y-16/2); ShowCaret(panel1.Handle); SetFocus(panel1.Handle); }这是我一个工程的一小部分代码 希望能对你有帮助 自于输入法 你可以看看这个帖子上说到的控件http://topic.csdn.net/u/20080121/18/94bb2cb9-76e3-4129-aa0e-ca403f08bac5.html 这是我写的十六进制编辑器,楼主可以下来参考一下。http://download.csdn.net/source/346182 GDI+ 可以直接将字符串写在PictureBox上,控制光标可以用6楼的办法 [求助]如何刷QQ空间日志访问量? 求助Datalist控件的单行删除操作!! c#中,list,innerlist以及this,到底指什么? 几条VBA语句转换到C#,以及2个附带问题 有没有虚拟打印机软件? 比较两个表中不同数据的数量 【在线等】想从指定架构的XML文档中读取数据加载到架构一致的内存表中,为什么每次只能加载出一条? 如何通过一段字符串实体化一个类?并调用该类中的方法? 我写了一个Form的类,我认为很漂亮,有要的吗? DataGrid的数据帮定问题,只要代码帮定,不要控件帮定。 请教,C#中调用C++类的函数时,参数int*如何表示 断点调试的问题
//新建光标
[DllImport("user32.dll")]
static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap,int nWidth,int nHeight); //显示光标
[DllImport("user32.dll")]
static extern bool ShowCaret(IntPtr hWnd); //隐藏光标
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd); //设置光标位置
[DllImport("user32.dll")]
static extern bool SetCaretPos(int X,int Y);
//获得输入焦点
[DllImport("user32.dll")]
static extern IntPtr SetFocus(IntPtr hWnd);
//例子:Panel的鼠标释放事件里
void panel1_MouseUp(object sender, MouseEventArgs e)
{
CreateCaret(panel1.Handle, (IntPtr)null, 1, 16);
SetCaretPos(e.X, e.Y-16/2);
ShowCaret(panel1.Handle);
SetFocus(panel1.Handle);
}
这是我一个工程的一小部分代码 希望能对你有帮助
http://topic.csdn.net/u/20080121/18/94bb2cb9-76e3-4129-aa0e-ca403f08bac5.html
http://download.csdn.net/source/346182