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

Im 전문가는 아니지만 단추 클릭 이벤트 처리기 메서드 외부에서 Show() 메서드를 호출하여 폼을 표시해야한다고 생각합니다. 볼 수있는 양식이 없으면 버튼을 클릭하여 양식을 표시 할 수 없습니다.

확실하지 않은 이유는 win32s 응용 프로그램을 만들기 위해 C#에서 user32.dll을 사용하는 이유입니다. 왜냐하면 이것은 C#에 의해 당신을 위해 이루어 졌기 때문에, 말하기의 진가가되었습니다.

Visual Studio에서 끌어서 놓기 양식 디자이너에서 양식 코드를 만들 수만 있으면됩니다. 그런 다음 Main() 메소드 만 새 소스 파일을 만들지 않고 양식을 표시하고 사용하려면 Main() 메소드를 생성 된 코드 바로 여기에 작성하십시오.

Heres Windows 양식 디자이너 사용에 대한 훌륭한 기사입니다.

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

+0

이유는 제 3 자 컨트롤을 수정하려고 시도하고 있으며 솔직히 왜 그런 식으로 처리하는지 알 수 없습니다. –

+0

뭘하려고하는지, 그리고 어떻게해야하는지에 따라, dll을 버리라고 설득 할 수 있다면 모든 사람이 더 쉬울 것입니다. 다음 몇 가지 마법을 작동하고 winforms 디자이너와 함께 재미있게 할 수 있습니다. 그것의 승리 승리 상황! :) – kbzombie

+0

나는 그것의 전체 소스를 가지고 있으며 갑자기 부서진 프로젝트는 그것을 고칠 필요가있다. 나는 피곤하고 btw 울고있다. –