Knowledge Base

PRB: AfxFindResourceHandle Fails w/ Icons, Cursors, & Strings

Article ID: 148305

Article Last Modified on 11/21/2006


APPLIES TO


This article was previously published under Q148305

SYMPTOMS

AfxFindResourceHandle() fails when searching for icon (RT_ICON), cursor (RT_CURSOR), and string resources (RT_STRING).

CAUSE

This occurs because of how the Windows API function FindResource, which is called by AfxFindResourceHandle(), is designed.

RESOLUTION

For icons and cursors, use the RT_GROUP_ICON or RT_GROUP_CURSOR resource type with AfxFindResourceHandle() to return the EXE or DLL instance where the resource is located, and then call ::LoadIcon() or ::LoadCursor() to load the resource.

For string resources, call CString::LoadString(). It will search the EXE and MFC extension DLLs for the string resource, and load it into the CString.

STATUS

This behavior is by design.

MORE INFORMATION

AfxFindResourceHandle is an _AFXDLL-specific API for walking the resource list to look for a given match. It takes the name and type of a resource and returns the resource handle where it was first found (or NULL). It is documented in MFC Technote TN033: DLL Version of MFC.

Sample Code

The following sample code shows successful uses of RT_GROUP_ICON and RT_GROUP_CURSOR:
// This sample code can be placed in any MFC application or DLL
// that links with the DLL version of MFC. Create an icon with ID
// IDI_ICON1 and a cursor with ID IDC_CURSOR1. Call TestLoadIconCursor
// from CWinApp::Initinstance().

HICON MyLoadIcon( LPCTSTR  lpIconName )
{
    return ::LoadIcon(AfxFindResourceHandle(lpIconName, RT_GROUP_ICON),
                      lpIconName);
}

HCURSOR MyLoadCursor ( LPCTSTR  lpCursorName )
{
    return ::LoadCursor(AfxFindResourceHandle(lpCursorName,
                        RT_GROUP_CURSOR),
                        lpCursorName);
}

void TestLoadIconCursor(void)
{
    HICON   hIcon;
    HCURSOR hCur;
    LPCTSTR lpcszRes;

    lpcszRes = MAKEINTRESOURCE(IDI_ICON1);
    hIcon = MyLoadIcon( lpcszRes );
    ASSERT (hIcon != NULL);

    lpcszRes = MAKEINTRESOURCE(IDC_CURSOR1);
    hCur = MyLoadCursor( lpcszRes );
    ASSERT (hCur != NULL);
}
				

Additional query words: 2.5 2.50 2.51 2.52 3.0 3.00 3.1 3.10 3.2 3.20 AfxFindResourceHandle FindResource

Keywords: kbcode kbcursor kbdll kbicon kbprb kbresource kbstring KB148305