明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: highflybir

[【高飞鸟】] 越飞越高讲堂(2)CAD的API编程指南(上)--DynamicWrapperX

    [复制链接]
发表于 2011-4-28 16:00 | 显示全部楼层
本帖最后由 chlh_jd 于 2011-4-28 16:06 编辑

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

  1. WM_MOUSEWHEEL   
  2. fwKeys   =   LOWORD(wParam);   /*   key   flags   */   
  3. zDelta   =   (short)   HIWORD(wParam);   
  4. /*   wheel   rotation   */   
  5. xPos   =   (short)   LOWORD(lParam);   
  6. /*   horizontal   position   of   pointer   */   
  7. yPos   =   (short)   HIWORD(lParam);   
  8. /*   vertical   position   of   pointer   */   
复制代码
发表于 2011-4-28 16:41 | 显示全部楼层
回复 chlh_jd 的帖子

这样是可以的,等于截获CAD发出来的消息。但我不知道会有什么意外发生。
aMsg = wParam
bMsg = lParam
可以通过lParam或者屏幕坐标,然后把屏幕坐标转换为CAD的坐标(需要获得窗口大小,
要用到ScreenToClient 的API,参见下面:
http://hi.baidu.com/sppeivan/blog/item/98ba4ba337f84aa7cbefd041.html
最后用trans pt  2 0
但这样我没测试过。
发表于 2011-4-28 19:14 | 显示全部楼层
本帖最后由 chlh_jd 于 2011-4-28 19:43 编辑

滚轮信息即时截取要协同VLISP做ACAD屏幕的动态显示,这个确实有点麻烦;
不防先看下这个VLISP
  1. ;;;use Alan method
  2. ;;;to easy to control add method devided by viewsize .
  3. (defun c:test (/ en ent str ds pto pt)
  4.   (if (and (setq en (car (entsel "Select Integer Number Text :")))
  5.            (setq ent (entget en))
  6.            (setq str (cdr (assoc 1 ent)))
  7.            (numberp (eval (read str)))
  8.            (equal (atoi str) (atof str))
  9.            (setq ds (/ (getvar "viewsize") 100.));_here can be changed cond to your need
  10.            (setq pto (grread t 15 0))
  11.       )
  12.     (while (and (setq pt (grread pto))
  13.                 (not (and (= 2 (car pt))
  14.                           (or (= 13 (cadr pt)) (= 32 (cadr pt)))
  15.                      )
  16.                 ) ;_Enter Space
  17.                 (not (or (= (car pt) 11) (= (car pt) 25))) ;_Right button
  18.            )
  19.       (if (and (= (car pt) 5)
  20.                (> (abs (- (cadadr pt) (cadadr pto))) ds)               
  21.           )
  22.         (cond
  23.           ((> (- (cadadr pt) (cadadr pto)) 0);_Y+ move   
  24.            (setq str (rtos (1+ (atoi str)) 2 0))
  25.            (entmod (list (cons 1 str) (cons -1 en)))           
  26.            (setq pto pt)
  27.           )
  28.           ((< (- (cadadr pt) (cadadr pto)) 0);_Y- move
  29.            (setq str (rtos (1- (atoi str)) 2 0))
  30.            (entmod (list (cons 1 str) (cons -1 en)))
  31.            (setq pto pt)
  32.           )
  33.         )
  34.         (princ)
  35.       )
  36.     )
  37.     (princ)
  38.   )
  39.   (princ)
  40. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-4-28 22:31 | 显示全部楼层
这个一定要顶
发表于 2011-4-29 13:04 | 显示全部楼层
再一次佩服!
发表于 2011-4-29 13:41 | 显示全部楼层
很好,很强大。看来不得不恶补VB。
发表于 2011-4-29 13:51 | 显示全部楼层
你甚至可以将它打包到vlx文件中。

楼主所言是真的?请教怎么做到?
发表于 2011-4-29 13:51 | 显示全部楼层
你甚至可以将它打包到vlx文件中。

楼主所言是真的?请教怎么做到?
发表于 2011-4-29 13:52 | 显示全部楼层
本帖最后由 carrot1983 于 2011-4-29 13:53 编辑

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

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


还以为没有发出去,怎么一下子就发了三条。哈哈,不太会用。
发表于 2011-4-29 14:12 | 显示全部楼层
我相信这是迟来的爱,楼主,你太高了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 20:04 , Processed in 0.174843 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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