• .按钮和输入焦点


    我在本章前面已经提到过,当用鼠标单击按钮、复选框、单选框和拥有者绘制按钮时,它们接收到输入焦点。这些控件使用文字周围的虚线来表示它拥有了输入焦点。当子窗口控件得到输入焦点时,其父窗口就失去了输入焦点;所有的键盘输入都进入子窗口控件,而不会进入父窗口中。但是,子窗口控件只对Spacebar键作出回应,此时Spacebar键的作用就如同鼠标按键一样。这种情形导致了一个明显的问题:您的程序失去了对键盘处理的控件。让我们看看我们对此能做一些什么。

    我在第六章中已经提到过,当Windows将输入焦点从一个窗口(例如一个父窗口)转换到另一个窗口(例如一个子窗口控件)时,它首先给正在失去输入焦点的窗口发送一个WM_KILLFOCUS消息,wParam参数是接收输入焦点的窗口的句柄。然后,Windows向正在接收输入焦点的窗口发送一个WM_SETFOCUS消息,同时wParam是还在失去输入焦点的窗口的句柄(在这两种情况中,wParam值可能为NULL,它表示没有窗口拥有或者正在接收输入焦点)。

    通过处理WM_KILLFOCUS消息,父窗口可以阻止子窗口控件获得输入焦点。假定数组hwndChild包含了所有子窗口的窗口句柄(它们是在呼叫CreateWindow来建立窗口的时候储存到数组中的)。 NUM是子窗口的数目:


    case        WM_KILLFOCUS :                              for (  i = 0 ; i < NUM ; i++)                                                     if (hwndChild [i] == (HWND) wParam)                              {                                                             SetFocus (hwnd) ;                                                             break ;                              }                       return 0 ;          

    在这段程序代码中,当父窗口获知它正在失去输入焦点,而让它的某个子窗口得到输入焦点时,它将呼叫SetFocus来重新取得输入焦点。

  • 相关阅读:
    Silverlight的OOB特性 (转)
    B/S安全退出
    判断滚动条是否到达页面的尾部
    通过XmlSerializer序列化(对象)和反序列化(xml文件)
    SQL Server与ADO.Net数据类型对照
    在C#里使用属性,如Obsolete,Serializable,XmlRoot
    SQL求往年的工资和
    通过使用partition by 过滤重复项
    委托的协变与逆变代码
    Routing
  • 原文地址:https://www.cnblogs.com/tianlangshu/p/1989549.html
Copyright © 2020-2023  润新知