0

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\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
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 です。

4

2 に答える 2

0

1: あなたのプログラムはうまくいくと確信しています。ただし、少し注意してください: wndclass.hIcon=LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)); ここで大きなアイコンを設定します。取得したい場合は、ALT+TAB を押すだけで、アイコン (IDI_ICON1) が表示されます。2: 「小さいアイコン」を設定したい場合は、メイン ウィンドウの左上に表示され、タスク バーに表示されます。コードを次のように編集します。 wndclass.hIconSm= LoadIcon(NULL, MAKEINTRESOURCE (IDI_IDI_ICON1)); hIconSm (小さなアイコンのハンドル) を確認するには、ウィンドウの左上を見てください hIcon (大きなアイコンのハンドル) を確認するには、ALT + TAB を押してくださいそして小さなアイコン

于 2013-09-28T23:08:46.680 に答える