Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[VC#] Работа с окнами - Стили, визуал.эфф... (Работа с чужими окнами)

23K
28 октября 2007 года
MuForum
9 / / 11.03.2007
Доброе время суток!

# Задача: Написать программу, которая будет перехватывать клавиши и при нажатие на клавишу 'F11' - менять режим окна 'FullScreen' <> 'WindowMode'; 'F12' - Show/Hide окно игры.

# Решение: Перехват клавиш я осуществил, проблема заключается в другом: Если изначально запускать игру в режиме 'WindowMode', то если скрыть('Hide') игру('F12'), можно свободно работать с другими приложениями, то есть всё отлично работает, но если изначально запустить игру в режиме 'FullScreen', затем скрыть('Hide') игру и попытаться нажать куда-либо вне окна, то окно тут же разворачивается(3 раза так и игра закрывается). Как решить проблему не знаю, уже достаточно много наигрался и начитался, решить не могу. (Пробовал играться и с SetWindowPos и т.д. не помогает, или я что-то не понимаю и, следовательно, не доделываю)

Код:
// CDS_TEST = '0x02'
// CDS_FULLSCREEN = '0x04'
// GWL_STYLE = '-16'
...
                        if (fullmode1 == false) // Переделываем окно в режим 'FullScreen' - Тут всё нормально.
                        {
                            ...
                            SetWindowLong((IntPtr)hWnd2, (-16), 0x10000000); // WS_VISIBLE = '0x10000000'
                            DEVMODE dm = new DEVMODE();
                            dm.dmBitsPerPel = Convert.ToSByte(CD);
                            dm.dmPelsWidth = CorX;
                            dm.dmPelsHeight = CorY;
                            dm.dmDisplayFrequency = RR;
                            if (ChangeDisplaySettings(ref dm, 0x02 | 0x04) != 0) ChangeDisplaySettings(ref dm, 0x04);
                            MoveWindow((IntPtr)hWnd2, 0, 0, CorX, CorY, true);
                            SetForegroundWindow(hWnd2);
                            ...
                        }
                        else // Переделываем окно в режим 'WindowMode' - Тут всё нормально.
                        {
                            ...
                            SetWindowLong((IntPtr)hWnd2, (-16), 0x00000000 | 0x10000000 | 0x00C00000 | 0x00040000 | 0x00080000);
                            MoveWindow((IntPtr)hWnd2, 0, (-13), CorX + 5, CorY + 10, true);
                            SetWindowPos((IntPtr)hWnd2, (IntPtr)(-1), 0, (-13), CorX + 5, CorY + 10, 0x0001 | 0x0040);
                            SetForegroundWindow(hWnd2);
                            ...
                        }
......
                    if (fullmode2 == true)
                    {
                        if (IsWindowVisible(hWnd2) != 0) // Сворачиваем окно - [color=blue]вот тут проблема![/color]
                        {
                            // SWP_NOACTIVATE = '0x0010'
                            // SWP_HIDEWINDOW = '0x0080'
                            // SWP_FRAMECHANGED = '0x0020'
                            SetWindowPos((IntPtr)hWnd2, (IntPtr)1, 0, (-13), CorX + 5, CorY + 10, 0x0010 | 0x0080 | 0x0020);
                        }
                        else // Разворачиваем окно - Тут всё нормально.
                        {
                            // SWP_NOSIZE = '0x0001'
                            // SWP_SHOWWINDOW = '0x0040'
                            SetWindowPos((IntPtr)hWnd2, (IntPtr)(-1), 0, (-13), CorX + 5, CorY + 10, 0x0001 | 0x0040);
                            SetForegroundWindow(hWnd2);
                        }
                    }
...
9.7K
28 октября 2007 года
DaemonDZK
59 / / 08.11.2005
А с чего ты взял, что например у Direct3D приложения работающего в Fullscreen есть окно которое можно ресайзить. Насколько можно судить например по играм в которых есть возможность переключаться в окно из Fullscreen и обратно, эта операция реализована реинициализацией устройства Direct3D, и полным перестроением текущей сцены на новом.
23K
28 октября 2007 года
MuForum
9 / / 11.03.2007
#2, DaemonDZK - Вы не могли бы более развёрнуто написать + напривить немного, чтобы знал хоть где и что искать в google =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог