免费黄网站在线观看_成人午夜剧场免费观看完整版_多野结衣av一区_亚洲激情在线视频_国产乱码精品一区二区三区亚洲人 _国产成人精品三级_视频一区视频二区视频三区高_一区福利视频_国产成人精品午夜_蜜桃成人365av_国产精品美女久久久久久久_国产伦精品一区二区三区视频免费

您的位置:網站首頁 > CAD新聞

簡介鉤子技術在AutoCAD中的應用

時間:2010-01-08 13:19:09 來源:

鉤子技術是很有用的一種技術,它如同給函數掛上一個鉤子(我們自己的函數),讓它在執行前先執行我們掛的鉤子(我們掛接的函數),從而達到攔截事件和函數調用等的目的。在autocad中,利用鉤子技術可以為我們做很多事情:如建立快捷鍵(不希望更改已有菜單),等待或者觸發特定消息(如鼠標,鍵盤),可以獲得比反應器更強大的功能,等等。

objectARX提供了幾種向autocad注冊鉤子函數的ARX API函數,見下面:

acedRegisterFilterWinMsg,注冊一個鉤子函數
acedRemoveFilterWinMsg,注銷一個鉤子函數
acedRegisterWatchWinMsg, 監測鉤子函數
acedRemoveWatchWinMsg, 移除監測函數

其具體用法各位不妨參考幫助文件。

下面函數提供一個例程,該例程定義了一個快捷命令 Ctrl+I,當用戶按下快捷鍵時候,autocad 將執行appload命令。


我這里采用了向導方式創建了一個新工程Hook

采不采用MFC對這個程序沒有影響.

 

在acrxEntryPoint.cpp 中開頭添加如下代碼:
#include <aced.h>             //僅因為版本較低,所以加了這兩個
#include <rxmfcapi.h>           //對于高版本無須此兩個
復制代碼
并申明函數:


//------------------------------------------------------------------------------------------------
//函數原型及其全局變量申明
void sendCommandToAutoCAD(HWND hWndAcad,CString cmd); //向AutoCAD窗口發送字符串命令(cmd)
void watchCtrlI(const MSG * pMsg);        //鉤子監測函數
void Accelerator(void);              //快捷鍵注冊函數
static BOOL filterCtrlKeyDone = FALSE;                
//------------------------------------------------------------------------------------------------
復制代碼

 

函數定義

void   Accelerator(void)
{
if(filterCtrlKeyDone == TRUE)
{
   acutPrintf(_T("Hook has already been registered!n")); //如果鉤子已經注冊,則返回
   return;
}
if(acedRegisterWatchWinMsg(watchCtrlI) == FALSE)
   acedPrompt(_T("Hook can't be registered!n"));       //無法注冊鉤子
else
{
   acedPrompt(_T("Shortcut Ctrl+I has been defined!n"));   //快捷命令Ctrl + I 已經定義
   filterCtrlKeyDone = TRUE;
}
return;
}
//鉤子監測函數,監測Ctrl+I鍵盤消息
void watchCtrlI(const MSG *pMsg)
{
if (pMsg->message == WM_CHAR && pMsg->wParam == 9) //發生鍵盤Ctrl + I消息
{
   sendCommandToAutoCAD(adsw_acadMainWnd(), _T("apploadn"));
            //這里可以是你自己定義的任何函數
}
return;
}
//向AutoCAD窗口發送字符串命令(cmd)
void sendCommandToAutoCAD(HWND hWndAcad,CString cmd)
{
if(! hWndAcad)
   return;
COPYDATASTRUCT cmdMsg;
cmdMsg.dwData = (DWORD)1;
cmdMsg.cbData = (DWORD)_tcslen(cmd) + 1;
cmdMsg.lpData = cmd.GetBuffer(cmd.GetLength() + 1);
SendMessage(hWndAcad,WM_COPYDATA,(WPARAM)hWndAcad, (LPARAM)& cmdMsg);
return;
}
復制代碼


修改一下初始化入口On_kInitAppMsg和卸載函數On_kUnloadAppMsg


virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
   // TODO: Load dependencies here
   // You *must* call On_kInitAppMsg here
   AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt)
  
   // TODO: Add your initialization code here
   //我在這里添加到了初始化,如果你感覺不好的話,可以定義到命令組里
   Accelerator();

   return (retCode)
}
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
   // TODO: Add your code here
   // You *must* call On_kUnloadAppMsg here
   AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt)
   // TODO: Unload dependencies here

   //卸載arx程序前卸載鉤子函數
   if(filterCtrlKeyDone == TRUE)
   {
acedRemoveWatchWinMsg(watchCtrlI);
acutPrintf(_T("nHook has been removed!n"));
   }

   return (retCode)
}
復制代碼
編譯后,形成arx,加載hook.arx,然后當你用快捷鍵的時候,你就會發現彈出appload對話框了。
最終效果如下圖:
如果你感覺到代碼不好讀或者有出入,見我下面的附件:
在vs2002 + arx2006 + autocad2006 編譯成功并運行正確。

我這個例子僅僅很簡單,希望大家討論。
這個利用鉤子技術在autocad 中定義快捷命令的思路,具有較大的啟發意義。因為,對于在autocad 平臺上開發cad系統來說,如果直接與autocad建立底層聯系(如等待或者觸發特定的消息),利用鉤子技術是很必要的。

 


