您的位置:程序门 -> vb -> 基础类



关于picture的问题,好像很简单,实际太难,请教高手


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于picture的问题,好像很简单,实际太难,请教高手[已结贴,结贴人:yh1205]
发表于:2007-08-01 20:54:44 楼主
picture中正在播放视频,怎么让他响应mousedown事件

private   sub   picture1_mousedown(button   as   integer,   shift   as   integer,   x   as   single,   y   as   single)
msgbox   "正在播放某某影片 "
end   sub

现在情况是,不播放视频时,单击鼠标会弹出窗口,等视频播放时,再怎么单击就不响应事件了,有什么方法可以让他响应mousedown事件
发表于:2007-08-01 21:10:061楼 得分:0
播放后,你的图片框前就有另一个框啦.....

应该以另一个句柄为准

你子类化那个句柄吧
发表于:2007-08-01 21:19:292楼 得分:0
谢谢楼上的回复,水平有限,不是太懂,能否详细点,我的目的是要在picturebox播放视频时,在picturebox1上单击鼠标能响应mousedown事件,现在是只要一播放视频点了就没反应,谢谢
发表于:2007-08-01 21:23:003楼 得分:0
问一下,你的picture是如何播放视频的?
发表于:2007-08-01 21:24:484楼 得分:0
'显示图像
        mv_usb2setcapinfo   hcurdvc,   m_scaninfo
        mv_usb2start   hcurdvc,   str,   1342177280,   0,   0,   -1,   -1,   picture1.hwnd,   0,   0,   0

是通过一个摄像头的api传送的
发表于:2007-08-01 21:45:595楼 得分:0
按我手头的一个代码,是生成一个播放窗口,设置为指定句柄的子窗口

再用api关联上去......好象是这样吧.....代码没仔细看

但一定有一个句柄的

只需要子类化那个句柄就可以了
发表于:2007-08-01 21:53:076楼 得分:0
用spy++在播放开始时,看看上面又多了个什么类名

然后用findwindowex根据类名得到句柄

然后子类化.............
发表于:2007-08-01 22:01:467楼 得分:0
好的,谢谢,我试试,对子类没用过,研究研究去
发表于:2007-08-02 00:03:368楼 得分:0
如果不用子类,有没有捷径
发表于:2007-08-02 10:41:389楼 得分:0
不用子类,也可以用hook
发表于:2007-08-02 12:58:1010楼 得分:0
哈哈
发表于:2007-08-02 12:59:4011楼 得分:0
子类化代码也没几句的

你可以搜索一下

可惜我的站被公安叔叔抱走了.....不然有例子给你的
发表于:2007-08-02 13:52:1212楼 得分:0
老马,你的站被公安叔叔抱走了?为什么?难道有什么防碍社会主义建设的什么东东?
发表于:2007-08-02 13:55:4213楼 得分:0
我的站是虚拟主机,上面另外的站里有色情的玩意.....

结果整个服务器都给抱走了

都还不知道什么时候回来

郁闷

如果这个月再不回来,我想办法自己弄个单独的服务器算了,可恶~~~~
发表于:2007-08-02 14:38:2114楼 得分:0
有些问题真正需不需要解决,要看解决的成本值不值得。
在一个正在播放的画面上点鼠标,然后显示“正在播放什么什么”,感觉太怪异无用。这完全可以在显示图像的那段代码之后在标题上或其他合适位置显示出来,何必这样不方便,还徒招一个技术问题。
发表于:2007-08-03 16:00:3115楼 得分:0
不是怪异的问题哦,如果不需要这个功能玩意,也不会来像大家请教了,呵呵,实际我是通过摄像头来捕捉显微镜里面的视频,显微镜里面的东西还是移动的,当我看到某个目标时出现在屏幕上时用鼠标点它,这时摄像头进行拍照,并且要能记住“鼠标点的位置,并反映在采集的照片上”,也就是要单击鼠标后进行拍照还需要目标大概的位置坐标。这样提问时只是为了大家好理解,才这么问。:)
发表于:2007-08-04 15:01:2416楼 得分:50
子类化啊~~~

我手头的那个摄像头图象显示代码里就是在图片框上另建了一个窗口用于播放

你只需要找到它的类名(假如是由dll里建立它的话),使用findwindowex就可以得到句柄;

然后子类化,对其鼠标消息进行处理.

我上次帮一个朋友弄了一个子类化wmp窗口,实现拦截双击消息以消除双击全屏的功能,你可以参考一下:

http://community.csdn.net/expert/topic/5684/5684863.xml?temp=.3418848

其中的子类化过程是这样:

public   function   subwndproc(byval   hwnd   as   long,   byval   msg   as   long,   byval   wparam   as   long,   byval   lparam   as   long)   as   long
        select   case   msg
                case   wm_lbuttondblclk               '吃双击消息
                        subwndproc   =   1
                        exit   function
        end   select
        subwndproc   =   callwindowproc(prevwndproc,   hwnd,   msg,   wparam,   lparam)           '其它消息不管
end   function

你在case那里拦截wm_lbuttondown或wm_rbuttondown之类的消息,再返回事件就可以了(封装到一个类里面,方便)
发表于:2007-08-04 15:43:2417楼 得分:0
好的,谢谢楼上的朋友
发表于:2007-08-04 16:35:0218楼 得分:0


楼上的朋友,我用你说的spy++,找到了摄像头工作时多出来的类名,是

afx:10000000:22b:0:1900011:70357
afx:10000000:22b:0:1900011:70357
afx:10000000:22b:0:1900011:b10323

经常变化,怎么办?
发表于:2007-08-04 18:30:0819楼 得分:0
奇了怪了,现在有办法得到窗口名, "mvc_captrue "
public   declare   function   findwindow   lib   "user32 "   alias   "findwindowa "   (byval   lpclassname   as   any,   byval   lpwindowname   as   any)   as   long

dim   lret   as   long
lret   =   findwindow(0&,   "mvc_captrue ")
msgbox   cstr(lret)

但是始终抓不到句柄,为0,用spy++找mvc_captrue可以找到
发表于:2007-08-04 20:10:4220楼 得分:0
有时候窗口名前面或后面可以带了空格了
发表于:2007-08-06 16:00:0521楼 得分:0
已解决

mvchwnd   =   findwindowex(dy.picture1.hwnd,   0,   vbnullstring,   vbnullstring)
发表于:2007-08-08 23:12:1022楼 得分:0
..................................................


快速检索

最新资讯
热门点击