setAlwaysOnTop(boolean isAlwaysOnTop);方法可以实现,你可以试试,当你创建的窗口比较多的时候,可以在每个窗口实现代码中使用这个语句,通过合理地将参数设置成true或者false一定能达到你想要的效果。
pTalkDlg->Create(IDD_DIALOG_TALK,AfxGetMainWnd()); 这句的AfxGetMainWnd()改成this试一下
=====================================================================
我能看出来,和QQ差不多吧A里面有用于判断聊天窗口是否打开的变量
那这样试下,用pTalkDlg->ShowWindow(SW_MINIMIZE)最小化后加一句SetForegroundWindow();
建议用个什么JS框架吧,就很简单了。
手写的话你div的样式position:absoute就可以自己控制位置了,通过top,left,right,bottom等。然后有个z-index属性,最大是9999,比其他div大就不会被其他div遮住
建议用JQ代码来实现
<script src="//ajaxgoogleapiscom/ajax/libs/jquery/183/jqueryminjs"></script>
<script type="text/javascript">
$(document)ready(function(){
$(":text")attr("readonly","readonly");
$(":text")foucs(function(){
$(this)blur();
});
});
因为当文本域只读时,在部分浏览器中是不能获取焦点的,所以感觉$(":text")foucs(function(){有点多余。
这儿只给一个文本域只读的例子
如果还要添加其它的,比如密码域,可以把$(":text")修改为$(":text,:password")
是不是很简单
当然你也可以直接在input或其它文本域中写入,比如
<input type="text" readonly="readonly"></input>
如果是想说,题主自己编写了一个有两个窗口的程序,在第一个窗口时d出第二个窗口,但焦点还在第一个窗口上,那么只需要在新的窗口 Show() 之后,thisFocus(); 就可以继续让焦点在本窗口上了。
● 如果是想说,向QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框d出后都不影响焦点的变化,那么有两种方法:
要么重写需要d出的窗体的事件:
1
2
3
4
5
6
7
8
9
10
11
protected override CreateParams CreateParams
{
get
{
const int WS_EX_NOACTIVATE = 0x08000000;
CreateParams cp = baseCreateParams;
cpExStyle |= WS_EX_NOACTIVATE;
return cp;
}
}
// CreateParams 在 SystemWindowsFormsControls 命名空间下
要么调用系统钩子:
1
2
3
4
5
6
7
8
9
10
11
// 引用系统钩子
[DllImport("user32dll")]
public static extern IntPtr GetActiveWindow();
[DllImport("user32dll")]
public static extern IntPtr SetActiveWindow(IntPtr hwnd);
// 在窗口d出时做以下处理
IntPtr activeForm = GetActiveWindow(); // 先得到当前的活动窗体
new form2Show(false); // d出新窗体
SetActiveWindow(activeForm); // 在把焦点还给之前的活动窗体
可以这样:
主窗体
Form2;
子窗体
Form1;
form2加载后,隐藏,再模态加载form1,然后在form1中用form2Visible=true来显示form2;因为form2是form1的父窗口,不关闭form1,form2是不能获得焦点的。
以上就是关于如何用API实现一个窗口总在最前但不获得焦点全部的内容,包括:如何用API实现一个窗口总在最前但不获得焦点、窗口无法获得焦点、js如何d出无标题栏无边框的子窗口 并且能够阻止父窗口获得焦点 并且能够和父窗口互相传值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)