AIMP Forum

AIMP для Windows => Дополнения (Plugins / Skins) => Разработка => Topic started by: Aleksoid1978 on August 15, 2012, 10:35:54

Title: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 15, 2012, 10:35:54
Привет.
Вопрос чисто к разработчикам проигрывателя.

Вопрос не по самой программе, а по программированию. Я сам разработчик, думаю не без известного MPC-HC, а в данный момент проигрывателя MPC-BE. Вопрос к разработчикам следующего характера - пытаюсь сделать поддержку кастомного превью в таскбаре и PeekPreview. Делаю с помощью вызова
Code: [Select]
BOOL set = TRUE;
DwmSetWindowAttribute(GetSafeHwnd(), DWMWA_HAS_ICONIC_BITMAP, &set, sizeof(set));
DwmSetWindowAttribute(GetSafeHwnd(), DWMWA_FORCE_ICONIC_REPRESENTATION, &set, sizeof(set));

после этого как положено обрабатываю сообщения
Code: [Select]
WM_DWMSENDICONICTHUMBNAIL
WM_DWMSENDICONICLIVEPREVIEWBITMAP

Проблема именно в обработке/рисовании для WM_DWMSENDICONICLIVEPREVIEWBITMAP. Я смотрю у вас это реализовано - и вопрос, можно ли как-то обойти и не рисовать самому для live preview, или это обязательно. Если обязательно - может дадите совет как это корректно сделать ?
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Artem on August 15, 2012, 19:38:39
Приветствую. Очень рад видеть вас на нашем форуме.

Теперь по делу, я обрабатываю только WM_DWMSENDICONICTHUMBNAIL сообщение, WM_DWMSENDICONICLIVEPREVIEWBITMAP уходит в дефолтный обработчик WndProc окна.
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 16, 2012, 02:42:40
Приветствую. Очень рад видеть вас на нашем форуме.

Теперь по делу, я обрабатываю только WM_DWMSENDICONICTHUMBNAIL сообщение, WM_DWMSENDICONICLIVEPREVIEWBITMAP уходит в дефолтный обработчик WndProc окна.

Спасибо за отчет - а теперь главный вопрос, как я могу обрабатывать только WM_DWMSENDICONICTHUMBNAIL, а сообщение WM_DWMSENDICONICLIVEPREVIEWBITMAP не обрабатывать вообще. Я так пытался делать - что-то ничего не получалось. У вас кстати тоже как-то не так - когда Peek preview часики крутятся, такое когда DWM manager не получает битмап для live preview.
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Artem on August 16, 2012, 09:24:48
Quote
Спасибо за отчет - а теперь главный вопрос, как я могу обрабатывать только WM_DWMSENDICONICTHUMBNAIL, а сообщение WM_DWMSENDICONICLIVEPREVIEWBITMAP не обрабатывать вообще.

Просто отдать обработку этого сообщения в DefWndProc. Вообще рекомендую почитать MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd938874(v=vs.85).aspx

Quote
У вас кстати тоже как-то не так - когда Peek preview часики крутятся, такое когда DWM manager не получает битмап для live preview.

Да, я знаю. Но здесь проблема еще в том, что кнопку на панели задач создает другое окно (не главное окно) с нулевыми размерами.
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 16, 2012, 09:59:27
Просто отдать обработку этого сообщения в DefWndProc. Вообще рекомендую почитать MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd938874(v=vs.85).aspx

Ссылку конечно же читал. Дело в другом - у меня MFC, там идет обработка сообщений вот так :
Code: [Select]
BEGIN_MESSAGE_MAP
..
ON_MESSAGE(WM_DWMSENDICONICTHUMBNAIL, OnDwmSendIconicThumbnail)
ON_MESSAGE(WM_DWMSENDICONICLIVEPREVIEWBITMAP, OnDwmSendIconicLivePreviewBitmap)

сами функции обьявлены так:
Code: [Select]
afx_msg LRESULT OnDwmSendIconicThumbnail(WPARAM, LPARAM);
afx_msg LRESULT OnDwmSendIconicLivePreviewBitmap(WPARAM, LPARAM);


вот и как в таком случае - не обрабатывать сообщение а передать его в DefWndProc ?
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Artem on August 16, 2012, 10:05:57
Никогда не работал с MFC... Если не назначать обработчик для сообщения?

По идее, в обработчике для сообщения можно напрямую обратиться к DefWndProc, что-то в духе:

Code: [Select]
return DefWindowProc(WndHandle, WM_DWMSENDICONICLIVEPREVIEWBITMAP, WPARAM, LPARAM);
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 16, 2012, 10:14:54
Никогда не работал с MFC... Если не назначать обработчик для сообщения?

По идее, в обработчике для сообщения можно напрямую обратиться к DefWndProc, что-то в духе:

Code: [Select]
return DefWindowProc(WndHandle, WM_DWMSENDICONICLIVEPREVIEWBITMAP, WPARAM, LPARAM);

Привет. В том то и дело - не назначить не вариант, сделать как ты написал - тоже не прокатывает. Такое чувство что оно обязательно. Ну да ладно - уже сделал нормальный функционал для рисования в Peek Preview.

Но все равно - спасибо за помощь :)
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Artem on August 16, 2012, 10:16:13
Если не секрет - почему не вариант? Что происходит в этом случае?
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 16, 2012, 10:27:21
Если не секрет - почему не вариант? Что происходит в этом случае?

Происходит такое же как будто неверные параметры подали в DwmSetIconicLivePreviewBitmap, или просто в начале обработки сделали return 0;
Выглядит это так, визуально - рамка окна, белый фон и курсор мыши в виде - ждущий.
Вот скрин:
(http://i015.radikal.ru/1208/fe/9b9148e0a7d6t.jpg) (http://radikal.ru/F/i015.radikal.ru/1208/fe/9b9148e0a7d6.png.html)
Title: Re: Вопрос по AIMP + Win7 - обращение к разработчикам.
Post by: Aleksoid1978 on August 16, 2012, 10:42:14
У меня еще один вопрос - а как вы для TaskBar превью сделали, что не заполняете полностью весь RECT, который передается в сообщение на WM_DWMSENDICONICTHUMBNAIL. Я пытался так делать - но функция DwmSetIconicThumbnail, если ей подать размеры отличные от тех что передались в параметре LPARAM, возвращала ошибку.

P.S. - Вопрос снимается, все работает - главное не больше.