Сделай Сам Свою Работу на 5

Параметры: dwFreq - частота звука в герцах, dwDuration – длительность звука в миллисекундах.





4. Функция FlashWindow. Если требуется обратить внимание пользователя на определенное ок­но, то можно несколько раз изменить подсветку окна или его пикто­граммы. Для этого используют функцию Flash Window, которая за один вызов один раз изменяет подсветку указанного окна:

BOOL FlashWindow(

HWND hwnd, // Дескриптор подсвечиваемого окна

BOOL bInvert); // Параметр подсветки

Если параметр bInvert=TRUE, окно меняет подсветку. Если же bInvert=FALSE, окно только возвращается к исходному состоянию. При подсветке неактивное окно может принять внешний вид актив­ного окна, но не получит фокуса ввода.

Если окно было активно до вызова FlashWindow, возвращается значение TRUE, иначе - FALSE.

Пример.После нажатия левой клавиши мыши над окном Hwnd 5 раз изменить подсветку неактивного этого окна. Ниже приведен фрагмент оконной функции:

case WM_LBUTTONDOWN:

{ FlashWindow(Hwnd, TRUE);

for (int i=0; i<9; i++)

{ for (long j=0;j<1e7;j++);

FlashWindow(Hwnd, TRUE);

}

break;

}

После нажатия левой клавиши мыши окно Hwnd примет вид активного окна: FlashWindow(Hwnd, TRUE);

При i=0 выполняется цикл for (long j=0;j<1e7;j++); который дает задержку времени, после чего окно станет неактивным. При i=1 после паузы окно станет активным, а при i=2 после паузы ок­но снова станет неактивным... Таким образом, окно Hwnd 5 раз изм




Задания

№ вар Стиль окна, реагирует на щелчок мыши Исходное положение и размеры окна Действия при нажатии левой (правой) кнопки мыши в рабочей области окна
Левая кнопка Правая кнопка
Главное, одинарный Во весь экран Вывод информационного сообщения об имени класса окна Окно мигает 3 раза
Временное, двойной Задать произвольно Окно перемещается в произвольное место экрана (рабочей области) Выдается звуковой сигнал частотой 1500 Гц
Дочернее, одинарный В центре экрана, 1/16 размера экрана Окно увеличивается в размерах в 2 раза   Окно возвращается в исходное состояние
Главное, двойной Во весь экран Выдается звуковой сигнал частотой 1500 Гц Вывод информационного сообщения о своем заголовке
Временное, одинарный В центре экрана, 1/9 размера экрана Окно возвращается в исходное состояние Окно сворачивается в пиктограмму
Дочернее, двойной В левом верхнем углу экрана, 1/16 размера экрана Окно перемещается по углам экрана по часовой стрелке   Окно мигает 5 раз
Главное, одинарный Во весь экран Окно мигает 4 раза Выдается звуковой сигнал частотой 1000 Гц
Временное, двойной В центре экрана, 1/16 размера экрана Окно перемещается к левому краю экрана Окно возвращается в исходное состояние
Дочернее, одинарный В правом верхнем углу экрана, 1/9 размера экрана Окно перемещается в противоположный угол экрана (рабочей области)   Окно возвращается в исходное состояние
Главное, двойной Во весь экран Окно мигает 3 раза, затем сворачивается в пиктограмму Окно возвращается в исходное состояние
Временное, одинарный В левом верхнем углу экрана, 1/16 размера экрана Окно перемещается по периметру экрана по часовой стрелке на 100 пикселей Вывод информационного сообщения об имени оконной функции
Дочернее, двойной В центре экрана, 1/9 размера экрана, окно невидимое Окно становится видимым, выдается звуковой сигнал частотой 500 Гц   Окно возвращается в исходное состояние
Главное, одинарный Во весь экран Вывод информационного сообщения о стиле окна Окно сворачивается в пиктограмму
Временное, двойной Задать произвольно Окно мигает 4 раза Окно перемещается так, чтобы курсор мыши находился в центре рабочей области окна
Дочернее, одинарный Задать произвольно Окно перемещается в произвольное место экрана (рабочей области)   Выдается звуковой сигнал частотой 1500 Гц
Главное, одинарный Во весь экран Вывод информационного сообщения о стиле окна Выдается звуковой сигнал частотой 1000 Гц
Временное, двойной Задать произвольно Окно увеличивается в размерах в 1,2 раза Окно уменьшается в размерах в 1,2 раза
Дочернее, одинарный В левом нижнем углу экрана, 1/16 размера экрана Окно перемещается из заданного угла вправо Окно возвращается в исходное состояние
Главное, двойной Во весь экран Окно мигает 4 раза Вывод информационного сообщения о своем заголовке
Временное, одинарный В центре экрана, 1/16 размера экрана Окно возвращается в исходное состояние Окно перемещается к правому краю экрана
Дочернее, двойной Задать произвольно Окно перемещается в произвольное место экрана (рабочей области) Выдается звуковой сигнал частотой 1500 Гц

 






