TC官方合作论坛

 找回密码
 立即注册
查看: 2000|回复: 6

[已解决] TC任意创建控件和事件

[复制链接]
发表于 2019-4-15 11:24:32 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 a837861603 于 2019-4-15 11:38 编辑

用CreateWindowEx和ShowWindow创建控件之后如何再用SetWindowLong和CallWindowProc添加事件??? 找遍论坛没有与之相关的内容,望各位大神告知。下面是我用VB写的dll创建控件,也能添加事件,但是不能直接调用TC编写的事件。

VB创建按钮,并改变按钮的事件,并发送消息:
VB.class.cls代码:
  1. Public C**t WM_LBUTTONUP = &H202
  2. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3. Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  4. Public OldWinProc As Long
  5. Public Function OnMenu(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  6. Select Case wMsg
  7. Case WM_LBUTTONUP
  8.     msgbox "ok"
  9. End Select
  10. OnMenu = CallWindowProc(OldWinProc, hwnd, wMsg, wParam, lParam)
  11. End Function

复制代码

VB.Module1.bas代码:
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  3. Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
  4. Private C**t SW_SHOWNORMAL = 1
  5. Private C**t GW_HWNDNEXT = 2'被屏蔽字符:C o n s t
  6. Function showwindws(IpClassName, lpWindowName, xx, yy, wth, hei, hwnd, shijianB)
  7.     Dim gButtonHwnd&
  8.     gButtonHwnd& = CreateWindowEx(0&, IpClassName, lpWindowName, &H40000000, xx, yy, wth, hei, hwnd, 0, App.hInstance, shijianB)
  9.     Call ShowWindow(gButtonHwnd&, SW_SHOWNORMAL)
  10.     OldWinProc = SetWindowLong(gButtonHwnd&, GWL_WNDPROC, AddressOf OnMenu)
  11.     showwindws = gButtonHwnd&
  12. End Function
复制代码
TC注册插件后调用:
  1. var 句柄A=controlgetchildhwnd("图色助手")'父窗
  2. AAA=工程.showwindws("Button","按钮333",106,8,697,399,句柄A,创建之前载入的事件())
复制代码
  1. 功能 创建之前载入的事件()
  2. 调试输出("111")
  3. 结束
复制代码

VB可以过滤事件消息并动作,怎么换成TC里的函数???


回复

使用道具 举报

发表于 2019-4-15 16:31:24 | 显示全部楼层
tc自带动态生成控件命令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-16 01:08:13 | 显示全部楼层
本帖最后由 a837861603 于 2019-4-22 02:06 编辑

1234324324234
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-16 01:04:52 | 显示全部楼层
2576605471 发表于 2019-4-15 16:31
tc自带动态生成控件命令

图片框的鼠标焦点事件咋写,我就问问你这个咋写!!??
回复 支持 反对

使用道具 举报

发表于 2019-4-16 22:44:17 | 显示全部楼层
a837861603 发表于 2019-4-16 01:04
图片框的鼠标焦点事件咋写,我就问问你这个咋写!!??

消息路由啊,稍微麻烦一点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-17 13:46:43 | 显示全部楼层
爱上老公 发表于 2019-4-16 22:44
消息路由啊,稍微麻烦一点

回调函数即可,怪不得TC越来越少人用了,很多功能都不是现成的,不适合新手用,TC定位不上不下的,上有易语言,下有按键精灵,你说他在中间不伦不类的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-17 13:51:20 | 显示全部楼层
VB不支持回调,但是对TC本身而言,VB做的比TC更多,不需要再调用TC函数为dll所用,VB里面直接写事件足够了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-20 17:12 , Processed in 0.057019 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表