chlh_jd 发表于 2011-4-28 16:00:47

本帖最后由 chlh_jd 于 2011-4-28 16:06 编辑

用楼主的代码把派送消息行注释掉(vlax-invoke DWX 'DispatchMessage ptr)    ;派送消息,就可以不让屏幕跟着滚动了 ;但这个amsg始终返回±7864320,C++中的wParam好像可以返回滚动距离;
另一个问题请教下斑竹:有没有一种可能把这个功能附加到grread上?
鼠标滚轮的消息处理,这篇文章可能叙述得不错
http://topic.csdn.net/t/20030820/15/2168554.html
这段代码貌似精髓诠释

WM_MOUSEWHEEL   
fwKeys   =   LOWORD(wParam);   /*   key   flags   */   
zDelta   =   (short)   HIWORD(wParam);   
/*   wheel   rotation   */   
xPos   =   (short)   LOWORD(lParam);   
/*   horizontal   position   of   pointer   */   
yPos   =   (short)   HIWORD(lParam);   
/*   vertical   position   of   pointer   */   

highflybird 发表于 2011-4-28 16:41:11

回复 chlh_jd 的帖子

这样是可以的,等于截获CAD发出来的消息。但我不知道会有什么意外发生。
aMsg = wParam
bMsg = lParam
可以通过lParam或者屏幕坐标,然后把屏幕坐标转换为CAD的坐标(需要获得窗口大小,
要用到ScreenToClient 的API,参见下面:
http://hi.baidu.com/sppeivan/blog/item/98ba4ba337f84aa7cbefd041.html
最后用trans pt2 0
但这样我没测试过。

chlh_jd 发表于 2011-4-28 19:14:30

本帖最后由 chlh_jd 于 2011-4-28 19:43 编辑

滚轮信息即时截取要协同VLISP做ACAD屏幕的动态显示,这个确实有点麻烦;
不防先看下这个VLISP ;;;use Alan method
;;;to easy to control add method devided by viewsize .
(defun c:test (/ en ent str ds pto pt)
(if (and (setq en (car (entsel "Select Integer Number Text :")))
         (setq ent (entget en))
         (setq str (cdr (assoc 1 ent)))
         (numberp (eval (read str)))
         (equal (atoi str) (atof str))
         (setq ds (/ (getvar "viewsize") 100.));_here can be changed cond to your need
         (setq pto (grread t 15 0))
      )
    (while (and (setq pt (grread pto))
                (not (and (= 2 (car pt))
                        (or (= 13 (cadr pt)) (= 32 (cadr pt)))
                     )
                ) ;_Enter Space
                (not (or (= (car pt) 11) (= (car pt) 25))) ;_Right button
         )
      (if (and (= (car pt) 5)
               (> (abs (- (cadadr pt) (cadadr pto))) ds)               
          )
      (cond
          ((> (- (cadadr pt) (cadadr pto)) 0);_Y+ move   
         (setq str (rtos (1+ (atoi str)) 2 0))
         (entmod (list (cons 1 str) (cons -1 en)))         
         (setq pto pt)
          )
          ((< (- (cadadr pt) (cadadr pto)) 0);_Y- move
         (setq str (rtos (1- (atoi str)) 2 0))
         (entmod (list (cons 1 str) (cons -1 en)))
         (setq pto pt)
          )
      )
      (princ)
      )
    )
    (princ)
)
(princ)
)

icefrog 发表于 2011-4-28 22:31:08

这个一定要顶

xiaotao 发表于 2011-4-29 13:04:08

再一次佩服!

carrot1983 发表于 2011-4-29 13:41:08

很好,很强大。看来不得不恶补VB。

carrot1983 发表于 2011-4-29 13:51:10

你甚至可以将它打包到vlx文件中。

楼主所言是真的?请教怎么做到?

carrot1983 发表于 2011-4-29 13:51:46

你甚至可以将它打包到vlx文件中。

楼主所言是真的?请教怎么做到?

carrot1983 发表于 2011-4-29 13:52:25

本帖最后由 carrot1983 于 2011-4-29 13:53 编辑

你甚至可以将它打包到vlx文件中。

楼主所言是真的?请教怎么做到?


还以为没有发出去,怎么一下子就发了三条。哈哈,不太会用。

zark 发表于 2011-4-29 14:12:54

我相信这是迟来的爱,楼主,你太高了
页: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
查看完整版本: 越飞越高讲堂(2)CAD的API编程指南(上)--DynamicWrapperX