SetIcon в Win для глафной

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

SetIcon в Win для глафной

Post by borr_1 » Fri Aug 05, 2011 1:03 pm

Проблема с SetIcon для главной формы в Win

Code: Select all

wxIcon FrameIcon;
FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("Icon/ico_051.ico"))));
SetIcon(FrameIcon);
Не дает никакого эффекта почему-то - компилируется, но иконка у главной формы остается пустой
Зато если:

rc-файл

Code: Select all

aaa ICON "Icon/ico_051.ico"

#include "wx/msw/wx.rc"
и там же для главной формы

Code: Select all

SetIcon(wxICON(aaa));
Все работает. Почему так происходит где ошибка? Путь к ф-лу иконки ставлю один и тот же тут ошибки нет.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

SteelRat
Experienced Solver
Experienced Solver
Posts: 50
Joined: Tue Sep 08, 2009 4:42 pm
Location: Russia, Obninsk

Re: SetIcon в Win для глафной

Post by SteelRat » Fri Aug 05, 2011 6:55 pm

Второй вариант работает потому иконка включена в exe файл. Он ругнулся бы на этапе компиляции если бы не нашёл. А первый может не работать потому что относительный путь к иконке не совпадает с рабочим каталогом программы. И ваще XPM рулит!
Win7/LinuxMint 17, VS2013/C::B, wxWidgets 3.0 x64

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Re: SetIcon в Win для глафной

Post by borr_1 » Sat Aug 06, 2011 6:45 am

SteelRat wrote:А первый может не работать потому что относительный путь к иконке не совпадает с рабочим каталогом программы
Нет путь проверил вдоль и поперек. Ставил даже абсолютный - не помогло.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

SteelRat
Experienced Solver
Experienced Solver
Posts: 50
Joined: Tue Sep 08, 2009 4:42 pm
Location: Russia, Obninsk

Re: SetIcon в Win для глафной

Post by SteelRat » Sat Aug 06, 2011 6:16 pm

А если вот это

Code: Select all

FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("Icon/ico_051.ico"))));
сделать последовательно в несколько строк? Может теряет что...
PS XPM!!! =)
Win7/LinuxMint 17, VS2013/C::B, wxWidgets 3.0 x64

welcom
In need of some credit
In need of some credit
Posts: 3
Joined: Mon Dec 23, 2019 10:35 am

Re: SetIcon в Win для глафной

Post by welcom » Thu Mar 12, 2020 1:57 pm

Добрый день. Заинтересовался wxWidgets, изучаю доступную инфо, и пробую что то повторять. VisualStudio2017+wxWidgets-3.1.3
При попытке повторить код вывода иконки
Заголовочный файл

Code: Select all

#include <wx/wx.h>
class Icon : public wxFrame
{
   public:
	   Icon(const wxString& title);

};
СРР шник

Code: Select all

#include "icons.h"
Icon :: Icon(const wxString &title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250,150))
{
		SetIcon(wxIcon(wxT("res/tn.xpm", wxBITMAP_TYPE_XPM_DATA)));
	    Centre();
}

Code: Select all

bool MyApp::OnInit()   
{
	Icon *icon = new Icon(wxT("Іконка програми")); //обьект окна с иконкой
	icon->Show(true);
}
Пробовал LoadFile("res\\tn.ico", wxBITMAP_TYPE_ICO, 2) получаю пустое окошко и все. Пытался читать доки, иные примеры - результата не получил.
Пробовал и другие форматы (.ico) с разными размерами, ничего не влияет. Программа компилиться без ошибок. Во все директории проекта, дебага, релиза добавил папку res с множеством иконок, в том числе конвертированых в xpm.

Собственно вопрос - что делаю не так? Как вывести нужную иконку на главное окно программы? Может с путями что то не так?
Буду рад помощи или подсказкам. Спасибо.

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 4421
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: SetIcon в Win для глафной

Post by ONEEYEMAN » Fri Mar 13, 2020 2:23 pm

Dobrogo vremeni sutok,
A "minimal sample" rabotaet?

wxInitAllImageHandlers() vyzyvaete?

Chto govorit debugger?

Spasibo.

welcom
In need of some credit
In need of some credit
Posts: 3
Joined: Mon Dec 23, 2019 10:35 am

Re: SetIcon в Win для глафной

Post by welcom » Mon Mar 16, 2020 9:04 am

Благодарю за отзывчивость. Не использовал wxInitAllImageHandlers(); так как в примерах ее не было. Добавил. Иконка все равно не выводиться. В дебаге не смотрел, т.к. не знаю что надо смотреть.
Вот что получается
2020-03-16_103222.jpg
Предполагаю, что файл иконки лежит не там где надо, или неверно указываю пути где то (пробовал разные варианты). Однако, если бы пути были неверными, то по идее VS отреагировал бы ошибкой. Но ошибок компиляции нет.

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: SetIcon в Win для глафной

Post by T-Rex » Mon Mar 16, 2020 11:15 am

Code: Select all

wxIcon FrameIcon;
FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("Icon/ico_051.ico"))));
SetIcon(FrameIcon);
На момент вызова Current Working Directory может не соответствовать директории где лежит исполняемый файл приложения. Попробуй, может, указывать полный путь (сначала получить путь к директории с приложением и добавить суффикс). Для тестов можно просто полный путь пока захардкодить и посмотреть что будет.

Kvaz1r
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 229
Joined: Tue Jun 07, 2016 1:07 pm

Re: SetIcon в Win для глафной

Post by Kvaz1r » Mon Mar 16, 2020 11:53 am

А почему просто не добавить .rc-файл к файлам ресурсов проекта (все равно ведь в VS работаете), в котором указать все нужные пути?

Code: Select all

test ICON "Test.ico"
И в конструкторе просто вызывать

Code: Select all

SetIcon(wxICON(test)); 
.

welcom
In need of some credit
In need of some credit
Posts: 3
Joined: Mon Dec 23, 2019 10:35 am

Re: SetIcon в Win для глафной

Post by welcom » Tue Mar 17, 2020 6:58 am

Благодарю за внимание. С bmp - файлом получилось. С файлами иконками не получилось.

Code: Select all

bool MyApp::OnInit()   
{
	wxIcon FrameIcon;
	FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("res\\tn.bmp"))));
	ShFrame *Frame = new ShFrame(); 
	Frame->SetIcon(FrameIcon);
	Frame->Show(true); 
	return true; 
}
как я понимаю, картинка в этом формате (bmp) теперь должна находиться в папке с программой (екзешником).

Post Reply