0

从 [ ^ ],我得出以下代码:

// *********************************** 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 位置
  • ASystem.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始终为零。

我很感激你的想法。

4

0 回答 0