我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網(wǎng)站首頁 > CAD新聞

Hook技術(shù)在CAD中的使用方法

時間:2012-03-02 10:23:44 來源:未知

本實例主要是講Hook技術(shù)在CAD中的使用方法。
Hook技術(shù)就是所謂鉤子技術(shù),在CAD的二次開發(fā)過程中,有很多的情況,是需要使用鉤子技術(shù)的(盡管CAD已經(jīng)提供了強(qiáng)大的反應(yīng)器技術(shù)),由于CAD也是基于MFC開發(fā)的應(yīng)用程序,我們也可以像HOOK其它應(yīng)用程序一樣的方法來HOOKCAD,但有些時候,一些消息不知道怎么回事,會HOOK不到。比如:按下SHIFT鍵。 不管怎么樣,CAD還是把HOOKCAD消息的處理方法封裝了一下。很好用,主要有以下幾種:

// Define callback function for apps that want windows messages
typedef void (* AcedWatchWinMsgFn)(const MSG*); //定義監(jiān)視消息的函數(shù)指針
typedef BOOL (* AcedFilterWinMsgFn)(MSG*);   //定義過濾消息的函數(shù)指針
typedef void (* AcedOnIdleMsgFn) ();     //定義監(jiān)視CAD空閑時間的函數(shù)指針

// Windows messages hooks
/* Register a filter message hook into AutoCAD's Windows message loop.
* The message passed to your application can be changed and can be blocked out.
* If the function returns TRUE, the message WON'T be passed to other hook
* functions or AutoCAD at all. The message is terminated.
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*/
以上的意思大概是,在CAD的WINDOWS 消息循環(huán)中定義一個hook,你可以在其中處理這個消息,這個處理函數(shù)是必須有返回值的,返回TRUE,這個消息不會傳遞給其它的HOOK和CAD了,這個消息就中止了,如果返回FALSE,這個消息將可以被任何其它的HOOK和CAD處理。
不過個人做了一個實驗,返回TRUE時,CAD好像還是可以對這個消息進(jìn)行一個處理。這個地方還有待研究。
BOOL acedRegisterFilterWinMsg(const AcedFilterWinMsgFn pfn);

/* acedRemoveFilterWinMsg
* Takes a message hook function pointer and remove it
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*/
很簡單,移除上面注冊的過濾函數(shù)
BOOL acedRemoveFilterWinMsg(const AcedFilterWinMsgFn pfn);

/* acedRegisterWatchWinMsg
* Register a hook function into AutoCAD message loop.
* The function can only look up AutoCAD's Windows message.
* It can't change or block message.
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*/
以上的意思大概是,在CAD的WINDOWS 消息循環(huán)中定義一個hook,你可以在其中查看CAD的任何消息,但不能中止其消息的傳遞,當(dāng)然,你可以監(jiān)控到一些消息后,做一些你自己要做的事,但不會中斷消息的傳遞。
BOOL acedRegisterWatchWinMsg(const AcedWatchWinMsgFn pfn);

/* acedRemoveWatchWinMsg
* Takes a message hook function pointer and remove it
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*
*/
很簡單,移除上面注冊的監(jiān)控函數(shù)
BOOL acedRemoveWatchWinMsg(const AcedWatchWinMsgFn pfn);

/* acedRegisterOnIdleWinMsg
* Register a hook function to be notified when AutoCAD is on idle
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*/
以上的意思大概是,在CAD的WINDOWS 消息循環(huán)中定義一個hook,當(dāng)CAD的空閑時間時,就會激活這個定義的HOOK,然后你就可以做一些處理了。
BOOL acedRegisterOnIdleWinMsg(const AcedOnIdleMsgFn pfn);

/* acedRemoveOnIdleWinMsg
* Takes a message on idle hook function pointer and remove it
* Returns TRUE if successfully registers the hook. Otherwise FALSE.
*
*/
簡單,移除上面注冊的監(jiān)控空閑時間函數(shù)
BOOL acedRemoveOnIdleWinMsg(const AcedOnIdleMsgFn pfn);


在CAD二次開發(fā)中,HOOK技術(shù)應(yīng)該還是很有用的,比如,最近,我在做一個在CAD中定義右鍵菜單的功能。以前已經(jīng)做過一個右鍵菜單,用CONTEXTMENU,但不能把CAD本身的菜單給干掉,早幾天看到BENTLY公司在CAD平臺上做的開發(fā),他們的右鍵菜單完全沒有CAD的影子,所以,我下定決心,要嘗試著把CAD的右鍵給干掉,有人說,可以自己定義CUI文件搞定,但我們的軟件是要兼容低版本的CAD,所以不能用這種方法,想了想,HOOK的方法可能適合,自己試了試,感覺還行。以下是自己寫的核心代碼。
//pick the current selectset
BOOL HasEntityBeSelected()
{
// 如果AutoCAD關(guān)閉,則不執(zhí)行任何任務(wù)。
//
if (!acdbHostApplicationServices()->workingDatabase())
   return FALSE;

// 取得剛打開的實體
//
ads_name sset;
int err = acedSSGet(_T("I"), NULL, NULL, NULL, sset);
if (err != RTNORM)
{
   /*acutPrintf(_T("n獲取選擇集錯誤n"));*/
   return FALSE;
}
/*actrTransactionManager->startTransaction();*/
long length;
acedSSLength(sset, &length);
acedSSFree(sset);
if( length > 0 )
{
   return TRUE;
}
else
{
   return FALSE;
}
}


