이유 중 하나는 사용자가 실제로 X 버튼을 클릭했을 때를 감지해야한다는 것입니다. 내가 지금까지 가지고하는 것은 이것이다 :창에서 "X"버튼의 좌표를 어떻게 얻을 수 있습니까?
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)0xa1) //WM_NCLBUTTONDOWN
{
Point p = new Point((int)m.LParam);
p = this.PointToClient(p);
if (p.X > 680)
{
//do what I need to do...
}
}
base.WndProc(ref m);
}
는 기본적으로, 마우스가 윈도우의 비 클라이언트 영역을 클릭하다 "WM_NCLBUTTONDOWN"메시지를 밖을 봐. 그런 다음 LParam에서 X와 Y 좌표를 얻고 마지막으로이를 화면 좌표로 변환합니다. 그래서이 시점에서, 나는 사용자가 비 클라이언트 영역을 클릭했고 폼의 어디에 있는지 알고 있습니다.
제 질문은 어떻게 이러한 좌표가 X 버튼에 있는지 알 수 있습니다. 지금은 680을 하드 코딩하고 있는데, 이는 윈도우의 현재 크기에서 작동하기 때문에 (크기는 크지 않지만) 문제는 XP보다 큰 X 버튼이있는 Windows 7을 사용하고 있다는 것입니다. 따라서 분명히 강화는 실용적이지 않습니다. 선택권. 또한 Y 좌표도 코딩하지 않았으므로 누군가가 창의 오른쪽 가장자리를 클릭하면 해당 코드도 트리거됩니다. 그래서 ... 누구든지 아이디어가 있습니까?
버튼을 누르는 것이 중요합니까? 아니면 사용자가 응용 프로그램을 닫고 있는지 실제로 확인하려고합니까? –
"x 버튼"을 다른 닫기/종료 메시지와 다르게 처리하려는 이유는 무엇입니까? – Tim
이상한 상황이지만 인정 하겠지만 기본적으로 대화 상자입니다. 닫을 때 유효성 검사를 트리거하려고합니다. 표준 FormValidating 이벤트는 Dialog이기 때문에 속성을 작동하지 않습니다 (묻지 않음, 다른 날 다른 게시물 , 나는 그것이 버그라고 생각한다). 그래서 FormClosing 이벤트에서 수동으로 Validation을 처리하고 있습니다 만, 사용자가 X를 클릭했는지 알 필요가 있습니다.이 경우 유효성 검사를 건너 뛰고 싶습니다. 말이된다? – BFree