让我的图标工作

Getting my Icon to work

本文关键字:工作 图标 我的      更新时间:2023-10-16

我使用winapi c++在资源编辑器中制作了一个图标,但它显示为红色错误X,我假设这是因为它没有正确加载我的图标。

由于我的程序有多少行代码,我就不告诉你了,只告诉你我在哪里加载图标,或者尝试。

 wndclass.cbSize         = sizeof(wndclass);
      wndclass.style         = CS_HREDRAW | CS_VREDRAW;
      wndclass.lpfnWndProc   = WndProc;
      wndclass.cbClsExtra    = 0;
      wndclass.cbWndExtra    = 0;
      wndclass.hInstance     = hInstance;
      hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
  wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1));
  hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));
  wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  wndclass.hbrBackground = static_cast<HBRUSH>(GetStockObject (WHITE_BRUSH));
  wndclass.lpszMenuName  = NULL;
  wndclass.lpszClassName = szAppName;
  wndclass.hIconSm       = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ERROR));
  RegisterClassEx (&wndclass);

.rc文件

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE 
BEGIN
    "resource.h"
END
2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""rn"
    ""
END
3 TEXTINCLUDE 
BEGIN
    "rn"
    ""
END
#endif    // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU1 MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&Erase",                      ID_FILE_ERASE
        MENUITEM "E&xit",                       ID_FILE_EXIT
    END
    POPUP "&Animals"
    BEGIN
        MENUITEM "&Dog",                        ID_ANIMALS_DOG
        MENUITEM "&Cat",                        ID_ANIMALS_CAT
    END
    POPUP "&Date Info"
    BEGIN
        MENUITEM "Current &Date",               ID_DATEINFO_CURRENTDATE
        MENUITEM "Current &Time",               ID_DATEINFO_CURRENTTIME
    END
    POPUP "&Break"
    BEGIN
        MENUITEM "&Sound",                      ID_BREAK_SOUND
        MENUITEM "S&hapes",                     ID_BREAK_SHAPES
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&System Info",                ID_HELP_SYSTEMINFO
        MENUITEM "&About",                      ID_HELP_ABOUT
    END
END

/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1               ICON                    "icon1.ico"
#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

当然还有资源文件

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Lab_04_Playing_With_Timer_n_Resources.rc
//
#define IDR_MENU1                       101
#define IDI_ICON1                       102
#define ID_FILE_ERASE                   40001
#define ID_FILE_EXIT                    40002
#define ID_ANIMALS_DOG                  40003
#define ID_ANIMALS_CAT                  40004
#define ID_DATEINFO_CURRENTDATE         40005
#define ID_DATEINFO_CURRENTTIME         40006
#define ID_BREAK_SOUND                  40007
#define ID_BREAK_SHAPES                 40008
#define ID_HELP_SYSTEMINFO              40009
#define ID_HELP_ABOUT                   40010
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40011
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

我相信这是一个相当简单的修复。我就是想不明白。我在msdn上看了看,甚至深入阅读了我的教科书,但这个图标就是没有出现。我要显示的图标是IDI_ICON1.

我相信它工作如预期,但你正在看的小图标,(即一个显示在你的窗口的左上角):

wndclass.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ERROR));

这是红色的"X"图标。如果你在这里加载另一个图标,它会显示出来。例如,如果您的IDI_ICON1也包含16x16版本,只需将IDI_ERROR替换为IDI_ICON1。但是,如果它已经包含16x16版本,将hIconSm设置为NULL应该具有相同的效果,因此您通常会使用它来显示不同的小图标。

我相信你的程序工作得很好。但请注意:风类。hIcon=LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1));在这里设置一个大图标。如果你想得到它,只需按ALT+TAB,你会看到你的图标(IDI_ICON1)。2:如果你想设置"小图标",你在主窗口左上角看到的那个,你会在任务栏中看到,只需编辑你的代码为:wndclass。hIconSm= LoadIcon(NULL, MAKEINTRESOURCE(IDI_IDI_ICON1));hIconSm(手柄到小图标)看到它只是看看你的窗口的左上角hIcon(手柄到大图标)看到它按ALT+TAB作为一个好的编程,不要对大图标和小图标使用相同的图标