C#运行屏幕保护程序预览移动文本(如弹跳球)

时间:2013-06-11 18:21:14

标签: c# gdi+ screensaver

从[^]开始, 我导出了以下代码:

// *********************************** 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();
  • SetStyleUpdateStyles
  • 表单设置为全屏模式
  • 表单背景颜色设置为黑色
  • 计算将在屏幕上移动的文本的大小
  • 计算文本的初始x和y位置
  • 创建并启动System.Timers.Timer
  • 最后调用了show_bubble_scr_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之内。

我想要实现的是让Bubbles.scr图像浮动 在文本移动时围绕表单。我得到的是,非常简短, 出现Bubbles.scr图像,然后是全屏黑色图像 出现。文本按预期移动。但没有泡沫。该 process.MainWindowHandle始终为零。

我很感激你的想法。

0 个答案:

没有答案