Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 6
1

Не получается установить иконку для диалогового окна

22.01.2014, 12:50. Показов 4380. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Имеется два диалоговых окна. Пытаюсь установить для них иконку (256х256, формат .ico)
C++
1
2
3
4
5
        HANDLE hIco = LoadIcon ( hinstance, L"images\logo.ico)"); // Первый способ
        SendMessage( window, WM_SETICON, ICON_BIG, (LPARAM)hIco);
        SendMessage( window, WM_SETICON, ICON_SMALL, (LPARAM)hIco);
 
        Static_SetIcon ( window, LoadIcon ( hinstance, L"images\logo.ico)")); // Второй способ
Не получается. На картинках видно в деталях.

P.S.: Кстати, есть еще одна проблема. Когда открывается второе диалоговое окно (а первое закрывается) вообще исчезает внизу на панели задач иконка программы. Т.е. я могу только альт табом ее развернуть. Вот такие пироги...

Помогите пожалуйста, буду благодарен.
Миниатюры
Не получается установить иконку для диалогового окна   Не получается установить иконку для диалогового окна   Не получается установить иконку для диалогового окна  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2014, 12:50
Ответы с готовыми решениями:

Установить фон диалогового окна
Добрый день! Я пишу игру пинг-понг. Хочу, чтобы игровое поле (диалоговое окно) было зеленого...

Как присвоить переменную одного диалогового окна к переменной другого диалогового окна? (ООП)
Вот у меня есть результат вычисления и я его присваиваю переменной в первом диалоговом окне, но я...

Анимация для диалогового окна
Хочу что бы диалоговое окно не просто появлялось, что бы или красива как из точки появлялось изи...

Проблема с методом OnOk для диалогового окна
Привет всем. Метод OnOk для диалогового окна свой радной. Я использовала OK для вызыва другого...

6
Заблокирован
22.01.2014, 13:35 2
Цитата Сообщение от ArchSpektrum Посмотреть сообщение
SendMessage( window, WM_SETICON, ICON_SMALL, (LPARAM)hIco);
Это ты какому окну отправляешь? Надо отправлять главному окну, а не HWND диалога.
Как ты и где создаёшь диалоговые окна?
Цитата Сообщение от ArchSpektrum Посмотреть сообщение
Когда открывается второе диалоговое окно (а первое закрывается)
Как ты его закрываешь?
Лучше полный код давай...
0
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 6
22.01.2014, 14:28  [ТС] 3
Вот почти полный код (без лишнего мусора кинул)
Диалоговые окна создаются в среде Visual Studio и сами добавляются в ресурсы.
HWND window; // это и есть дескриптор главного окна. Если я не ошибаюсь.
Второе окно закрываю по нажатию на IDC_FONE.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "Window.h"
#include <iostream>
 
using namespace std;
 
HINSTANCE hinstance;
int COP = 0; // global counter of pages
 
            
INT Window :: Run ( HINSTANCE hinstance, HWND window )
{
        
    return DialogBox ( hinstance, MAKEINTRESOURCE ( IDD_KURSUCH ), NULL, DlgProc );
 
} 
BOOL Window :: DlgProc ( HWND window, UINT message, WPARAM wParam, LPARAM lParam ) // Оконная процедура
{
        
    
    switch ( message )
    {
        HANDLE_MSG ( window, WM_INITDIALOG, Window :: OnInitDialog);
        HANDLE_MSG ( window, WM_CLOSE, Window :: OnClose );
        HANDLE_MSG ( window, WM_COMMAND, Window :: OnCommand );
        
    }
    
    return FALSE;
 
}
void Window :: OnClose ( HWND window ) // Обработчик закрытия окна
{
    EndDialog ( window, NULL );
}
BOOL Window :: OnInitDialog ( HWND window, HWND hwndFocus, LPARAM lParam ) // Данные, которые поступают в оконную процедуру при инициализации диалогового окна
{
    
        HANDLE hIco = LoadIcon ( hinstance, L"images\logo.ico)");
        SendMessage( window, WM_SETICON, ICON_BIG, (LPARAM)hIco);
        SendMessage( window, WM_SETICON, ICON_SMALL, (LPARAM)hIco);
 
        Static_SetIcon ( window, LoadIcon ( hinstance, L"images\logo.ico)"));
}
void Window :: OnCommand ( HWND window, int id, HWND hControl, UINT Notify ) // Notify уведомление в котором написано BN (ButtonNotify)
{
switch ( id )
{
case IDC_FONE:  // Изображение в самом начале "Отгадайте картинку!"
    
    COP = 0; // Обнуляем счетчик страниц
    
    SendDlgItemMessage( window, IDC_PROGRESS_BAR, PBM_SETRANGE, 0, MAKELPARAM ( 0, 15 ) );  // Утановили шкалу прогрес бара
    
    EndDialog ( window, 0 ); // Закрытие IDD Kursach
    DialogBox ( hinstance, MAKEINTRESOURCE ( IDD_GAME ), window, DlgProc ); // Запуск окна с игрой
                                       
        
    break;
}
}
Добавлено через 8 минут
Вот как создается само окно:
Кликните здесь для просмотра всего текста
Не получается установить иконку для диалогового окна

После чего подключаю #include "resource.h" и работаю с интерфейсом.
0
Заблокирован
22.01.2014, 16:43 4
Нде... чё это за код - то такой? Где WinMain ? Или это MFC?
в любом случае твой window - это не тот, который нужен, а именно диалогового окна. Я б на твоём месте начал бы изучать чистый WinApi для начала, прежде чем лезть в непонятный тёмный лес MFC, где от тедя всё скрыто...
0
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 6
22.01.2014, 19:47  [ТС] 5
А что не понятного? От чистого это практически тот же чистый WinApi. Просто вместо WM_COMMAND\WM_ITINDIALOG,WM_CLOSE и т.д. используется OnClose, OnInitDialog и OnCommand. Что тут такого?
0
2836 / 1645 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
22.01.2014, 20:43 6
Если что-то не работает, проверь что ли первым делом, что функции возвращают. LoadIcon, например.
Цитата Сообщение от ArchSpektrum Посмотреть сообщение
C++
1
LoadIcon ( hinstance, L"images\logo.ico)")
А дальше параметры этой функции проверь.
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
23.01.2014, 06:06 7
1) Сдается мне, что весь "косяк" заключается только в том, что в пути нужно указывать ДВА слэша.
2) И почему в приведенном коде закрывающая скобка стоит в кавычках??? Конечный вариант должен выглядеть так:
C++
1
2
3
4
HANDLE hIco = LoadIcon (hinstance, L"images\\logo.ico")); // Первый способ
SendMessage(window, WM_SETICON, ICON_BIG, (LPARAM)hIco);
SendMessage(window, WM_SETICON, ICON_SMALL, (LPARAM)hIco);
Static_SetIcon(window, LoadIcon(hinstance, L"images\\logo.ico")); // Второй способ
Добавлено через 18 минут
Пропустил в первой строке лишнюю закрывающую скобку
2
23.01.2014, 06:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2014, 06:06
Помогаю со студенческими работами здесь

Установить иконку для приложения
существует ли такой код который позволяет присоедиить код к программе? как это делать?Или это надо...

Установить иконку для файла
Подскажите пожалуйста, как для выбранного файла поменять иконку на свою, которая находится в...

Что лучше использовать для кастомного диалогового окна?
Добрый день. При нажатии на определенную кнопку, в моей программе должно будет выводиться...

Приложение для выбора шрифтов из специального диалогового окна
Помогите пожалуйста! Нужно создать приложение, делающее возможным выбор шрифтов из специального...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru