C#在移动文本后运行屏幕保护程序预览(如弹跳球)
从[], 我导出了以下代码:C#在移动文本后运行屏幕保护程序预览(如弹跳球),c#,gdi+,screensaver,C#,Gdi+,Screensaver,从[], 我导出了以下代码: // *********************************** show_bubble_scr_preview [ DllImport ( "user32.dll" ) ] static extern IntPtr SetParent ( IntPtr clild_window_handle, IntPtr parent_window_handle ); [ DllImport (
// *********************************** show_bubble_scr_preview
[ DllImport ( "user32.dll" ) ]
static extern IntPtr SetParent ( IntPtr clild_window_handle,
IntPtr parent_window_handle );
[ DllImport ( "user32.dll" ) ]
static extern bool MoveWindow ( IntPtr window_handle,
int x,
int y,
int width,
int height,
bool repaint );
public static void show_bubble_scr_preview ( Control control )
{
string path = @"C:\Windows\System32\Bubbles.scr";
if ( File.Exists ( path ) )
{
try
{
IntPtr window_handle;
Process process = new Process ( );
process.StartInfo.FileName = path;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Arguments = "/P " + control.Handle;
process.Start();
window_handle = process.MainWindowHandle;
process.WaitForInputIdle ( );
if ( window_handle != IntPtr.Zero )
{
Rectangle client_rectangle = control.
ClientRectangle;
SetParent ( window_handle, control.Handle );
MoveWindow ( window_handle,
client_rectangle.Left,
client_rectangle.Top,
client_rectangle.Width,
client_rectangle.Height,
true);
}
}
catch ( Exception ex )
{
}
}
}
父窗体包含用户指定的文本,该文本在
形式。在父窗体的初始化过程中,会发生以下操作:
InitializeComponent()代码>
和SetStyle
updatestyle
- 窗体设置为全屏模式
- 窗体背景色设置为黑色
- 计算将在屏幕上移动的文本大小
- 计算文本的初始x和y位置
- 创建并启动
系统.计时器.Timer
- 最后调用
show\u bubble\u scr\u preview(this)
// ****************************************************** tick
void tick ( object source, ElapsedEventArgs e )
{
try
{
if ( this.InvokeRequired )
{
this.Invoke (
new EventHandler (
delegate
{
this.Refresh ( );
}
)
);
}
else
{
this.Refresh ( );
}
}
catch ( Exception ex )
{
}
}
在OnPaint
中重新定位和重画文本
我试图实现的是让气泡漂浮
当文本移动时,在表格周围移动。我得到的是,非常简单,
气泡.scr图像出现,然后是全屏黑色窗体
出现。文本按预期移动。但没有泡沫。这个
process.MainWindowHandle
始终为零
我很感激你的想法。我只是猜测,也许屏幕保护程序会出现在表单后面。如果不全屏显示,会发生什么?@jszigeti,不幸的是,如果表单没有最大化,它只会在监视器的左上角显示为一个小表单。谢谢你的尝试。