创建半屏窗口

YourKing 2010-09-07 10:38:11
我想创建一个窗口出来,但是不影响当前窗口。

就是说,一般一个新窗口出来了,标题栏,状态栏之类的地方就会随之有变化
我想实现的效果是,如果把屏幕下半部遮住,然后我的窗口出来了从上半屏都看不出变化
不知道描述的够不够清楚
截屏做窗口背景就不用提了,那样就不是半屏窗口了。

请大家给指教一下,谢谢
...全文
195 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
YourKing 2010-09-08
  • 打赏
  • 举报
回复
非常感谢SongQues,我用的是VC++,你的代码我研究看看
YourKing 2010-09-08
  • 打赏
  • 举报
回复
mobile中的输入法面板就是这样的半屏效果,不知道是怎么实现的
SongQues 2010-09-08
  • 打赏
  • 举报
回复

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.WindowsMobile.Status;
using Microsoft.WindowsCE.Forms;

namespace yzh
{
public class yzh : Form
{
//private SystemState displayRotationState = new SystemState(SystemProperty.DisplayRotation);
private bool centered = true;

#region Native Platform Invoke

[DllImport("coredll.dll")]
private static extern UInt32 SetWindowLong(IntPtr hWnd, int nIndex, UInt32 dwNewLong);

[DllImport("aygshell.dll")]
private static extern int SHDoneButton(IntPtr hwndRequester, UInt32 dwState);

private readonly int GWL_STYLE = (-16);

private readonly UInt32 WS_CAPTION = 0x00C00000; /* WS_BORDER | WS_DLGFRAME */
private readonly UInt32 WS_BORDER = 0x00800000;
private readonly UInt32 WS_POPUP = 0x80000000;

private readonly UInt32 SHDB_SHOW = 0x0001;
private readonly UInt32 SHDB_HIDE = 0x0002;

#endregion

public NonFullscreenForm()
{
//displayRotationState.Changed += new ChangeEventHandler(displayRotationState_Changed);
}

public bool CenterFormOnScreen
{
get
{
return centered;
}
set
{
centered = value;

if (centered)
{
CenterWithinScreen();
}
}
}

protected override void OnLoad(EventArgs e)
{

this.Height += SystemInformation.MenuHeight;

base.OnLoad(e);

uint style = WS_BORDER | WS_CAPTION | WS_POPUP;
SetWindowLong(Handle, GWL_STYLE, style);

SHDoneButton(Handle, ControlBox ? SHDB_SHOW : SHDB_HIDE);

if (centered)
{
CenterWithinScreen();
}
}

protected override void OnResize(EventArgs e)
{
base.OnResize(e);

if (centered)
{
CenterWithinScreen();
}
}

protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);

if (this.ControlBox)
{
if (e.KeyCode == Keys.Return || e.KeyCode == Keys.Escape)
{
this.DialogResult = DialogResult.OK;
}
}
}

private void displayRotationState_Changed(object sender, ChangeEventArgs args)
{
if (centered)
{
CenterWithinScreen();
}
}

private void CenterWithinScreen()
{
int x = (Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2;
int y = (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2;

this.Location = new Point(x, y);
}
}
}

楼主看一下这个!继承一下就可以看到效果!
YourKing 2010-09-08
  • 打赏
  • 举报
回复
我是做了,不是想当然的
windows mobile 普通窗口出来都是全屏的,也就是说一个新窗口出来了在z轴上会处于最上层,好像windows mobile也不支持像PC那样的透明效果,所以标题栏、右上角都是覆盖的效果.隐藏不代表透明啊,所以实现起来还没找到方向。
SongQues 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 yourking 的回复:]
我想创建一个窗口出来,但是不影响当前窗口。

就是说,一般一个新窗口出来了,标题栏,状态栏之类的地方就会随之有变化
我想实现的效果是,如果把屏幕下半部遮住,然后我的窗口出来了从上半屏都看不出变化
不知道描述的够不够清楚
截屏做窗口背景就不用提了,那样就不是半屏窗口了。

请大家给指教一下,谢谢
[/Quote]
原来是要半屏窗体!我看成了半透明窗体!呵呵!无证!这个半屏窗体问一下楼主用什么语言写?
mojieke 2010-09-08
  • 打赏
  • 举报
