2

我想更改显示在框架左上角的默认图标。我尝试了很多方法——xpm、ico、bmp,按照这里SetIcon(wxIcon(wxT("icon.xpm")));的建议使用
我尝试了不同的图标尺寸,16x16、24x24 和 32x32。
我还尝试MYICON1 ICON "Logo.ico"在 resource.rc 文件、#define MYICON1 101resource.h 文件和SetIcon(wxIcon(MYICON1));框架构造函数中添加。

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

编辑:

我还尝试MYICON1 ICON "Logo.ico"在 resource.rc 文件、#define MYICON1 101resource.h 文件和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 是我的主框架。我想改变谁的图标。

4

5 回答 5

4

SetIcon(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
 */
于 2014-01-06T02:58:47.363 回答
2

我从这里引用 Vaclav 的回答:

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

appicon ICON "myapp.ico"
#include "wx/msw/wx.rc"

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

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

于 2013-03-04T14:46:27.233 回答
1

你在resource.rc文件中写了: MYICON1 ICON "Logo.ico" 和 SetIcon(wxIcon(MYICON1)); 到框架构造函数

这就是我使用的方法。

您需要做一个额外的步骤。在 resource.h 文件中你需要定义 MYICON1 像这样的东西:

#define MYICON1  101

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

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

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

于 2013-03-03T18:43:52.097 回答
1

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

于 2013-03-03T21:58:52.183 回答
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);

对在窗户上做其他一些技巧有用吗?

于 2018-05-27T02:07:13.593 回答