admin 发表于 2024-3-14 20:30:44

[每日一码] 利用“钩子”实现鼠标功能的例子代码

//函数的声明部分

static BOOL CapsDone = FALSE;   //判断是否注册了该命令
BOOL toCaps(MSG *pMsg);    //获得消息的函数,就是消息处理函数
void regCaps();   //注册命令
void unregCaps();//注销命令



///程序实现

void initApp()
{
acedRegCmds->addCommand(采用T("MKEvents"),采用T("caps"),采用T("caps"),ACRX采用CMD采用MODAL,&regCaps);
return;
}



void unloadApp()
{
acedRegCmds->removeGroup(采用T("MKEvents"));
if(CapsDone==TRUE)
{
acedRemoveFilterWinMsg(toCaps);
}

//acedRemoveWatchWinMsg(toCaps);

return;
}

//此处获得鼠标在Dwg图纸中的坐标,相当有用,值得珍藏的一段代码

BOOL toCaps(MSG* pMsg)
{
CString sTemp;
long ptx=0,pty=0;

if(pMsg->message == WM采用CHAR)
{
    ptx=LOWORD(pMsg->lParam);
    pty=HIWORD(pMsg->lParam);
    CPoint pt(ptx,pty);
    acedDwgPoint getPts;
    acedCoordFromPixelToWorld(pt,getPts);
    sTemp.Format(采用T("/nx=%0.3f,y=%0.3f/n"),getPts,getPts);
    acutPrintf(sTemp);
}



return FALSE;
}



void regCaps()
{
if(CapsDone == TRUE)
return;
acedPrompt(采用T("/ncapsing.../n"));
if(acedRegisterFilterWinMsg(toCaps) == FALSE)
// if(acedRegisterWatchWinMsg(toCaps) == FALSE)
{
acedPrompt(采用T("/ncant/n"));
}
else
{
CapsDone=TRUE;
}
return;

}


void unregCaps()
{
if(CapsDone == TRUE)
{
acedRemoveFilterWinMsg(toCaps);
//acedRemoveWatchWinMsg(toCaps);
CapsDone = FALSE;
}
return;
}
页: [1]
查看完整版本: [每日一码] 利用“钩子”实现鼠标功能的例子代码