让我的图标工作
Getting my Icon to work
我使用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作为一个好的编程,不要对大图标和小图标使用相同的图标
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 绘制移动图标,它一直是最顶端的鼠标光标和工作的全屏应用程序
- 让我的图标工作