NX二次开发跟随鼠标响应的动态预览

用到了鼠标钩子和坐标转换, 启动钩子后,程序会一直捕捉你的鼠标响应,会一直执行你实现的代码,所以在数据的处理上一定要严格,不能出现变量未初始化和空指针等情况,不然会造成程序闪退,在程序执行完一定要将钩子卸载干净,不然也会造成程序闪退。如果你遇到类似问题解决不掉可以关注博主,给博主留言。

LRESULT CALLBACK hookproc(UINT nCode,WPARAM wParam,LPARAM lParam);//声明在静态全局
void GetScreenPt(HWND delta,POINT pt,double screenXYZ[3]);
HHOOK hook = NULL;

//卸载钩子
if(hook!=NULL)
{
     UnhookWindowsHookEx(hook);
     hook = NULL;
}

//钩子启动
DWORD id =GetCurrentThreadid();
hook =SetWindowsHookEx(WH_MOUSE,(HOOKPROC)hookproc,NULL,id);

//获取视图坐标
void GetScreenPt(HWND delta,POINT pt,double screenXYZ[3])
{
   tag_t workView;//初始工作视图
   double clip[4]={0.0,1.0,0.0,1.0};
   UF_VIEW_ask_work_view(&workView);
   UF_VIEW_ask_current_xy_clip(workView,clip);
   RECT drew={0};
   GetWindowRect(delta,&draw);//获取绘图区在屏幕的大小
   long length = draw.right - draw.left;
   long width  = draw.bottom-draw.top;
   double xScale = (double)(pt.x-draw.left)/length;
   double yScale = (double)(draw.bottom-pt.y)/width;
   screenXYZ[0]=clip[0]+(clip[1]-clip[0])*xScale;//X
   screenXYZ[0]=clip[2]+(clip[3]-clip[2])*yScale;//Y 
}
LRESULT CALLBACK hookproc(UINT nCode,WPARAM wParam,LPARAM lParam)
{
    if(wParam == WM_MOUSEMOVE)//只处理鼠标移动时的响应
    {
        LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR*)lParam;
        POINT pt = pMouseHook->pt;//像素坐标
        HWND delta= WindowFromPoint(pt);
        HWND parent = GetParent(delta);
        
        TCHAR className[100] = TEXT("");
        GetClassName(parent,className,2);
        if(className[0]=='A'&&className[string(className).size-1]!='0'&&className[21]=='b'&&string(className).size()==73)
        {
           if(string(className).substr(string(className).find('b'))[17]!='0')
             {
                //计算NX视图坐标
                 double screenXYZ[3]={0,0,0};
                 GetScreenPt(delta,pt,screenXYZ);
                //视图坐标转绝对坐标
                  double temp=0.0;
                  double csys[12]={0.0};
                  uc6430("",&csys[0],&temp);
                  uc6433("",&csys[3]);
                  
                  double mtx[9]={0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0};
                  double matrix[12]={0.0};
                  int status =0;
                  uf5940(csys,mtx,matrix,&status);
                  uf5941(screenXYZ,matrix);
                  ///此处添加需要实现的代码
                  
             }
        }

    }
    return CallNextHookEx(hook,nCode,wParam,lParam);
}

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
NX二次开发动态包容体是指在NX软件平台上进行二次开发时,能够灵活地对对象进行包容和管理的能力。在二次开发中,通常需要对NX软件的功能进行扩展或定制,这就涉及到对不同类型的对象进行操作和管理。 动态包容体的概念是指在扩展或定制功能时,可以动态地将对象包含在新的容器中,并能够对其进行操作。通过动态包容体,可以将需要处理的对象集合到一个容器中,从而方便进行统一的操作和管理。这种包容体能够根据需要进行动态改变,既可以添加新的对象,也可以移除或修改已有的对象。 在NX二次开发中,动态包容体能够帮助开发者实现更灵活和高效的功能扩展。例如,在进行几何操作时,可以使用动态包容体来管理需要进行操作的几何体,以便于对其进行统一的变换、修剪、合并等操作。在进行特征定制时,可以将相关特征对象包含在动态包容体中,以便于对其进行统一的修改和控制。 动态包容体的使用还能够提高代码的可重用性和可维护性。通过将相似的对象归类到动态包容体中,可以将代码逻辑进行封装和复用,减少代码量和冗余。同时,由于动态包容体能够根据需要进行动态修改,也便于日后对功能进行扩展和维护。 总之,NX二次开发动态包容体是一种在二次开发中常用的技术手段,通过对不同类型的对象进行动态包容和管理,能够帮助开发者实现更灵活、高效和可维护的功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值