首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

无输入焦点窗体 拖动时卡顿,怎么解决

2012-02-19 
无输入焦点窗体 拖动时卡顿,如何解决?【要求】窗体无输入焦点(也就是运行时不会影响其他窗口的输入焦点);拖

无输入焦点窗体 拖动时卡顿,如何解决?
【要求】
窗体无输入焦点(也就是运行时不会影响其他窗口的输入焦点); 
拖动窗体时不要出现下面代码中的卡顿现象。希望能求到正确的代码,谢谢! 
(生成.exe文件后,运行程序,然后打开其他窗口,再拖动窗体,就会卡)
下面是代码: 

VB code
Option Explicit ' 转移输入焦点的声明Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' 禁止本窗体拥有输入焦点的常数Private Const HWND_NOTOPMOST = -2Private Const WS_DISABLED = &H8000000 Private Const GWL_EXSTYLE = (-20)Private Const GWL_STYLE = (-16) '禁止拥有输入焦点Private Sub Form_Load()SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_DISABLED Or GetWindowLong(Me.hwnd, GWL_EXSTYLE)End Sub


[解决办法]
可是文本框里面无法输入东西
另外不卡
我用VB6SP3+XP

探讨
引用:

我测试了一下,既有焦点又卡


哈哈,还是你好!每次问问题你都会来,谢谢了哈!

那个程序确实不会抢文本框的输入焦点:先运行程序,然后随便选择一个文本框,点上光标后,再去激活程序窗口,你会发现,文本框里的焦点确实不会被抢去了。真的!

[解决办法]
你将窗口设置为禁止状态,当然卡壳咯。
不知你的用在什么用途,如果是想让你的文本框拥有不死的焦点,可以通过子类来搞定。
如果想要做到好像条码枪扫描的数据时,不管你的窗口是否处于激活状态,都能将数据输入文本框里,那就可以用消息钩子,如果是WM_KEYDOWN就做个标记,接下来如果有WM_CHAR消息就不理它(是键盘输入的),是WM_KEYUP就取消标记,如果来WM_CHAR并没有WM_KEYDOWN标记就是扫描枪的输入消息(我猜的),就把这个消息转发到输入编辑框。子类化编辑框,然后扫描枪扫入,看看都有什么消息?如果没有256,257消息那就可以做到焦点在任何窗口都能扫到指定编辑框。
[解决办法]
1、将窗口置顶
2、设置窗体中所有的可获得焦点的控件的Enabled属性为False

[解决办法]
晕,我的想法刚刚和你相反了。你是想不抢其他窗口的焦点。
11楼正解。
[解决办法]
mouse_down事件里头对控件的Enable属性进行设定, mouse_up过后再设置回来,再设置焦点状态,,,, 拖动的时候就不会抢了

热点排行