2012-11-16 3 views
-1

Закрепление управления третьей стороны, которые используют USER32.dlluser32 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() вне методов click click для обработчиков кнопок. если нет формы для просмотра, вы не можете нажать кнопку, чтобы отобразить форму.

Я не уверен, что причина использования user32.dll в C# для создания winforms-приложений. Потому что это сделано для вас C#, в манноре речи.

Все, что вам нужно сделать, это позволить визуальной студии создавать код формы для вас в дизайнере форм перетаскивания. Затем, чтобы показать и использовать форму без создания нового исходного файла только для вашего метода Main(), просто напишите метод Main() прямо в сгенерированном коде.

Heres отличная статья об использовании конструктора окон.

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

+0

Причина в том, что я пытаюсь исправить сторонние элементы управления и, честно говоря, понятия не имею, почему они так делают. –

+0

В зависимости от того, что вы пытаетесь сделать и как им это нужно, всем было бы проще, если бы вы могли убедить их отбросить dll. то вы могли бы поработать с какой-то магией и немного повеселиться с дизайнером winforms. его выигрышная ситуация! :) – kbzombie

+0

У меня есть полные источники, и наш внезапно сломанный проект нужно исправить. Я устал и плачу кстати. –