乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 140|回复: 9

VB与CAD焦点切换的困扰!

[复制链接]

18

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2007-8-15 14:35:00 | 显示全部楼层 |阅读模式
VB写的程序,用AppActivate (acadapp.Caption)可以使CAD获得焦点,这时候我选择实体以后需要将焦点返回到VB窗体。可是我怎么弄,都是VB窗体闪烁三下就失去焦点!(我用了SetWindowPos使VB窗体提到最前面)。用了form1.textbox1.setfocus、appactivate(me.caption)、form1.show都不行。输入的内容老是输入到CAD命令行了,请指教!
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-15 15:13:00 | 显示全部楼层
你试试setforegroundwindow这个API函数
回复

使用道具 举报

18

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2007-8-15 19:57:00 | 显示全部楼层
郁闷的是我用上面列的方法曾经实现过,但是被我一不小心不知道怎么弄了就又不行了。老是闪烁三下就失去焦点
回复

使用道具 举报

18

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2007-8-15 22:26:00 | 显示全部楼层
在网上搜索了一下,好像说只能从VB中把焦点转移给CAD,而CAD不能把焦点转移给VB程序。但是我明明就实现过,太郁闷了!
回复

使用道具 举报

10

主题

131

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2007-8-15 22:35:00 | 显示全部楼层
做成DLL就不存在焦点问题了
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-16 08:29:00 | 显示全部楼层
你可能需要在setforegroundwindow后再用一句doevents,或者sleep 10,试试吧,或者像楼上说的那样,做成DLL,不过,你在将焦点移到CAD前,先将VB的FORM HIDE,在要返回VB时,再用ME.show,也许没有这个问题
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-16 08:42:00 | 显示全部楼层
而且,你也没有必要用Setwindowpos来使程序总在最上面,你可以将你的VB程序的窗口做为CAD的子窗口,我刚刚试了一下,在到CAD前先ME.hide,再处理完CAD的事情后再ME.show,焦点转到了VB的窗口上。
回复

使用道具 举报

18

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2007-8-16 13:01:00 | 显示全部楼层
谢谢英雄无敌!用me.hide&me.show行不通,我试过,VB窗体获得焦点以后只是在任务栏里闪烁三下,键盘输入仍然在CAD的command栏里。我需要选择的时候CAD激活,选择完后输入的内容进入VB窗体的textbox1中,但是用APPactivate激活CAD容易,但从CAD返回VB窗体怎么弄都只是该窗体闪烁三次后失去焦点。也不知道是不是我自己设置的问题。
Private Sub Form_Load()
    On Error Resume Next
   
    'Dim myval As Long
    'myval = SetWindowPos(Form1.hwnd, -1, 0, 0, 0, 0, 3)        
    Set acadapp = GetObject(, "AutoCAD.Application")
    acadapp.Visible = True
    Set acaddoc = acadapp.ActiveDocument   
    Set acadms = acaddoc.ModelSpace  
    Dim objsset As AcadSelectionSet
    Set objsset = acaddoc.SelectionSets.Item("beam")
    objsset.Delete
    'If Err Then
    '   Err.Clear
    Set objsset = acaddoc.SelectionSets.Add("beam")
    'End If
   
    Dim filtertype(7) As Integer
    Dim filterdata(7) As Variant
    filtertype(0) = -4
    filterdata(0) = ""
    filtertype(4) = -4
    filterdata(4) = ""
    Me.Hide  
   
    objsset.SelectOnScreen filtertype, filterdata
    Me.Show
End Sub
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-16 15:48:00 | 显示全部楼层
你是在什么系统下啊,我按你的程序试了,焦点是在VB的窗口上的,我是cad2004+XP
回复

使用道具 举报

18

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2007-8-16 23:09:00 | 显示全部楼层
XP_SP2+CAD2004和2006均是如此,窗体显示以后只是在任务栏闪烁
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 11:27 , Processed in 0.652621 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表