首页 > 其他分享 >ObjectARX 构建鼠标跟随图像之acedAddSupplementalCursorImage简单实例

ObjectARX 构建鼠标跟随图像之acedAddSupplementalCursorImage简单实例

时间:2023-04-12 23:44:22浏览次数:48  
标签:pBits 鼠标 bmiHeader bm bmHeight bi acedAddSupplementalCursorImage ObjectARX NULL

ObjectARX 2015 新增了一个api acedAddSupplementalCursorImage

代码

		CBitmap   cbmp;
		cbmp.m_hObject=(HBITMAP)::LoadImage(NULL,_T("d:\\test.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
		BITMAP bm;
		cbmp.GetBitmap(&bm);
		int nByte=bm.bmBitsPixel /8;
		BITMAPINFO bi;
		bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
		bi.bmiHeader.biWidth=bm.bmWidth;
		bi.bmiHeader.biHeight=-bm.bmHeight;
		bi.bmiHeader.biPlanes=1;
		bi.bmiHeader.biBitCount=bm.bmBitsPixel;
		bi.bmiHeader.biCompression=BI_RGB;
		bi.bmiHeader.biSizeImage=bm.bmWidth*bm.bmHeight*nByte;
		bi.bmiHeader.biClrUsed=0;
		bi.bmiHeader.biClrImportant=0;

		//获取位图数据
		HDC hdc=::GetDC(NULL);
		BYTE* pBits=(BYTE*)new BYTE[bm.bmWidth*bm.bmHeight*nByte];
		::ZeroMemory(pBits,bm.bmWidth*bm.bmHeight*nByte);
		if(!::GetDIBits(hdc,cbmp,0,bm.bmHeight,pBits,&bi,DIB_RGB_COLORS))
		{
			delete pBits;
			pBits=NULL;
		}

		AcGiPixelBGRA32 *colorBlock = new AcGiPixelBGRA32[bm.bmWidth * bm.bmHeight];
		for (int i = 0; i < bm.bmWidth; i++)
		{
			for (int j = 0; j < bm.bmHeight; j++)
			{				
				//colorBlock[i*bm.bmHeight+j].setRGBA(255,255,0,255);
				BYTE r= pBits[i*nByte+j*bm.bmWidthBytes+2];
				BYTE g=pBits[i*nByte+j*bm.bmWidthBytes+1];
				BYTE b=pBits[i*nByte+j*bm.bmWidthBytes+0];
				//如果是黑色,则设置alpha通道
				if(r==0&&g==0&&b==0)
				{
					colorBlock[i+j*bm.bmHeight].setRGBA(r,g,b,0);
				}
				else
				colorBlock[i+j*bm.bmHeight].setRGBA(r,g,b,255);
			}			
		}
		delete pBits;
		pBits=NULL;

		imageSource=new AcGiImageBGRA32(bm.bmWidth, bm.bmHeight, colorBlock);
		acedAddSupplementalCursorImage(imageSource);

		ads_name ss;
		acedSSGet(NULL,NULL,NULL,NULL,ss);

		acedRemoveSupplementalCursorImage(imageSource);
		delete imageSource;
		imageSource=NULL;

截图

参考

https://www.keanw.com/2014/05/adding-a-cursor-badge-in-autocad-2015-using-net.html
http://www.theswamp.org/index.php?topic=58025.msg612684#msg612684
https://forums.autodesk.com/t5/objectarx/what-is-the-magnitude-of-with-in-acgigeometry-image/td-p/4809751

标签:pBits,鼠标,bmiHeader,bm,bmHeight,bi,acedAddSupplementalCursorImage,ObjectARX,NULL
From: https://www.cnblogs.com/edata/p/17311897.html

相关文章

  • Vue3+element-plus封装文字超出一行,省略号显示,鼠标悬浮展示全部
    1.组件封装<template><el-tooltipeffect="dark":disabled="isShowTooltip":content="content"placement="top"><p:class="['line1',className]"@mouseover="onMouseOver(refNa......
  • C++,OpenCV鼠标操作(8)
    鼠标事件响应voidsetMouseCallback(constString&winname,MouseCallbackonMouse,void*userdata=0);/******************************************************************** winname: 监听窗口名称* onMouse: 鼠标事件回调函数* userdata: 递给回调函数的可......
  • 罗技无线鼠标新接收器怎么配对?
    第一步,   去官网下载 SetPoint 软件,然后,安装 到本地电脑第二步,   打开安装的SetPoint软件,  点击 如上“打开软件” 会打开一网页链接,如下所示,  如上,点击“继续”  后续步骤按提示一步一步完成就OK了!......
  • 后台鼠标点击使用win32con,win32api,技术实现
    importwin32conimportwin32api,win32gui,win32ui#cx:想点击位置的第一个位置,例如要点击句柄内(200,300)位置,就输入200#cy:想点击位置的二个位置,例如要点击句柄内(200,300)位置,就输入300#hwnd:输入句柄id#t:延迟时间,假如想双击调用两次中间延迟零点几秒钟,默认0,不写这......
  • 【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition
    【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition文章目录【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition一、Vue3usexxx写法1、代码2、使用示例一、Vue3usexxx写法1、代码import{ref,onMounted,onUnmounted}from"vue";exportfunctionuse......
  • 鼠标键盘操作Actions类和Robot
    Actions类一、鼠标右击、双击Java代码//定位百度首页右上角新闻WebElementXw=driver.findElement(By.xpath("//*[@id='u1']/a[1]"));//newActions对象ActionsRightClick=newActions(driver);//在新闻上点击鼠标右键RightClick.contextClick(Xw).perform();T......
  • Windows 系统 多桌面切换的 鼠标实现
    我作为一个开发者正常在日常的工作环境中大多是使用MacOS系统进行开发。也经常会接触到windows系统。我认为,苹果操作系统在使用体验方面非常人性化,比如提供了很多方便的快捷键和快捷指令。对于我来说,最喜欢的功能就是苹果的多桌面,让我可以更加高效地处理任务。虽然Windows操作......
  • JS 模拟鼠标事件mouse over、click
     <!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="content-type"content="text/html;charset=utf-8"><metaname="renderer"content="webkit&quo......
  • threejs_交互_鼠标点击_添加物体_删除物体
    click点击添加物体,shirft+click点击删除物体<!DOCTYPEhtml><htmllang="en"><head> <metacharset="utf-8"> <title>three.jswebgl-interactive-voxelpainter</title> <metaname="viewport"conten......
  • Chrome浏览器插件:CrxMouse(鼠标手势控制浏览器)
    CrxMouse是一款谷歌浏览器插件,它可以通过手势来控制您的浏览器,在您的日常网络浏览中提高效率和速度。插件介绍CrxMouse是一个非常流行的谷歌浏览器插件,它允许您通过鼠标手势来控制您的浏览器。该插件集成了大量的手势功能,使您可以在不使用键盘或鼠标的情况下轻松地进行网页浏览......