Publié le

c# wndproc 예제

먼저 추가하려는 코드 (사용자에게 프로그램의 파일 이름을 표시)를 제시한 다음 프로그램에 통합합니다. 나중에 나는 아마 당신에게 코드를 보여주고 당신이 당신의 프로그램에 통합 할 수 있습니다. 이것은 물론 나를 위해 더 나은 나에 대 한 많은 입력 하지 않아도 하 고 그것은 당신을 위해 더 나은 모든 프로그램에 코드를 추가할 수 있을 것입니다 그리고 그냥 내가 제시 하는 것 들. 이 작업을 수행하는 방법을 잘 모르는 경우 섹션에 포함된 예제 zip 파일을 확인하십시오. 양식의 WndProc 메서드는 Windows 운영 체제에서 양식으로 전송된 메시지를 처리합니다. 이는 양식이 다른 중요한 작업을 이동, 크기 조정, 다시 그리기 및 수행할 수 있도록 하는 매우 중요한 방법입니다. 일반적으로 WndProc의 기본 구현을 변경할 필요는 없지만 기본 WndProc을 재정의하여 특별한 작업을 수행할 수 있습니다. 이 예제에서는 다음 코드를 사용하여 사용자가 양식에 포함된 컨트롤을 클릭하는 시기를 감지합니다. 두 번째 합병증은 한 컨트롤이 다른 컨트롤 위에 있을 때 발생합니다. 이 예제에서는 두 탭 페이지가 서로 위에 있습니다.

두 번째 탭을 선택한 다음 클릭하면 GetChildAtPoint가 동일한 지점에 있고 메서드가 검색에서 해당 페이지를 먼저 만나므로 첫 번째 탭을 반환합니다. 해당 메시지가 표시되는 경우 코드는 마우스의 커서 위치를 가져옵니다. 그런 다음 GetChildAtPoint 메서드를 사용하여 마우스 위치에 있는 컨트롤을 확인하지만 해당 접근 방식에는 두 가지 문제가 있습니다. 첫째, 양식의 컨테이너에 포함된 컨트롤은 양식의 직접적인 자식이 아닙니다. 예를 들어 이 프로그램 레이블3은 양식에 포함된 tabControl1에 포함된 tabPage1에 포함된 groupBox2에 포함되어 있습니다. label3을 클릭하면 양식의 직접적인 자식이 아니므로 GetChildAtPoint에서 찾을 수 없습니다. 대신 양식에 의해 직접 포함된 컨트롤이기 때문에 tabControl1을 찾을 수 있습니다. 다음 섹션에서는 이미 새로운 작업을 수행해야 하는 항목을 수정하는 방법을 보여 드리겠습니다.

이런 식으로 난 그냥 말할 수 있습니다 “이 메시지를 처리, 그리고 그것에이 작업을 수행 …” 그리고 당신은 내가 무슨 뜻인지 알 수 있으며 전체 예를 볼수없이 그렇게 할 수 있습니다. 어쨌든 희망, 그래서 지금 😛 관심을 지불, 우리의 예를 살펴 보자. 우리는 이미 WM_DEVICECHANGED 메시지를 트래킹하고 두 개의 특정 이벤트를 필터링해야 한다는 것을 알고 있습니다. 두 클래스를 기반으로 예제를 빌드합니다. 이 예제에서 솔루션은 컨트롤의 WndProc 메서드를 재정의하거나 NativeWindow 클래스의 구현과 동일한 작업을 수행하는 것입니다.