要得到一个图标资源在资源文件中的偏移量“标号”该怎么办?(300)

时间:2022-06-06 19:09:05
想引用资源文件中的 ICO 图标资源的“标号”-----
请用 Delphi 6\Demos\ResXplor\resxplor.dpr 这个DEMO随便打开一个delphi的exe文件,可以看到众多的资源,可是 Icon 下的图标资源不象Cursor光标资源那样每个都带有一个“标号”,如32761、32762等等。

但是,还是用这个DEMO 打开“网络蚂蚁”的exe文件,却可以在Icon 下看到图标资源有标号,如101,137等等。

这是为何?  是因为Delphi自身编译引起的吗?  
还是因为这是“网络蚂蚁”自身加入的新的资源?
可我在文件中加入了自己的图标资源{$R XXX.res},也是不行啊。

我是想引用这个“标号”进行在注册表中注册后能够引用此图标资源。
另:除了这个方法,我怎样才能引用exe中的资源?????

5 个解决方案

#1


最多只能100分啊?   :(

#2


很久没有来这里了。

#3


关键一句:
if( ! EnumResourceNames( EDII.hInstance, RT_GROUP_ICON, (ENUMRESNAMEPROC )MyEnumProcedure, (LPARAM)GetSafeHwnd()) )

其中:
BOOL CALLBACK MyEnumProcedure( HANDLE  hModule, LPCTSTR  lpszType, LPTSTR  lpszName, LONG  lParam )
{
    TCHAR szBuffer[256];
    LONG    nIndex = LB_ERR;
    LPTSTR lpID = NULL;

    // Name is from MAKEINTRESOURCE()
    if( HIWORD(lpszName) == 0 )
    {
        wsprintf( szBuffer, "Icon [%d]", (DWORD)lpszName );  // 注意,这个lpszName 就是偏移量,我就是不懂,这个参数是怎么传进去的。回头发信问问作者吧。
        lpID = lpszName;
    }
    else
    {
        // Name is string
        lpID = strdup( lpszName );
        wsprintf( szBuffer, "Icon [%s]", lpID );
    }
    // Add it to the listbox
    nIndex = SendDlgItemMessage( (HWND)lParam, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)(szBuffer) );
    // Set the item data to be the name of the resource so we can get it later
    SendDlgItemMessage( (HWND)lParam, IDC_LIST1, LB_SETITEMDATA, (WPARAM)nIndex, (LPARAM)lpID );

    return TRUE;
}

http://www.vckbase.com/vckbase/vckbase12/vc/nonctrls/gdi_17/1217001.htm

#4


关注

#5


多谢楼上! 

这C++的代码我要好好看看。

#1


最多只能100分啊?   :(

#2


很久没有来这里了。

#3


关键一句:
if( ! EnumResourceNames( EDII.hInstance, RT_GROUP_ICON, (ENUMRESNAMEPROC )MyEnumProcedure, (LPARAM)GetSafeHwnd()) )

其中:
BOOL CALLBACK MyEnumProcedure( HANDLE  hModule, LPCTSTR  lpszType, LPTSTR  lpszName, LONG  lParam )
{
    TCHAR szBuffer[256];
    LONG    nIndex = LB_ERR;
    LPTSTR lpID = NULL;

    // Name is from MAKEINTRESOURCE()
    if( HIWORD(lpszName) == 0 )
    {
        wsprintf( szBuffer, "Icon [%d]", (DWORD)lpszName );  // 注意,这个lpszName 就是偏移量,我就是不懂,这个参数是怎么传进去的。回头发信问问作者吧。
        lpID = lpszName;
    }
    else
    {
        // Name is string
        lpID = strdup( lpszName );
        wsprintf( szBuffer, "Icon [%s]", lpID );
    }
    // Add it to the listbox
    nIndex = SendDlgItemMessage( (HWND)lParam, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)(szBuffer) );
    // Set the item data to be the name of the resource so we can get it later
    SendDlgItemMessage( (HWND)lParam, IDC_LIST1, LB_SETITEMDATA, (WPARAM)nIndex, (LPARAM)lpID );

    return TRUE;
}

http://www.vckbase.com/vckbase/vckbase12/vc/nonctrls/gdi_17/1217001.htm

#4


关注

#5


多谢楼上! 

这C++的代码我要好好看看。