在EXE和DLL中,FindResource有什么区别么

jacking007 2003-09-10 02:26:31
以下的代码在EXE中,执行无误。可是在DLL中FindResource返回的值就为0了,我用::GetLastError(),得出的值是1813,也就是取不到资源,这是为什么?是因为在EXE中不是用指针CREATE的,在DLL中用指针出现的问题么?怎么解决?
void CButtonMove::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CRgn rgn;
rgn.CreateEllipticRgn( 0 , 0 , 21 , 21 );
SetWindowRgn( (HRGN)rgn , TRUE );

//使用刷子画图时的情况
CDC *pDC =CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rtControl(lpDrawItemStruct->rcItem);
CPen pen(PS_SOLID,1,RGB(106,50,148)),*old_pen;
CBrush *old_brush;
CString strText;


rtControl.EqualRect(rtControl);
// Resource handle to bitmap.
HRSRC hRes;
// Global handles to bitmap resource.
HGLOBAL hData, hLockedData;
CBrush brush;
DWORD dd;

// Find the resource handle.
hRes = ::FindResource(AfxGetResourceHandle(),
MAKEINTRESOURCE(IDB_POINTBMP), RT_BITMAP);
// dd = ::GetLastError();
if (hRes != NULL)
{
// Lock and Load (or Load and Lock).
if (((hData = ::LoadResource(AfxGetResourceHandle(),
hRes)) != NULL) &&
((hLockedData = (HGLOBAL)::LockResource(hData)) != NULL))
{
// Initialize the brush.
brush.CreateDIBPatternBrush(hLockedData,
DIB_RGB_COLORS);

}
}
old_brush=pDC->SelectObject(&brush);
old_pen =pDC->SelectObject(&pen);

pDC->Ellipse(rtControl);
//字体背景是否为透明
pDC->SetBkMode(TRANSPARENT);
GetWindowText(strText);
pDC->DrawText(strText,rtControl,DT_SINGLELINE|DT_CENTER|DT_VCENTER);

}

...全文
579 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoishere 2003-09-10
  • 打赏
  • 举报
回复
可以这么修改一下:

// 首先取得当前DLL的HINSTANCE句柄,假定dll名称是test.dll
HINSTANCE hInst = GetModuleHandle( "test.dll" );

hRes = ::FindResource(hInst, // 这里使用刚才取得的句柄
MAKEINTRESOURCE(IDB_POINTBMP), RT_BITMAP);
whoishere 2003-09-10
  • 打赏
  • 举报
回复
问题出在AfxGetResourceHandle()取得的HINSTANCE句柄是EXE的HINSTANCE句柄,自然在其中也找不到你在DLL中引入的IDB_POINTBMP这个位图ID了,再帮你看看怎么解决吧

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