帮帮忙想想,关于usercontrol

jlum99 2003-08-22 06:06:26
我自己做的usercontrol里其中包含有个模块文件,现在问题是,我想从模块里想访问usercontrol的一个属性,在设计阶段.而且这个调用必须是在模块文件里的.有什么办法吗?
...全文
60 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
sworddx 2003-08-27
  • 打赏
  • 举报
回复
记得整理FAQ。
jlum99 2003-08-26
  • 打赏
  • 举报
回复
补充一下 pObj = GetWindowLong( hWnd, GWL_USERDTA)是从窗体的数据区取得的数据,前面有个操作是 SetWindowLong (hWnd, GWL_COPYDATA, ObjectPtr(Me)).捎后揭贴,希望有更多的人能看到这个帖子。
flc 2003-08-23
  • 打赏
  • 举报
回复
UP
jlum99 2003-08-23
  • 打赏
  • 举报
回复
详细的能帖就帖了,机器不能上网,写大概的吧

------------usercontrol------------------
Dim Event MessageArrive()

........................

'有若干的过程和属性
----------------------------------------
----------模块--------------------------
Public Sub WinProc(hwnd as Long , uMsg as long ,lParam as long ,wParam as long )

'子类化的窗体程序.对uMsg处理.必须在模块中.
'有窗体消息传入时.RaiseEvent MessageArrive 但是VB提示无效.......

End Sub
大概就是这样吧.
junki 2003-08-23
  • 打赏
  • 举报
回复
我也听得半懂不懂,楼主可不可以把具体的代码发给我们大家看一看呢/
jlum99 2003-08-23
  • 打赏
  • 举报
回复
YES,最后生成OCX,感觉就是usercontrol和模块就是水火不容.
佛的光辉 2003-08-23
  • 打赏
  • 举报
回复
你的意思是要在子类化程序里修改usercontrol的属性或触发usercontrol的事件?
jlum99 2003-08-23
  • 打赏
  • 举报
回复
模块里就是个子类化程序,有窗体消息来的时候触发事件
佛的光辉 2003-08-23
  • 打赏
  • 举报
回复
没有看到你的东西
也许可以采用其他的一些方法避免这样做了
jlum99 2003-08-23
  • 打赏
  • 举报
回复
工程编译结果是做成OCX,没有模块功能不完整,主要是要用到 AddressOf 函数,而取地址的函数过程是一定要放在模块里的,头都大了.
佛的光辉 2003-08-23
  • 打赏
  • 举报
回复
不明白你究竟要干什么
usercontrol如果是一个工程的一部分,那么模块从属于usercontrol根本是错的,模块是从属于工程的,
jlum99 2003-08-23
  • 打赏
  • 举报
回复
200分到顶了,到时再开帖,可用分多啊 :)
hxy2003 2003-08-23
  • 打赏
  • 举报
回复
UP
since1990 2003-08-23
  • 打赏
  • 举报
回复
up
jlum99 2003-08-23
  • 打赏
  • 举报
回复
试过了,不好使,模块是usercontrol的一部分,这种用法感觉比较怪。也不好使。
另一个就是想在模块里的过程触发usercontrol的一个定义好的事件,该怎样??使用raiseevent 也不行。哪位仁兄想想办法啊。继续加分。。。。。。。。
jlum99 2003-08-23
  • 打赏
  • 举报
回复
思想就是..在类里,就是usercontrol模块里-----类命名MsgSwitch
prevWindowProc=SetWindowLong ......WndProc (位于模块)
再有个WindowProc(在类里)必须申明为Friend
Friend Function WindowProc (..........) As Long
RaiseEvent .........
CallWindowProc prevWindowProc,..........................
End Function

模块里的 WndProc函数 是这样
Public Function WndProc(.............) As Long
WndProc=GetObject(.......自己写的函数,不是API).WindowProc(.........)
CallWindowProc prevWindowProc,..........................
End Function
GetObject 申明为 Private Function GetObject(hWnd as Long) As MsgSwitch
函数关键的代码
Dim Obj As XWatcher
Dim pObj As Long
pObj = GetWindowLong(hWnd, GWL_USERDATA)
CopyMemory Obj, pObj, 4
Set GetObject = Obj
CopyMemory Obj, 0&, 4
End Function

jlum99 2003-08-23
  • 打赏
  • 举报
回复
找到办法了......呵呵高兴啊.
sworddx 2003-08-23
  • 打赏
  • 举报
回复
用类似的api。(settimeevent还是什么,记不得了)
jlum99 2003-08-23
  • 打赏
  • 举报
回复
还有SetEvent,ResetEvent
jlum99 2003-08-23
  • 打赏
  • 举报
回复
用了个笨办法,加了个Timer控件,UserControl主动检测,用到API CreateEvent 和WaitForSingleObject,再就是用循环检测,不过没有用Timer好.不知道有没有更高明的办法,期待着.......................
加载更多回复(16)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