wxWidgets 标题栏图标

问题描述 投票:0回答:6

我想更改框架左上角显示的默认图标。 我尝试了很多方法 - xpm、ico、bmp、 按照此处的建议使用

SetIcon(wxIcon(wxT("icon.xpm")));
我尝试了不同的图标大小,16x16、24x24 和 32x32。
我还尝试在resource.rc文件中添加
MYICON1 ICON "Logo.ico"
,在resource.h文件中添加
#define MYICON1 101
,以及在框架构造函数中添加
SetIcon(wxIcon(MYICON1));
..

顺便说一句,我在 Visual Studio 2010 上使用 wxwidgets 2.8

编辑:

我还尝试在resource.rc文件中添加

MYICON1 ICON "Logo.ico"

,在resource.h文件中添加
#define MYICON1 101
以及在框架构造函数中添加
SetIcon(wxIcon(MYICON1));
..

使用这种方法,我在 wxIcon(int) 构造函数中遇到错误..

1>xsframe.cpp(17): 错误 C2248: 'wxString::wxString' : 无法访问类 'wxString' 中声明的私有成员

1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wx/string.h(682) :参见 'wxString::wxString' 的声明
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wx/string.h(659) :参见 'wxString' 的声明

PS,xsframe 是我的主框架。我正在尝试更改其图标。

icons wxwidgets
6个回答
4
投票
设置图标(wxICON(MYICON1));

在文件 gdicmn.h 中,第 166 行

/* Useful macro for creating icons portably, for example: wxIcon *icon = new wxICON(sample); expands into: wxIcon *icon = new wxIcon("sample"); // On Windows wxIcon *icon = new wxIcon(sample_xpm); // On wxGTK/Linux */
    

1
投票
我从

here引用Vaclav的回答:

您可以使用wxFrame::SetIcon 设置主框架的图标。应用 可以通过向 .rc 文件添加新的图标资源来更改图标:

appicon ICON "myapp.ico" #include "wx/msw/wx.rc"
  
  
请注意,此图标必须是 .rc 文件中的第一个图标

并且 当您按字母顺序对图标进行排序时,必须是第一个。这是 因为微软开发人员无法决定如何 确定应用程序的图标:它是Windows 9x下.rc文件中的第一个图标 以及 NT 下按字母顺序排列的第一个(反之亦然)。

大多数人通常会错过这一点。希望能解决问题。


1
投票
您在resource.rc文件中写入:MYICON1 ICON "Logo.ico",以及SetIcon(wxIcon(MYICON1));到框架构造函数

这就是我使用的方法。

您需要执行一个额外步骤。 在resource.h文件中,您需要定义MYICON1,如下所示:

#define MYICON1 101

你必须确保图标文件包含所有必需的分辨率 - 我总是确保它有 16by16、32by32 和 256by256 越多越好!

如果应用程序图标是资源文件中的第一个图标,这是一个好主意。

我建议升级到 wxWidgets v2.9.4 - 很多事情开始工作得更好。


1
投票
使用图标的字符串名称,而不是数字标识符。查看任何 wxWidgets 示例作为示例。


0
投票
一个快速、肮脏、不可移植、仅限 Windows 的解决方案(在 Windows 7、wxWidgets 3.0.4、vc110 中对我有用):

#ifdef __WXMSW__ #include "wx/msw/private.h" //for wxGetInstance() #endif ... //in Frame's constructor: HWND hWnd = this->GetHandle(); HINSTANCE hInstance = wxGetInstance(); HICON hIcon = ExtractIcon(hInstance, L"someicon.ico", 0); SetClassLongPtr(hWnd, GCLP_HICONSM, (LONG_PTR)hIcon);

在窗口上做一些其他的技巧可能有用吗?


0
投票
前几天遇到了同样的问题,这对我有帮助。感谢 ChatGPT。

wxIcon appIcon;
 appIcon.LoadFile("IDI_APP_ICON", wxBITMAP_TYPE_ICO_RESOURCE);
 if (appIcon.IsOk()) { SetIcon(appIcon); }
    
© www.soinside.com 2019 - 2024. All rights reserved.