午夜影院在线播放| 亚洲精品短视频| 日韩小视频在线观看专区| 成人激情免费在线| 国产高清视频在线| 蜜臀91精品国产高清在线观看| 国产人妖乱国产精品人妖| 最近2019年好看中文字幕视频 | 中文字幕日韩一区二区三区不卡| 爱情岛论坛成人| 日韩综合在线| 91精品免费| 国产私拍福利精品视频二区| 精品一区二区成人精品| 欧美日韩成人在线视频| 成年人在线免费观看视频网站| 国产欧美日韩精品高清二区综合区| 91亚洲男人天堂| 日韩欧美在线播放| 久久夜色精品国产亚洲aⅴ| 国产精品小说在线| bestiality新另类大全| 久久久精品中文字幕麻豆发布| 久久久com| 国产精品成人一区二区网站软件| 欧美在线视频a| 亚洲欧美日韩综合一区| 欧美一级本道电影免费专区| 91亚洲精品一区| 热久久免费视频| 能在线观看的av网站| 在线精品视频免费播放| 蜜乳av一区| 久久不射电影网| 欧美成人毛片| 久久久久久久999| 特级毛片在线| 欧美一级片免费看| 天堂一区在线观看| 99re成人精品视频| 黄色三级视频在线| 成人动漫一区二区在线| 欧美一级爱爱视频| 亚洲神马久久| 亚洲一区二区久久久久久| 午夜久久美女| 亚洲精品在线观看91| 91在线免费看片| 99在线精品视频在线观看| 色噜噜狠狠一区二区三区| 激情另类小说区图片区视频区| 国产91在线亚洲| 国产精品视频看| 四虎在线观看| 日韩视频免费观看高清完整版在线观看| 国产不卡人人| 欧美高清视频在线观看| 日韩精品不卡一区二区| 日本一区二区精品| 久久女同互慰一区二区三区| 中文字幕在线网| 日韩欧美aaaaaa| 成人看片网页| 国产精品免费看久久久香蕉| 免费日韩av片| 无罩大乳的熟妇正在播放| 亚洲午夜激情网站| 黄色成年人视频在线观看| 中文字幕欧美专区| 91精品国产91久久综合| 日本人妻伦在线中文字幕| 亚洲激情图片qvod| aa级大片免费在线观看| 97视频在线观看网址| 伊人久久大香线蕉综合热线| 成人网站免费观看入口| 一区二区三区在线看| a毛片在线播放| 欧美人与物videos| 国产91丝袜在线18| 8x8x8x视频在线观看| 欧美激情视频给我| 久久久久99精品国产片| 8x国产一区二区三区精品推荐| 国产精品视频午夜| 亚洲一二三级电影| 嗯用力啊快一点好舒服小柔久久| 人偷久久久久久久偷女厕| 欧美深夜福利| 在线色视频网| 日韩五码在线观看| 欧美精品制服第一页| 26uuu亚洲| 欧美日韩国产综合网| 色琪琪原网站亚洲香蕉| 九九九久久久久久| 日本精品三区| 最近高清中文在线字幕在线观看1| 国产日本欧美在线观看| 欧美一区二区三区免费| 国产日产欧美精品一区二区三区| 成人国产一区二区三区精品| 1069男同网址| 中文字幕精品一区二区三区精品| 精品久久久三级| 91精品国产高清久久久久久91| 欧美日本不卡| 亚洲免费在线视频| 激情久久久久久久久久久久久久久久| 亚洲成人av观看| 国产午夜精品久久久| 欧美午夜在线播放| 国产视频精品网| 99麻豆久久久国产精品免费优播| 久草在线中文888| 亚洲人成五月天| 欧美激情一区| 加勒比一区二区三区| 国产午夜精品久久久| 欧美99久久| 91制片厂毛片| 亚洲人线精品午夜| 国产情侣久久| 久久久亚洲精华液精华液精华液 | 亚洲精品理论电影| 久久久久国产精品| 绯色av一区| 国产精品户外野外| 国产精品毛片大码女人| 亚洲男人在线| youjizz.com在线观看| 精品国产三级电影在线观看| 亚洲欧美成人综合| 欧美jizz18性欧美| 久久国产日韩欧美| 欧美精品视频www在线观看| 欧美日韩1080p| 久久经典视频| 国模精品一区二区三区| 在线观看91精品国产麻豆| 在线亚洲精品| 快射视频在线观看| 日韩欧美三级一区二区| 精品欧美一区二区在线观看| 蜜臀a∨国产成人精品| 午夜欧美激情| 日本一区午夜艳熟免费| 久久久91精品国产| 欧美国产日韩精品免费观看| 欧美男人操女人视频| 宅男深夜国产| 国产激情美女久久久久久吹潮| 欧美色图在线观看| 日韩高清一级片| 韩国久久久久久| 蜜臀精品一区二区| 久久91精品国产91久久跳| 欧美国产日韩亚洲一区| 国产一区网站| 可以在线观看的av| 台湾成人av| 久久九九亚洲综合| 亚洲伦理在线精品| 最新欧美人z0oozo0| 曰本三级在线| 国产成人在线小视频| 精品中文字幕在线| 亚洲成人av福利| 国语精品一区| 韩国精品一区| 精品久久久噜噜噜噜久久图片 | 69国产精品| 亚洲free性xxxx护士hd| 欧美一区二区精美| 国产999精品久久| 亚洲精品一区二区三区在线| 欧美vide| 亚洲精品一区二| 欧美俄罗斯性视频| 色婷婷综合久久| 久久av中文字幕片| 日本国产精品| 久久99精品久久| 久久久久久久激情| 亚洲www在线观看| 亚洲女人被黑人巨大进入al| 综合欧美一区二区三区| 欧美日韩一视频区二区| 国产精品久久久久久久久久齐齐| 黄色三及免费看| 婷婷四月色综合| 9.1国产丝袜在线观看| 日韩一区二区三免费高清| 国产精品网站导航| 青青草成人在线观看| 欧美猛男男男激情videos| 草草视频在线观看| 在线观看视频网站你懂得| 热这里只有精品| 亚洲va国产va天堂va久久|