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

ID: Q148305


The information in this article applies to:
  • The Microsoft Foundation Classes (MFC), included with:
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.5, 1.51, 1.52
    • Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 2.2, 4.0


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 kbnokeyword kbDLL kbMFC kbVC
Version : 1.50 1.51 1.52 | 2.00 2.10 2.20
Platform : NT WINDOWS
Issue type :


Last Reviewed: August 3, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.