//catch the message
int CatchRClick(MSG* msg)
{
CView* pView = acedGetAcadDwgView();//獲得程序主框架指針
HWND hActiveWnd = ::GetActiveWindow();
BOOL bInView = TRUE;
CPoint pt;
::GetCursorPos(&pt);
CRect rect;
::GetWindowRect( hActiveWnd , rect );
if( pt.x > rect.left &&
   pt.x < rect.right &&
   pt.y > rect.top &&
   pt.y < rect.bottom )
{
   bInView = FALSE;
}

CWnd* pMainWnd = acedGetAcadWinApp()->m_pMainWnd;
HWND hMainWnd = pMainWnd->m_hWnd;

if( hActiveWnd && hActiveWnd == hMainWnd )
{
   bInView = TRUE;
}

if( msg->message == WM_RBUTTONDOWN && bInView )
{
   CMenu* pMenu = NULL;
   if( HasEntityBeSelected() )
   {
    if( pObject )
    {
     pMenu = pObject->GetMainMenu(); //彈出選中了實體的右鍵菜單
    }
   }
   else
   {
    if( pDefault )
    {
     pMenu = pObject->GetMainMenu();//彈出未選中了實體的右鍵菜單
    }
   }
   CPoint pt;
   ::GetCursorPos(&pt);
   CRect rect;
   ::GetWindowRect(pView ->m_hWnd, rect );
   if( pt.x > rect.left &&
    pt.x < rect.right &&
    pt.y > rect.top &&
    pt.y < rect.bottom )
   {
    pMenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y, pView);//單擊右鍵菜單時彈出菜單指針
    return 1;
   }
   else
   {
    return 0;
   }
}
else
{
   return 0;
}
}

// Init this application. Register your
// commands, reactors...
void InitApplication(void *pkt)
{
// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_INIT
//}}AFX_ARX_INIT

// TODO: add your initialization functions

pDefault = new DefaultContextMenu(_hdllInstance);
pObject = new ObjectContextMenu(_hdllInstance);

acedRegisterFilterWinMsg( CatchRClick );
}
// Unload this application. Unregister all objects
// registered in InitApplication.
void UnloadApplication()
{
// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_EXIT
//}}AFX_ARX_EXIT

// TODO: clean up your application
If( pDefault )
   delete pDefault;
if( pObject )
   delete pObject;
acedRegisterFilterWinMsg( CatchRClick );
}
 


