2012-11-16 62 views
-1

固定使用user32.dll中USER32的ShowWindow .NET

public partial class Form1 : Form 
{ 
    TheForm theForm;//empty form 
    public Form1() 
    { 
     InitializeComponent(); 
     theForm = new TheForm(); 
    } 

    internal const int SWP_SHOWWINDOW = 0x0040; 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    internal static extern int ShowWindow(IntPtr hWnd, short cmdShow);   

    private void button1_Click(object sender, EventArgs e)//shows theForm when it wants to 
    { 
     ShowWindow(theForm.Handle, SWP_SHOWWINDOW); 
    } 

    private void button2_Click(object sender, EventArgs e)//shows theForm always 
    { 
     theForm.Show(); 
    } 
} 

为什么叫USER32的ShowWindow后,大部分时间窗口 “停留在地狱” 第三方控件? 它捕获焦点丢失和丢弃,但不捕获鼠标事件,也不会自行绘制。

+1

你想要做什么在上帝的绿色地球上? – siride

+0

试图修复第三方组件... –

回答

1

我没有专家,但我认为你需要通过调用按钮点击事件处理程序方法之外的Show()方法来显示你的窗体。如果没有形式看到,你不能点击一个按钮来显示表单。

我不确定这是在C#中使用user32.dll来制作winforms应用程序的原因。因为这是C#为你完成的,所以在说话的方面。

所有您需要做的就是让visual studio在拖放表单设计器中为您创建表单代码。然后为了显示和使用你的表单而不用为你的Main()方法创建一个新的源文件,只需在生成的代码中写入Main()方法。

这里有一篇关于使用windows窗体设计器的文章。

http://msdn.microsoft.com/en-us/library/360kwx3z(v=vs.90).aspx

+0

原因是我试图修复第三方控件,并且诚实地不知道为什么他们这样做。 –

+0

根据试图做什么以及他们需要做什么,如果你能说服他们放弃dll,那么每个人都会更容易。那么你可以工作一些魔法,并与winforms设计师有一些乐趣。它是一个双赢的局面! :) – kbzombie

+0

我有它的全部来源,我们突然破碎的项目需要修复它。 我累了,并顺便哭泣。 –