Mr. Tomay Ответов: 2

Функции Beep и MessageBeep


Для ValidationError, обычно мы используем MessageBeep функция.
Но к сожалению MessageBeep является асинхронным (после постановки звука в очередь функция MessageBeep возвращает управление вызывающей функции и воспроизводит звук асинхронно.).

Где Beep функция синхронная (генерирует простые звуковые сигналы на динамике. Функция является синхронной; она выполняет предупреждающее ожидание и не возвращает управление вызывающему объекту до тех пор, пока звук не закончится.).

Если вы сделаете CEdit проверяющий элемент управления для численных символов с MessageBeep функция для ValidationError, и когда пользователь все еще нажимает не те ключевые символы, поэтому звук не будет воспроизводиться.
Beep это предпочтительная функция в данной ситуации.

Вопрос: что такое эквивалент Beep функциональные параметры (DWORD dwFreq и DWORD dwDuration) этого кода:
MessageBeep(0xFFFFFFFF); // A simple beep. If the sound card is not available, the sound is generated using the speaker.

Sergey Alexandrovich Kryukov

Что плохого в асинхронном звуковом сигнале?
--СА

Mr. Tomay

когда пользователь все еще нажимает не те ключевые символы, поэтому звук не воспроизводится.

Albert Holguin

Почему бы вам просто не прослушать оба и не приблизить параметры Beep() на слух? Если вы подойдете к ним достаточно близко, я уверен, что пользователь все равно не сможет их различить. Весь смысл звукового сигнала заключается в том, чтобы просто предупредить о проблеме, так что пока он четко слышен, это должно быть важным моментом.

Mr. Tomay

На слух вы говорите: это сложно (частота звука, в герцах. Этот параметр должен находиться в диапазоне от 37 до 32 767 (от 0x25 до 0x7FFF). ).
Я уверен, что есть способ раскрыть секрет Microsoft (возможно, это отладка MessageBeep(0xFFFFFFFF); функция), я не знаю!

Я отладил пример MFC с элементом управления edit с помощью Флаг Номера Проверен, и сделать точку останова на MessageBeep, поэтому, когда я ввожу некоторые нечисловые ключи char, вызов MessageBeep функция никогда не вызывается, но я слышу звуковой сигнал!!!

2 Ответов

Рейтинг:
12

Addy Tas

Привет,

Из следа я не могу напрямую понять, просто ли вы недовольны частотой синхронного вызова и/или вы не можете заставить асинхронность работать. Если это так, то я предлагаю вам опубликовать нерабочий код.

В любом случае, что может представлять для вас интерес, так это проверить третий вариант: PlaySound[^]

Это может просто сработать для вас.

Ура, АТ


Mr. Tomay

Потрясающе и очень полезно
Спасибо ;)

Рейтинг:
0

neelbhai

////////////////////Звук.h
#ПРАГМА один раз
классный звук
{
общественный:
Звук();
~Звук();
пустота делает звук();
BOOL Quit = false;
BOOL mkSound = false;
};

////////////Sound.cpp
код #include "файл stdafx.ч"
#включить "Sound.h"

UINT SoundThread(LPVOID pParam)
{
Sound * mSound = (Sound*)pParam;
while(!mSound->Quit)
{
if (mSound->mkSound)
{
Звуковой сигнал(400, 100);
mSound->mkSound = false;
}
}
ExitThread(0);
}
Звук::Звуковая()
{
Функцию afxbeginthread(SoundThread, это);
}
void Sound::MakeSound()
{
mkSound = true;
}

Звук::~Звук()
{
Бросить = истина;
}


//////////////////основное приложение
#включить "Sound.h"
тап_п()
{
Звук mSound;

а(1)
{
mSound.MakeSound();
///сделай что-нибудь полезное
Сон(500);
}
возвращает 0;
}


Dave Kreskowiak

Необъяснимый, плохо отформатированный дамп кода-это не ответ.