NX/UG二次开发-其他-打包对话框\图标到DLL

在很多外挂的安装包中,并没有对话框和图标文件。好处就是文件少,也防止用户修改对话框中的属性,导致程序异常。以下为大家提供一个方法,仅供参考:

1、添加资源文件

2、新建自定义资源类型

 3、添加资源文件(如果代码包可能随时发给别人或更换文件夹,建议将资源文件设为相对路径)

 4、解析对话框位置,删除对话框,(只有对话框显示之后,就可以删除掉对话框)

附加代码:

bool FreeResFile(unsigned long m_lResourceID, const char* m_strResourceType, const char* m_strFileName, char dlxPath[1024])											
{											
	//设置初始状态										
	AFX_MANAGE_STATE(AfxGetStaticModuleState());//切换到dll模块才能获取dll实例										
	TCHAR szPath[MAX_PATH] = { 0 };										
	HMODULE m_hModule = AfxGetInstanceHandleHelper();										
	GetModuleFileName(m_hModule, szPath, MAX_PATH);										
	(_tcsrchr(szPath, '\\'))[0] = 0;										
	(_tcsrchr(szPath, '\\'))[1] = 0;										
#ifdef UNICODE											
	std::string mStr = WStringToMBytes(szPath);										
	strcpy(dlxPath, mStr.c_str());										
#else											
	strcpy(dlxPath, szPath);										
#endif											
											
	//构造完整释放文件路径										
	char dlxPath11[1024] = "";										
	sprintf_s(dlxPath11, "%sapplication\\%s", dlxPath, m_strFileName);										
											
	strcpy(dlxPath, dlxPath11);										
	//查找资源										
	HRSRC hResID = ::FindResource(m_hModule, MAKEINTRESOURCE(m_lResourceID), m_strResourceType);										
	if (hResID == NULL)										
	{																		
		return FALSE;									
	}										
											
	//加载资源  										
	HGLOBAL hRes = ::LoadResource(m_hModule, hResID);										
											
	//锁定资源										
	LPVOID pRes = ::LockResource(hRes);										
	if (pRes == NULL)										
	{																		
		return FALSE;									
	}										
											
	//得到待释放资源文件大小 										
	unsigned long dwResSize = ::SizeofResource(m_hModule, hResID);										
											
	//创建文件 										
	HANDLE hResFile = CreateFile(dlxPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);										
	if (INVALID_HANDLE_VALUE == hResFile)										
	{																		
		return FALSE;									
	}										
											
	//写入资源										
	DWORD dwWrite = 0;										
	WriteFile(hResFile, hRes, dwResSize, &dwWrite, NULL);										
	FreeResource(hRes);										
	CloseHandle(hResFile);				
										
	//										
	return TRUE;										
}											

 测试发现,此方法并不适用BMP图标文件,以下处理方法:

bool DllFreeBmpFile(unsigned long m_lResourceID, const char* m_strFileName, char dlxPath[1024])
{
	char bmpPathChar[1024] = "";

	//设置初始状态
	AFX_MANAGE_STATE(AfxGetStaticModuleState());//切换到dll模块才能获取dll实例
	HMODULE m_hModule = AfxGetInstanceHandleHelper();


	//构造完整释放文件路径
	sprintf_s(bmpPathChar, "%s\\%s", dllPath, m_strFileName);

	//加载bmp图片
	HBITMAP bimp = LoadBitmap(m_hModule, MAKEINTRESOURCE(m_lResourceID));

	//
	BITMAP bm;
	int width, height;
	GetObject(bimp, sizeof(BITMAP), &bm);
	width = bm.bmWidth;
	height = bm.bmHeight;
	CDC memDC;
	memDC.CreateCompatibleDC(NULL);
	memDC.SelectObject(bimp);

	//
	CImage image;
	image.Create(width, height, 24);
	BitBlt(image.GetDC(), 0, 0, width, height, memDC.m_hDC, 0, 0, SRCCOPY);

	//
	HRESULT hResult = image.Save(_T(bmpPathChar));

	//
	image.ReleaseDC();
	memDC.DeleteDC();

	//
	strcpy(dlxPath, dlxPathChar);

	//
	return TRUE;
}

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

恩·艾克斯·红

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

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

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

打赏作者

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

抵扣说明:

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

余额充值