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 »

Проблема с 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 »

Второй вариант работает потому иконка включена в 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 »

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 »

А если вот это

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: 8
Joined: Mon Dec 23, 2019 10:35 am

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

Post by welcom »

Добрый день. Заинтересовался 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: 7449
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post by ONEEYEMAN »

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: 8
Joined: Mon Dec 23, 2019 10:35 am

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

Post by welcom »

Благодарю за отзывчивость. Не использовал wxInitAllImageHandlers(); так как в примерах ее не было. Добавил. Иконка все равно не выводиться. В дебаге не смотрел, т.к. не знаю что надо смотреть.
Вот что получается
2020-03-16_103222.jpg
Предполагаю, что файл иконки лежит не там где надо, или неверно указываю пути где то (пробовал разные варианты). Однако, если бы пути были неверными, то по идее VS отреагировал бы ошибкой. Но ошибок компиляции нет.
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

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

Post by T-Rex »

Code: Select all

wxIcon FrameIcon;
FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("Icon/ico_051.ico"))));
SetIcon(FrameIcon);
На момент вызова Current Working Directory может не соответствовать директории где лежит исполняемый файл приложения. Попробуй, может, указывать полный путь (сначала получить путь к директории с приложением и добавить суффикс). Для тестов можно просто полный путь пока захардкодить и посмотреть что будет.
Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 357
Joined: Tue Jun 07, 2016 1:07 pm

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

Post by Kvaz1r »

А почему просто не добавить .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: 8
Joined: Mon Dec 23, 2019 10:35 am

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

Post by welcom »

Благодарю за внимание. С 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