Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рамка и меню как в iTunes 
:(
    Опции темы
X-3R1
Дата 7.5.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 28.4.2007

Репутация: нет
Всего: 2



Каким образом можно реализовать рамку как в iTunes (не стандартная Windows), вынесение меню в заголовок, а также работа с самим заголовком (изменение цвета, и кнопки "не совсем родные"). GUI реализую при помощи Qt4, но есть подозрения, что подобные вещи делаются на уровне WinAPI. 

Если же делаю через Qt4, убиранием бордера и созданием собственного, то пропадает взаимодействие с оконным менеджером (такое как разворачивание на полный экран (без перекрытия панели с "Пуск"), изменение размеров и т.п.).  В iTunes -- эти все действия присутствуют, что и наводит мысли на работу с окном (собственный стиль бордера окна) на уровне ОС.

user posted image


PM MAIL   Вверх
GremlinProg
Дата 7.5.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(X-3R1 @  7.5.2010,  15:44 Найти цитируемый пост)
В iTunes -- эти все действия присутствуют, что и наводит мысли на работу с окном (собственный стиль бордера окна) на уровне ОС.

здесь простое перекрытое окно со стилями:
WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE | WS_MINIMIZEBOX | WS_MAXIMIZEBOX

iTunes удаляет обязательный заголовок окна путем перехватывания WM_NCCALCSIZE,
выглядит это примерно так:
Код

    switch( uMsg ){
        ...
        case WM_NCCALCSIZE:{
            LPRECT lpRc;
            //
            lpRc        = ((LPNCCALCSIZE_PARAMS)lParam)->rgrc;
            lpRc->top    -= ::GetSystemMetrics(SM_CYCAPTION);
            break;
        }
        ...
    }
return::DefWindowProc( hwnd, uMsg, wParam, lParam );

а все остальные компоненты реализует обычными кнопками (BUTTON)

Добавлено через 6 минут и 11 секунд
т.е. это можно делать хоть в QT, хоть в Delphi


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 7.5.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



таскать окно за такой заголовок тоже довольно просто:
Код

    switch( uMsg ){
    ...
        case WM_NCHITTEST:{
            RECT rw;
            INT x, y, h;
            //
            x    = (SHORT)LOWORD(lParam);
            y    = (SHORT)HIWORD(lParam);
            h    = ::GetSystemMetrics(SM_CYCAPTION);
            ::GetWindowRect( hwnd, &rw );
            if( (x > rw.left + 2) && (x < rw.right - 2) ){
                if( (y > rw.top + 2) && (y < rw.top + h) ){
                    return HTCAPTION;
                }
            }
            break;
        }
    ...
    }
return ::DefWindowProc( hwnd, uMsg, wParam, lParam );




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
X-3R1
Дата 7.5.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 28.4.2007

Репутация: нет
Всего: 2



спасибо, буду разбираться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.