我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

            青青草原综合久久大伊人精品| 国产片一区二区| 视频一区在线播放| 亚洲一二三四在线观看| 亚洲视频一区二区免费在线观看| 99久久久免费精品国产一区二区| 中文字幕不卡在线| 国产亚洲欧美色| 久久先锋资源网| 国产日韩精品一区二区三区| 国产三级欧美三级| 亚洲欧美一区二区三区极速播放 | 日韩中文字幕av电影| 亚洲高清免费观看| 日日骚欧美日韩| 久久成人免费电影| 国产成人亚洲精品狼色在线| 不卡一区二区在线| 91亚洲精华国产精华精华液| 91黄色免费版| 91精品国产欧美日韩| 精品久久久三级丝袜| 亚洲国产高清aⅴ视频| 成人欧美一区二区三区小说| 伊人夜夜躁av伊人久久| 日韩精品1区2区3区| 国产麻豆成人传媒免费观看| 成人黄色av电影| 在线视频你懂得一区| 欧美成人一区二区三区在线观看| 99久久综合99久久综合网站| 色悠悠亚洲一区二区| 欧美视频一区在线| 欧美电视剧在线看免费| 国产日韩欧美a| 亚洲国产aⅴ成人精品无吗| 在线观看三级视频欧美| 欧美日韩中文字幕精品| 精品国产乱码久久久久久牛牛| 色88888久久久久久影院野外| 首页国产欧美久久| 久久99国产乱子伦精品免费| 成人性生交大片免费看视频在线| 日本成人在线不卡视频| 国产一区二区不卡| 日本电影亚洲天堂一区| 日韩欧美在线一区二区三区| 中文字幕一区二区三区蜜月| 婷婷久久综合九色国产成人 | 日韩精品一区二区三区视频在线观看 | 欧美一区二区视频在线观看2022| 国产精品自拍av| 色视频欧美一区二区三区| 精品久久久久99| 一二三四社区欧美黄| 蜜桃91丨九色丨蝌蚪91桃色| 97se亚洲国产综合自在线| 欧美一级理论性理论a| 亚洲伦理在线精品| 国产成人在线视频网址| 91精品国产综合久久精品app| 欧美综合视频在线观看| 欧美成人精品高清在线播放| 亚洲激情欧美激情| av影院午夜一区| 久久亚洲春色中文字幕久久久| 欧美日韩中文字幕一区| 国产欧美日韩另类视频免费观看| 欧美一区二区三区系列电影| 国产欧美一区二区精品性色 | 国产亚洲福利社区一区| 首页亚洲欧美制服丝腿| 99久久国产综合精品女不卡| 2023国产精华国产精品| 日日夜夜一区二区| 欧美三级电影一区| 亚洲综合免费观看高清在线观看| 综合欧美亚洲日本| 国产成人综合视频| 久久免费美女视频| 日韩va亚洲va欧美va久久| 91福利区一区二区三区| 亚洲蜜桃精久久久久久久| 99视频精品全部免费在线| 日韩高清不卡一区| 91精品免费观看| 日本aⅴ免费视频一区二区三区| 欧美aaa在线| 欧美美女喷水视频| 亚洲大片精品永久免费| 一本久久综合亚洲鲁鲁五月天 | 日韩国产精品大片| 91精品国产综合久久蜜臀| 图片区小说区国产精品视频| 欧美日韩1234| 免费av成人在线| 久久蜜臀中文字幕| 成人av先锋影音| 一区二区三区在线播| 欧美电影一区二区三区| 另类人妖一区二区av| 久久精品夜夜夜夜久久| 99久久夜色精品国产网站| 中文字幕中文在线不卡住| 色天使久久综合网天天| 日韩高清一级片| 国产日产亚洲精品系列| 色哟哟欧美精品| 日本欧美肥老太交大片| 中文字幕精品一区二区精品绿巨人| 亚洲成人免费视频| 日韩一区二区电影网| 高清不卡一区二区| 一区二区成人在线视频| 欧美成人精精品一区二区频| www.av亚洲| 日韩在线一二三区| 国产欧美一区二区三区在线看蜜臀| 亚洲亚洲精品在线观看| 欧美一级电影网站| 91在线你懂得| 免费不卡在线观看| 亚洲人成精品久久久久久 | 美女网站色91| 国产欧美视频一区二区三区| 不卡电影一区二区三区| 首页综合国产亚洲丝袜| 国产精品色哟哟网站| 欧美猛男超大videosgay| 精品国产一区二区国模嫣然| 粉嫩在线一区二区三区视频| 午夜一区二区三区视频| 亚洲国产成人在线| 欧美一级欧美一级在线播放| av成人免费在线观看| 蜜桃视频在线一区| 亚洲嫩草精品久久| 久久久久久麻豆| 在线观看日韩一区| aaa欧美大片| 国产一区三区三区| 日韩精品一二三四| 亚洲伊人伊色伊影伊综合网| 亚洲国产成人私人影院tom | 91电影在线观看| 经典一区二区三区| 丝袜亚洲另类欧美| 一区二区免费视频| 中文字幕日韩一区二区| 久久精品一区八戒影视| 欧美一区二区福利视频| 色婷婷国产精品综合在线观看| 伊人性伊人情综合网| 日韩精品影音先锋| 91精品一区二区三区在线观看| 午夜欧美电影在线观看| 中文字幕制服丝袜成人av| 国产亚洲制服色| 日韩精品中文字幕在线不卡尤物 | 日韩在线a电影| 国产精品国产三级国产普通话三级| 99精品桃花视频在线观看| 国产高清亚洲一区| 国产高清精品网站| 国模大尺度一区二区三区| 美洲天堂一区二卡三卡四卡视频| 久久久久久久久久久久久女国产乱| 国产伦精品一区二区三区免费| 国产人妖乱国产精品人妖| 日韩片之四级片| 欧美mv和日韩mv的网站| 欧美本精品男人aⅴ天堂| 2021国产精品久久精品| 国产午夜三级一区二区三| 日本一区二区三区视频视频| 国产亚洲精品资源在线26u| 日本一区二区三区国色天香 | 日韩福利视频导航| 美女视频网站久久| 精品一二三四区| 国产91精品免费| 色综合天天综合给合国产| 日本乱码高清不卡字幕| 在线观看欧美黄色| 欧美欧美欧美欧美首页| 欧美刺激午夜性久久久久久久| 成人精品国产免费网站| 成人av午夜电影| 欧美视频自拍偷拍| 精品福利视频一区二区三区| 国产精品无遮挡| 91麻豆免费看| 欧洲一区在线电影| 日韩久久久精品| 中文字幕一区二区日韩精品绯色| 日韩免费在线观看| 国产精品电影院| 亚洲3atv精品一区二区三区| 久久99蜜桃精品| av电影在线观看完整版一区二区|