当前位置: 代码迷 >> PB >> 如其获取指定窗口的焦点控件
  详细解决方案

如其获取指定窗口的焦点控件

热度:92   发布时间:2016-04-29 06:07:52.0
如果获取指定窗口的焦点控件?
在PB中,使用getfocus()函数可以获得应用中当前获得焦点的控件对象。
但是,在已知窗口的情况下,如何获取该窗口当前获得焦点的控件对象呢?

下面是我使用的方法
//**定义函数:
SetActiveWindow(long handle) Library "user32.dll"
//**假设已知窗口为 window aw
graphicobject lgo_object
boolean lb_enabled
lb_enabled = aw.enabled //记录窗口的enabled属性,用来处理response类型的窗口
if not lb_enabled then aw.enabled = true
SetActiveWindow(handle(aw)) //焦点转移到aw上
lgo_object = getfocus() //取得aw的焦点控件
if not lb_enabled then aw.enabled = false
SetActiveWindow(handle(当前窗口))
if isvalid(lgo_object) then messagebox('', lgo_object.classname())


有没有更好的方法呢?


------解决方案--------------------
方法不错啊,PFC就是这样处理啊

n_cst_menu
pfc_messagerouter(as_message)

pfc_w_master.event pfc_messagerouter
graphicobject lgo_focus

// Check argument
If IsNull (as_message) or Len (Trim (as_message)) = 0 Then
Return -1
End If

// Try sending the message to this window, if successful exit event.
If This.TriggerEvent (as_message) = 1 Then Return 1

// Try sending the message to the current control, if successful exit event.
lgo_focus = GetFocus()
If IsValid (lgo_focus) Then
If lgo_focus.TriggerEvent (as_message) = 1 Then Return 1
End If

// Try sending the message to the last active datawindow, if successful exit event.
If IsValid (idw_active) Then
If idw_active.TriggerEvent (as_message) = 1 Then Return 1
End If

// No objects recognized the message
Return 0
  相关解决方案