明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1564|回复: 2

[基础] 关于如何从paletteset面板点击按钮后使图形区获得焦点

[复制链接]
发表于 2011-8-19 17:03 | 显示全部楼层 |阅读模式
本帖最后由 fullwolf 于 2011-8-19 17:07 编辑

        最近一直有个问题困扰着我,我用vb.net新建了一个paletteset面板,添加了自定义控件,其中包含按钮,按钮的点击事件就是获得一个点。但是每次点击按钮都要点两次图形区域才能开始。
        试了好多次,发现第一次点击图形区域是为了获得焦点,第二次才是命令。经查找资料解决了。
1:在按钮事件开始写下代码:
"paletteset.keepfocus=false"
结束时写下:
“paletteset.keepfocus=true”
此方法在2007,2008中调试可用。在2011中无用。其他版本未试过,如无用,可用下一个方法。
2:在2011中,此方法无用,感觉好像2011中的面板比2007的选项多了,估计是焦点绑的太牢了。
只会vb.net,不知在C中如何写以下代码。
在按钮的sub上一行写:
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As System.IntPtr) As System.IntPtr
在按钮的事件中,getpoint之前写(sub的开头写就可以吧,我是在定义了doc后就写了):
SetFocus(Application.DocumentManager.MdiActiveDocument.Window.Handle)

经调试,在2011中有效。希望有人有更好的方法。
发表于 2011-8-20 15:58 | 显示全部楼层
本帖最后由 xgr 于 2011-8-20 15:59 编辑

我用的是cad2010+vs2008,查看了很多的帖子,至今都还没有找到解决方法,郁闷啊!

下面C#方法还是没用啊
 

class win32Api
     {
        [DllImport("user32.dll")]
        private static extern System.IntPtr SetFocus(System.IntPtr hwnd);
        public static void SetCadFocus()
         {
             SetFocus  (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle);
             Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.UpdateScreen();
           }
     }


 

在按钮的Chick事件调用

 win32Api.SetCadFocus();

 

不知道到底什么原因。

 楼主| 发表于 2011-8-20 21:28 | 显示全部楼层
这个真不知道。我用vb的通过了,最好有c的高手来帮帮忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 14:47 , Processed in 0.197479 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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