vbAccelerator RichEdit Control An implementation of the Microsoft RichEdit control directly from the API for more flexibility and controlhttp://www.vbaccelerator.com/codelib/richedit/richedit.htm
TextBoxEx Control Implement an extended version of the TextBox control by using the API directlyhttp://www.vbaccelerator.com/codelib/submit/txtboxex.htm
dim hEditFirst as long dim hEditSecond as long hEditFirst=CreateWindowEx(WS_EX_CLIENTEDGE,"Edit","文本框 一", _ WS_CHILDWINDOW or WS_VISIBLE,8,8,233,24,me.hwnd,NULL,NULL,NULL);hEditSecond=CreateWindowEx(WS_EX_CLIENTEDGE,"Edit","文本框二", _ WS_CHILDWINDOW or WS_VISIBLE,8,34,233,24,hwnd,NULL,NULL,NULL);可以参考一下我刚发布的软件,里面有 C++ 的源代码,其中的窗体,按钮和文本框就是用 API 创建出来的,其实创建其它可视控件方法都差不多,只是类名和风格不同而已。
写一个Edit要解决如下问题: 1、如果用VB做,最好不用PictureBox,否则会有大麻烦 2、解决中文输入中的“光标跟随”问题 Dim comf As COMPOSITIONFORM comf.dwStyle = &H2 comf.ptCurrentPos.x = x comf.ptCurrentPos.y = y
to syansea: //1、如果用VB做,最好不用PictureBox,否则会有大麻烦 //2、解决中文输入中的“光标跟随”问题 //Dim comf As COMPOSITIONFORM // comf.dwStyle = &H2 // comf.ptCurrentPos.x = x // comf.ptCurrentPos.y = y
// hIMC = ImmGetContext(hwnd) // Call ImmSetCompositionWindow(hIMC, comf) // Call ImmReleaseContext(hwnd, hIMC)//3、解决英文、中文不等宽的问题(最简单就是都用全角) //4、解决存储问题,VB中没有指针,实现链表够痛苦的(请问高手该怎么办?) //5、解决屏幕滚动问题(用双缓冲绘图) //6、还要解决选中问题 1, 楼主用 Edit 类就可以了 2, 满足条件一就不存在这个问题 3, 中英文等宽问题可以用 strconv 相互转换,也可以用 WM_SETFONT 解决 4, VB中可以操作指针这样的东东,只是和C++中的概念不同而已,而且不知道你拿链表干嘛,给出一个最简单的循环链表 Option Explicit Private Type LinkTab MemberName As String MemberPoint As Long End Type Private Sub Command1_Click() Dim ltTst(6) As LinkTab ltTst(0).MemberName = "http" ltTst(0).MemberPoint = VarPtr(ltTst(1)) ltTst(1).MemberName = "://" ltTst(1).MemberPoint = VarPtr(ltTst(2)) ltTst(2).MemberName = "www" ltTst(2).MemberPoint = VarPtr(ltTst(3)) ltTst(3).MemberName = "." ltTst(3).MemberPoint = VarPtr(ltTst(4)) ltTst(4).MemberName = "csdn" ltTst(4).MemberPoint = VarPtr(ltTst(5)) ltTst(5).MemberName = "." ltTst(5).MemberPoint = VarPtr(ltTst(6)) ltTst(6).MemberName = "net" ltTst(6).MemberPoint = VarPtr(ltTst(0)) End Sub 5, 用 MultiLine 风格的 6, 条件一都满足了PS: 主要是对它的消息处理,可以用子类或超类实现
是指动态添加控件到窗体上吧?用controls.add方法。
setwindowlong hwndtext,gwl_hwnd,...
setparent form1.hwnd,hwndtext
showwindow hwndtext
...
谢谢。
An implementation of the Microsoft RichEdit control directly from the API for more flexibility and controlhttp://www.vbaccelerator.com/codelib/richedit/richedit.htm
Implement an extended version of the TextBox control by using the API directlyhttp://www.vbaccelerator.com/codelib/submit/txtboxex.htm
dim hEditSecond as long
hEditFirst=CreateWindowEx(WS_EX_CLIENTEDGE,"Edit","文本框 一", _
WS_CHILDWINDOW or WS_VISIBLE,8,8,233,24,me.hwnd,NULL,NULL,NULL);hEditSecond=CreateWindowEx(WS_EX_CLIENTEDGE,"Edit","文本框二", _
WS_CHILDWINDOW or WS_VISIBLE,8,34,233,24,hwnd,NULL,NULL,NULL);可以参考一下我刚发布的软件,里面有 C++ 的源代码,其中的窗体,按钮和文本框就是用 API 创建出来的,其实创建其它可视控件方法都差不多,只是类名和风格不同而已。
当然光标资源要可能用到API了,不过自己绘应该也是可以的。
一切都得自己搞,包括绘制文本、选择、修改等,工作量很大的
1、如果用VB做,最好不用PictureBox,否则会有大麻烦
2、解决中文输入中的“光标跟随”问题
Dim comf As COMPOSITIONFORM
comf.dwStyle = &H2
comf.ptCurrentPos.x = x
comf.ptCurrentPos.y = y
hIMC = ImmGetContext(hwnd)
Call ImmSetCompositionWindow(hIMC, comf)
Call ImmReleaseContext(hwnd, hIMC)3、解决英文、中文不等宽的问题(最简单就是都用全角)
4、解决存储问题,VB中没有指针,实现链表够痛苦的(请问高手该怎么办?)
5、解决屏幕滚动问题(用双缓冲绘图)
6、还要解决选中问题
---------------------------------------------------
最好在TextBox基础上用SubClass改造
反正WM_SETFOCUS、WM_KILLFOCUS、WM_SIZE、WM_VSCROLL、WM_KEYDOWN、WM_CHAR、WM_IME_CHAR、WM_PAINT都要改写
//1、如果用VB做,最好不用PictureBox,否则会有大麻烦
//2、解决中文输入中的“光标跟随”问题
//Dim comf As COMPOSITIONFORM
// comf.dwStyle = &H2
// comf.ptCurrentPos.x = x
// comf.ptCurrentPos.y = y
// hIMC = ImmGetContext(hwnd)
// Call ImmSetCompositionWindow(hIMC, comf)
// Call ImmReleaseContext(hwnd, hIMC)//3、解决英文、中文不等宽的问题(最简单就是都用全角)
//4、解决存储问题,VB中没有指针,实现链表够痛苦的(请问高手该怎么办?)
//5、解决屏幕滚动问题(用双缓冲绘图)
//6、还要解决选中问题
1, 楼主用 Edit 类就可以了
2, 满足条件一就不存在这个问题
3, 中英文等宽问题可以用 strconv 相互转换,也可以用 WM_SETFONT 解决
4, VB中可以操作指针这样的东东,只是和C++中的概念不同而已,而且不知道你拿链表干嘛,给出一个最简单的循环链表 Option Explicit Private Type LinkTab
MemberName As String
MemberPoint As Long
End Type Private Sub Command1_Click()
Dim ltTst(6) As LinkTab
ltTst(0).MemberName = "http"
ltTst(0).MemberPoint = VarPtr(ltTst(1))
ltTst(1).MemberName = "://"
ltTst(1).MemberPoint = VarPtr(ltTst(2))
ltTst(2).MemberName = "www"
ltTst(2).MemberPoint = VarPtr(ltTst(3))
ltTst(3).MemberName = "."
ltTst(3).MemberPoint = VarPtr(ltTst(4))
ltTst(4).MemberName = "csdn"
ltTst(4).MemberPoint = VarPtr(ltTst(5))
ltTst(5).MemberName = "."
ltTst(5).MemberPoint = VarPtr(ltTst(6))
ltTst(6).MemberName = "net"
ltTst(6).MemberPoint = VarPtr(ltTst(0))
End Sub
5, 用 MultiLine 风格的
6, 条件一都满足了PS: 主要是对它的消息处理,可以用子类或超类实现