Is there a way to check when mouse is above standard window control buttons (close, minimize etc)?
这段代码不是我的。我通过上面的链接,根据我的要求做了一些改动。我试图编写鼠标输入和输入鼠标离开事件最小化& c#中的表格关闭按钮?
SpeechSynthesizer reader;
internal const int WM_NCMOUSEMOVE = 0x00A0;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCMOUSEMOVE)
{
//Mouse over on Minimize button
if ((int)m.WParam == 0x8)
{
reader = new SpeechSynthesizer();
reader.SpeakAsync("Minimize button");
}
//Mouse over on Maximize button
if ((int)m.WParam == 0x9)
{
reader = new SpeechSynthesizer();
reader.SpeakAsync("Maximize button");
}
//Mouse over on Close button
if ((int)m.WParam == 0x14)
{
reader = new SpeechSynthesizer();
reader.SpeakAsync("Close button");
}
}
base.WndProc(ref m);
}
我的问题:
请帮忙。
答案 0 :(得分:3)
您的WndProc
应该仅仅翻译Win32消息并将它们分发给您的程序逻辑。例如:
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCMOUSEMOVE)
{
//Mouse over on Minimize button
if ((int)m.WParam == 0x8)
{
Speak("Minimize button");
}
else if ((int)m.WParam == 0x9)
{
Speak("Maximize button");
}
else ...
}
...
}
private SpeechSynthesizer _reader;
void Speak(string toSpeak)
{
if (_reader == null)
{
_reader = new SpeechSynthesizer();
}
_reader.SpeakAsync(toSpeak);
}
我不知道这个类的API,所以我不知道我是否正确使用它,check the manual yourself。您可以在处理表单时处置_reader
。
您还可以使用变量,常量,枚举,资源或任何您喜欢的内容替换字符串,您可以将if
换成switch
,换句话说:这不是副本&安培;粘贴代码,但我希望你能抓住一般的想法。
好奇,你在建造什么?操作系统中是否已存在此功能?如果每个程序都必须自己实现可访问性,那将是一种耻辱。