更新时间:2023-05-23 16:07
SetFocus,对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。
函数原型:HWND SetFocus(HWND hWnd)。
参数:
hWnd:接收键盘输入的窗口指针。若该参数为NULL,则击键被忽略。
返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口未与调用线程的消息队列相关,则返回值为NULL。若想要获得更多错误信息,可以调用GetLastError函数。
备注:SetFocus函数发送WM_KILLFOCUS消息到失去键盘焦点的窗口,并且发送WM_SETFOCUS消息到接受键盘焦点的窗口。它也激活接受键盘焦点的窗口或接受键盘焦点的窗口的父窗口。
若一个窗口是活动的,但没有键盘焦点,则任何按键将会产生WM_SYSCHAR,WM_SYSKEYDOWN或WM_SYSKEYUP消息。若VK_MENU键也被按下,则消息的IParam参数将设置第30位。否则,所产生的消息将不设置此位。
使用AttachThreadInput函数,一个线程可将输入处理连接到其他线程。这使得线程可以调用SetFocus函数为一个与其他线程的消息队列相关的窗口设置键盘焦点。
Windows CE:不使用SetFocus函数为一个与其他线程的消息队列相关的窗口设置键盘焦点。但有一个例外。若一个线程的窗口是另一线程的子窗口,或这些窗口是具有同一父窗口的兄弟窗口,则与一个线程关联的窗口可以为其他窗口设置焦点,尽管该窗口属于一个不同的线程。在这种情况下,就不必先调用AttachThreadlnpUt函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上版;头文件:winuser.h;库文件:user32.lib。
理论结合实例来演示一下:(网站的登陆后台自动获取焦点实例)
如果网站的登陆后台有设置获取焦点的功能的话,那么登陆后台的时候就可以不用鼠标点击文本框光标就会自动定位到文本框里,当然后台登陆页面没有这一获取焦点的功能的话,那么就需要网站管理员登陆的时候用鼠标放在文本框旁边点一下然后光标才放定位到你所需要的文本框里面,两者相比之下,细心的朋友肯定会觉得前者使用起来更方便实用,更人性化,那么自动将光标定位到文本框里的功能是如何实现的,请看下面的代码
第一步:先定义SetFocus函数,如下,注意SetFocus函数必须包含在javascript脚本之内
function SetFocus()
{
表单的名为UserName的文本框的值为空
document.Login.UserName.focus();//那么将此文本框设置焦点,也就是将光标定位此文本框里,等待用户输入用户名
else
document.Login.UserName.select();
}
SetFocus();//调用SetFocus函数
通过以上的代码测试你可以发现,不用鼠标光标就会自动定位到文本框里,不过这里有几点是需要值的注意的:
第二:表单名与表单控件比如文本框的名称大小需要统一,在javascript客户端脚本中是区分大小写的,如果SetFocus函数内的表单名或表单元素的名称是大写,而Form表单的代码中的名称如果是小写的话,那么SetFocus函数也将无效
[pre]public static setFocus(newFocus:
Object) : Boolean
使 newFocus 参数指定的可选择(可编辑)文本字段、按钮或影片剪辑获得焦点。如果传递 null 或则删除当前焦点。
ActionScript 1.0、Flash Player 5 , 按钮和影片剪辑的实例名称仅在 Flash Player 6 及更高版本中有效。
newFocus:Object
Boolean ― 一个布尔值;如果获得焦点成功,则为 true;如果失败,则为 false。
在下面的示例中,当文本字段在浏览器窗口中运行时,它将在 username_txt 文本字段上获得焦点。如果用户未填写某个必需文本字段(username_txt 和 password_txt),则光标将自动将焦点定位在缺少数据的文本字段中。例如,如果用户未在 username_txt 文本字段中键入任何内容,则在单击姨峤挥按钮时,将出现一条错误消息,而且光标在 username_txt 文本字段中获得焦点。
此示例中使用的 MovieClip.getNextHighestDepth() 方法要求 Flash Player 7 或更高版本。如果您的 SWF 文件包括第 2 版的组件,请使用第 2 版组件的 DepthManager 类代替 MovieClip.getNextHighestDepth() 方法。
将焦点移至指定的控件或窗体。
object.SetFocus
object 所在处代表对象表达式,其值是“应用于”列表中的一个对象。
对象必须是 Form 对象、MDIForm 对象或者能够接收焦点的控件。调用 SetFocus 方法以后,任何的用户输入将指向指定的窗体或控件。
焦点只能移到可视的窗体或控件。因为在窗体的 Load 事件完成前窗体或窗体上的控件是不可视的,所以如果不是在 Form_Load 事件过程完成之前首先使用 Show 方法显示窗体的话,是不能使用 SetFocus 方法将焦点移至正在自己的 Load 事件中加载的窗体的。
也不能把焦点移到 Enabled 属性被设置为 False 的窗体或控件。如果已在设计时将 Enabled 属性设置为 False,必须在使用 SetFocus 方法使其接收焦点前将 Enabled 属性设置为 True。
可使用SetFocus的部分控件
1.MDI窗体。
2.窗体
3.ADODATA 控件
4.Animation 控件
5.CheckBox 控件
6.ComboBox 控件
7.CommandButton 控件
8.所有数据(Data)控件
9.DateTimePicker 控件
10.DirListBox 控件
11.DriveListBox 控件
12.FileListBox 控件
13.HScrollBar 、VScrollbar 控件
14.FlatScrollbar 控件
15.ListBox 和 ListView 控件
16.TextBox 控件
17.Imagecombo 控件
18.Masked Edit 控件
19.OLE 容器控件
20.MSFlexGrid 和 MSHFlexGrid 控件(别把两个控件混一起了)
21.OptionButton 控件
22.PictureBox 控件
23. 属性页对象(Property Page )
24.RichTextBox 控件
25.Silder 控件
26. 用户自定义控件对象 (UserControl )
27.ActiveX 文档 (UserDocument)
28.TabStrip 控件
29.TreeView 控件
30.updown 控件
31.Window 对象