wxWidgets标题栏图标

时间:2013-03-03 17:51:29

标签: icons wxwidgets

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

顺便说一句,我在visual studio 2010上使用wxwidgets 2.8

编辑:

  

我还尝试在resource.hrc文件中添加MYICON1 ICON "Logo.ico",在resource.h文件中添加#define MYICON1 101,在框架构造函数中添加SetIcon(wxIcon(MYICON1));

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

  

1> xsframe.cpp(17):错误C2248:'wxString :: wxString':无法访问类'wxString'中声明的私有成员
  1 GT; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ wx / string.h(682):参见'wxString :: wxString'的声明
  1 GT; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ wx / string.h(659):参见'wxString'的声明

PS,xsframe是我的主框架。我的图标我想改变。

5 个答案:

答案 0 :(得分:2)

我从here引用Vaclav的回答:

  

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

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

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

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

答案 1 :(得分:2)

操作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
 */

答案 2 :(得分:1)

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

这就是我使用的方法。

您还需要做一些额外的步骤。在resource.h文件中,您需要定义MYICON1,如下所示:

#define MYICON1  101

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

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

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

答案 3 :(得分:1)

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

答案 4 :(得分: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);

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