回复
7楼的方法就可以,不错
大饼哥- 2010-09-08
  • 打赏
  • 举报
回复
不知道是你想当然的还是动手证实了的!

不过,我当然是想当然的,因为我没有去针对这个做demo。

但我觉得,你要的就是弹出一个Dialog这样的功能,只显示某一块区域,并且没有状态栏和菜单栏。(不知道是否??)

应该隐藏是可以的。。。试试看。
YourKing 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 songques 的回复:]

期待!我研究了快二年了!呵呵!但是还是没有成功!不过有些人过,他们只告诉你方法不告诉你怎么实现!哎……!我帮顶吧!
[/Quote]
谢谢啦!
有方法就有方向啊,我目前还没研究到什么好方法
SongQues 2010-09-07
  • 打赏
  • 举报
回复
期待!我研究了快二年了!呵呵!但是还是没有成功!不过有些人过,他们只告诉你方法不告诉你怎么实现!哎……!我帮顶吧!
YourKing 2010-09-07
  • 打赏
  • 举报
回复
就是不希望程序影响到公共区域
比如当前运行的程序B要调用我的程序A,A不想覆盖B的标题栏,如果B窗口本身在右上角就是OK按钮,A实现隐藏OK按钮的话那么B窗口的OK按钮其实是被遮住的.
大饼哥- 2010-09-07
  • 打赏
  • 举报
回复
楼上基本都提到了几个方法:
1。 创建的时候,设置Pos_x,Pox_y,hight一般。影藏掉右上角的X或者OK。这样实现有问题吗?
2。 创建好窗口后,用movewindows移动,应该也是可以的呀。

至于你说的电池电量什么的饿,应该不会有变化吧,哦,你创建的时候记得隐藏状态栏。

如果你在你所谓的下半屏里面要显示电池什么的,那就掉相应的方法获得显示啊。

不知道你问的是不是这个!!

仅供参考!
YourKing 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lvlin1980 的回复:]

这个好象很容易吧 不知道我理解的对不对:
1. 创建一个窗口,X Pos = 0; Y Pos = 某个数值(半屏)
2. 创建这个窗口的类,这个类的virtual BOOL OnInitDialog();方法中不要加入CDialog::OnInitDialog();
3. 把ok再隐藏了
::SHDoneButton(m_hWnd, SHDB_HIDE);
::SetWindow……
[/Quote]
谢谢建议

要单击运行的话模拟效果还是可以实现的
但是我想当程序被调用时也有这样的效果比较难
要考虑原来右上角是什么按钮
还有在桌面情况下被调用时状态栏上的电池电量变成了时间,这个也目前不知道怎么控制
lvlin1980 2010-09-07
  • 打赏
  • 举报
回复
这个好象很容易吧 不知道我理解的对不对:
1. 创建一个窗口,X Pos = 0; Y Pos = 某个数值(半屏)
2. 创建这个窗口的类,这个类的virtual BOOL OnInitDialog();方法中不要加入CDialog::OnInitDialog();
3. 把ok再隐藏了
::SHDoneButton(m_hWnd, SHDB_HIDE);
::SetWindowLong(m_hWnd, GWL_STYLE, WS_NONAVDONEBUTTON );

这样出来的窗口就是半屏的 , 供参考
comey 2010-09-07
  • 打赏
  • 举报
回复
学习。。。。。。。。
chxy85 2010-09-07
  • 打赏
  • 举报
回复
在对话框的构造函数里
m_bFullScreen = FALSE;

然后在初始化中,movewindow到你想要的样子
YourKing 2010-09-07
  • 打赏
  • 举报
回复
非常感谢luver提供的意见
我调试下效果看看
烂番 2010-09-07
  • 打赏
  • 举报
回复
这个不就是ToolTip窗口吗,贴点代码:

if(!CreateEx(
WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
TOOLTIPS_CLASS,
NULL,
WS_POPUP,//TTS_NOPREFIX | TTS_ALWAYSTIP,
CRect(0,0,10,10),
pParent,
NULL,
NULL))


ShowWindow(SW_SHOWNOACTIVATE);
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