[每日一码] 利用“钩子”实现鼠标功能的例子代码
//函数的声明部分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,®Caps);
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]