vs2013怎么添加自定义资源?谢谢,,,
发布网友
发布时间:2023-07-17 10:29
我来回答
共1个回答
热心网友
时间:2024-11-30 19:53
您好,这样的:
BOOL COscillDlg::AssoilInlaidResource(CString sDllName, UINT nResourceID, CString sOutputFileName, CString sExtendName)
{
ASSERT(!sOutputFileName.IsEmpty());
ASSERT(!sExtendName.IsEmpty());
LPTSTR Name = MAKEINTRESOURCE(nResourceID);// IDR_SWF资源名称。
HINSTANCE hImage = NULL;
// 界面库句柄
// 载入界面库
if (!sDllName.IsEmpty())
{
hImage = LoadLibrary(sDllName);
if (hImage < (HINSTANCE)HINSTANCE_ERROR)
{
AfxMessageBox(sDllName);
return FALSE;
}
}
HRSRC res = FindResource(hImage, Name, sExtendName);// "swf" 资源类型。
if (res == NULL)
{
AfxMessageBox(SwitchGetErr(GetLastError()));
return FALSE;
}
HGLOBAL gl = LoadResource(hImage, res);
if (gl == NULL) return FALSE;
LPVOID lp = LockResource(gl);//返回指向资源内存的地址的指针。
if (sOutputFileName.Find('.') == -1)// 没有找到扩展名
{
::MessageBox(NULL, TEXT("扩展名不对"), TEXT("error"), MB_OK);
return FALSE;
}
DeleteFile(sOutputFileName);
// CREATE_ALWAYS为不管文件存不存在都产生新文件。
// ***CreateFile() 默认使用当前.exe文件路径创建文件。
// 创建的是一个隐藏属性的文件 FILE_ATTRIBUTE_HIDDEN
HANDLE fp = CreateFile(sOutputFileName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
DWORD a;
//sizeofResource 得到资源文件的大小
if (!WriteFile(fp, lp, SizeofResource(hImage, res), &a, NULL))
return FALSE;
CloseHandle(fp);//关闭句柄
FreeResource(gl);//释放内存
if (!sDllName.IsEmpty())
{
FreeLibrary(hImage);
}
return TRUE;
}
if (AssoilInlaidResource(_T("ShockwaveFlashControl.dll"), IDR_SWF1, _T("C:\\Temswf.swf"), _T("SWF")))
{
AfxMessageBox(_T("SUS"));
}
else
{
AfxMessageBox(_T("文件不存在"));
}
CString COscillDlg::SwitchGetErr(DWORD n)
{
CString errStr;
switch (n)
{
case 1813:
errStr= _T("资源类型不对");
break;
default:
break;
}
return errStr;
}追问我是想学Windows编程,现在在看Windows编程第五版,你写的这个看不懂啊,很惭愧
我是想学Windows编程,现在在看Windows编程第五版,你写的这个看不懂啊,很惭愧