Microsoft KB Archive/148305

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

Article ID: 148305

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 1.5 Professional Edition

 Microsoft Visual C++ 1.51

 Microsoft Visual C++ 1.52 Professional Edition

 Microsoft Visual C++ 2.0 Professional Edition</li></ul>

 Microsoft Visual C++ 2.1</li></ul>

 Microsoft Visual C++ 2.2</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q148305

<div class="symptoms_section">

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

<div class="cause_section">

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

<div class="resolution_section">

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.

<div class="status_section">

STATUS
This behavior is by design.

<div class="moreinformation_section">

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

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.