Page 1 of 1

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

Posted: Fri Aug 05, 2011 1:03 pm
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));
Все работает. Почему так происходит где ошибка? Путь к ф-лу иконки ставлю один и тот же тут ошибки нет.

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

Posted: Fri Aug 05, 2011 6:55 pm
by SteelRat
Второй вариант работает потому иконка включена в exe файл. Он ругнулся бы на этапе компиляции если бы не нашёл. А первый может не работать потому что относительный путь к иконке не совпадает с рабочим каталогом программы. И ваще XPM рулит!

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

Posted: Sat Aug 06, 2011 6:45 am
by borr_1
SteelRat wrote:А первый может не работать потому что относительный путь к иконке не совпадает с рабочим каталогом программы
Нет путь проверил вдоль и поперек. Ставил даже абсолютный - не помогло.

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

Posted: Sat Aug 06, 2011 6:16 pm
by SteelRat
А если вот это

Code: Select all

FrameIcon.CopyFromBitmap(wxBitmap(wxImage(wxT("Icon/ico_051.ico"))));
сделать последовательно в несколько строк? Может теряет что...
PS XPM!!! =)

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

Posted: Thu Mar 12, 2020 1:57 pm
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.

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

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

Posted: Fri Mar 13, 2020 2:23 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
A "minimal sample" rabotaet?

wxInitAllImageHandlers() vyzyvaete?

Chto govorit debugger?

Spasibo.

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

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

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

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

Code: Select all

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

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

Posted: Mon Mar 16, 2020 11:53 am
by Kvaz1r
А почему просто не добавить .rc-файл к файлам ресурсов проекта (все равно ведь в VS работаете), в котором указать все нужные пути?

Code: Select all

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

Code: Select all

SetIcon(wxICON(test)); 
.

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

Posted: Tue Mar 17, 2020 6:58 am
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) теперь должна находиться в папке с программой (екзешником).