好久不来,我又来提问了~ 问题是:如何建议一个不会抢其它窗口焦点的窗口 ( 积分: 300 )

  • 主题发起人 主题发起人 轻舞肥羊
  • 开始时间 开始时间

轻舞肥羊

Unregistered / Unconfirmed
GUEST, unregistred user!
就像photoshop里的工具窗口<br>例,主窗口A为普通窗口,B窗口为无焦点(不会抢焦点)窗口<br>要求:<br>1.输入焦点在A上的一个Edit时,点B窗口,焦点不会转移到B窗口<br>2.输入焦点在A上的一个Edit时,点B窗口上的一个无焦点控件,如speedbutton,能触发其事件,但焦点应该还停留在A窗口中的Edit中<br>3.当B窗口上有Edit时,点Edit焦点可以切换到B窗口中的Edit中(这个可以不实现,也就是说B窗口上可以只放无焦点控件,B窗口永远不会获得焦点)<br>总的来说就是:要一个窗口能响应事件而不能获得输入焦点<br><br>参考控件是ToolBar2000中的TTBFloatingWindowParent,它实现得很好,但我试着把它分离出来失败了.
 
就像photoshop里的工具窗口<br>例,主窗口A为普通窗口,B窗口为无焦点(不会抢焦点)窗口<br>要求:<br>1.输入焦点在A上的一个Edit时,点B窗口,焦点不会转移到B窗口<br>2.输入焦点在A上的一个Edit时,点B窗口上的一个无焦点控件,如speedbutton,能触发其事件,但焦点应该还停留在A窗口中的Edit中<br>3.当B窗口上有Edit时,点Edit焦点可以切换到B窗口中的Edit中(这个可以不实现,也就是说B窗口上可以只放无焦点控件,B窗口永远不会获得焦点)<br>总的来说就是:要一个窗口能响应事件而不能获得输入焦点<br><br>参考控件是ToolBar2000中的TTBFloatingWindowParent,它实现得很好,但我试着把它分离出来失败了.
 
如果反过来想呢?<br>如何在一个窗口获得焦点后立刻把焦点重新返回到之前的焦点?<br>好象比较容易一点。
 
你使用的是类似于photoshop的浮动窗口,建一个浮动的窗口就是了.<br>你是不是需要建立浮动窗口,告诉我你的EMail地址<br>可以解决你的问题的话你可要给分啊!<br>浮动窗口的整体是作为父窗口的子控件在使用.<br>你理解了?<br>我是来抢分的.
 
楼上没试过吧,如果直接返回焦点的话,B窗口上的控件不能响应某些事件,比如SpeedButton就不能响应Click事件了,连拖动B窗口都有问题
 
噢,上面说的是一楼<br>二楼有什么方法?<br>yangsai@126.com
 
那个控件制造了一个假象,当自己获得焦点时,<br>他发送消息给他的父窗口,使其重绘标题栏,显示为激活状态<br>而实际上,主窗口已经失去了焦点<br><br>你自己发送一个 NC_ACTIVE 的小心,可以达到同样效果,<br>看了一下TB2k的源码,它就是这么做的
 
呵呵,刚才没有仔细看题, &nbsp;不过还要对上面的补充一下:<br><br>给父窗口发送的消息是<br> &nbsp; &nbsp;SendMessage(ParentForm.Handle, WM_NCACTIVATE, 1, 0);
 
如果窗口显示的时候,不打算获得焦点,<br>并且其上的控件可以操作,就像楼主所说的,<br>可以这样来做:<br><br>但是,最好符合下面的条件:<br>1.窗口最好不要有标题栏和边框<br>2.不能包含可获得输入焦点的控件<br><br>显示窗口的时候可以用 <br>ShowWindow(Handle, SW_SHOWNOACTIVATE)<br>当然,也可以用 SetWindowPos 来显示窗口,获得同样的效果<br><br>其次:<br>响应这个消息,WM_MOUSEACTIVATE<br>返回: MA_ACTIVATEANDEAT 或者 MA_NOACTIVATEANDEAT 即可
 
procedure TForm2.WMMouseActivate(var Message: TWMMouseActivate);<br>begin<br> &nbsp;Message.Result := MA_NOACTIVATE;<br>end;<br>这样是可以让鼠标点击窗口客户区不失去焦点,MA_NOACTIVATEANDEAT消息会让窗口内的控件不能点<br>但是缺点是不能点标题栏及边框.
 
你可以再响应 WM_NCHITTEST 消息,让操作系统认为点的不是标题栏和边框,而是客户区<br>TB2K 里面的那个窗口边框和标题栏都是假的,是程序自己绘制出来的
 
或者,可以自己处理鼠标点击边框和标题栏的消息,<br>这样,就不会获得焦点了
 
谢谢.先这样吧
 
后退
顶部