从[^]开始, 我导出了以下代码:
// *********************************** 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
和UpdateStyles
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
始终为零。
我很感激你的想法。