Дополнительная информация

 

Почему Unicode?

Разрабатывая приложение, Вы определенно должны использовать преимущества Unicode. Даже ссли Вы пока не собираетесь локализовать программный продукт, разработка с прицелом на Unicode упростит эту задачу в будущем. Unicode также позволяет:

· легко обмениваться данными на разных языках;

· распространять единственный двоичный EXE- или DLL-файл, поддерживающий все языки;

· увеличить эффективность приложений (об этом мы поговорим чуть позже).

Unicode- и ANSI-функции в Windows

Например, существует две функции CreateWindowEx: одна принимает строки в Umcode, другая — в ANSI, но прототипы этих функций чуть-чуть отличаются

HWND WINAPI CreateWindowExW(
DWORD dwExStyle,
PCWSTR pClassName,
PCWSTR pWindowName,
DWORD dwStyle,
int X,
int Y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hHenu,
HINSTANCE hInstance,
PVOID pParam);

HWND WINAPI CreatcWindowExA(
DWORD dwExStyle,
PCSTR pClassName,
PCSTR pWindowName,
DWORD dwStyle,
int X
int Y,
int nWidth,
inT nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCF hInstance,
PVOID pParam);

CteateWindowExW — это Unicode-версия Буква W в конце имени функции — аббpевиатуpa слова wide (широкий) Символы Unicode занимают по 16 битов каждый, поэтому их иногда называют широкими символами (wide characters) Буква А в конце имени CreateWindoivExA указывает, что данная версия функции принимаетАNSI-строки

Но обычно CreateWmdowExW или CreateWindowExA напрямую не вызывают А обращаются к CreateWindowEx — макросу, определенному в файле WmUser.h

#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // UNICODE

Какая именно версия CreateWindowEx будет вызвана, зависит от того, определен ли UNICODE в период компиляции. Перенося 1б-разрядное Windows-приложение на платформу Win32. Вы, вероятно, не станете определять UNICODE. Тогда все вызовы CreateWindowEx будут преобразованы в вызовы CreateWindowExA — ANSI-версии функции. И перенос приложения упростится, ведь 16-разрядная Windows работает толь-
ко с ANSI-версией CreateWindowEx.

Разрабатывая DLL, которую будут использовать и другие программисты, предусматривайте в ней по две версии каждой функции — для ANSI и для Unicode. В ANSI-версии просто выделяйте память, преобразуйте строки и вызывайте Unicode-версию той же функции. (Этот процесс я продемонстрирую позже.)

Последующий вызов GetLastError дает ERRORCALL_NOT_IMPLEMENTED. Должным образом действуют только ANSI-версии функций. Ваше приложение не будет работать, если в скомпилированном коде присутствуют вызовы "широкосимвольных" функций.

Некоторые функции Windows API (например, WinExec или OpenFile) существуют только для совместимости с 16-разрядными программами, и их надо избегать. Лучше заменить все вызовы WinExec и OpenFile вызовами CreateProcess и CreateFile соответственно. Тем более, что старые функции просто обращаются к новым. Самая серьезная проблема с ними в том, что они не принимают строки в Unicode, при их вызове Вы должны передавать строки в ANSI. С другой стороны, в Windows 2000 у всех новых или пока не устаревших функций обязательно есть как ANSI-, так и Unicode-версия.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.