WinForm 컨트롤에서 메시지 처리 팁
Programming/C# / 2010. 11. 4. 20:36
작업하던 도중... 기록해 둬야 할 것 같아서 포스팅 합니다.
1. WinForm 상에서 Tab키 가로채기(Tab 키로 뭔가 하고 싶을 때)
2. 타이틀바 더블클릭 메시지 가로채기 (예제는 커지지 않도록 하는 방법)
3. 메시지와는 관련 없지만, 타이틀바에서 close(x)버튼 비활성화 하는 방법
1. WinForm 상에서 Tab키 가로채기(Tab 키로 뭔가 하고 싶을 때)
윈폼에서는 몇몇 키 입력이 KeyPress 나 KeyDown 등의 이벤트 핸들러에서 잡지 못합니다.그 몇몇키중 하나가 Tab키 인데, 다음과 같이 ProcessCmdKey 메소드를 override 하는 방법으로 처리할수 있습니다.
- private const int WM_KEYDOWN = 0x100;
- private const int WM_SYSKEYDOWN = 0x104;
- protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
- {
- if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
- {
- switch (keyData)
- {
- case Keys.Tab:
- //원하는 코드를 여기에 넣는다.
- break;
- default:
- break;
- }
- }
- return base.ProcessCmdKey(ref msg, keyData);
- }
2. 타이틀바 더블클릭 메시지 가로채기 (예제는 커지지 않도록 하는 방법)
윈폼을 사용하면서, 타이틀바(Titlebar 또는 Captionbar)를 더블클릭했을 때 최대화(Maximize)되는데요, 이를 방지하고 싶었으나 프로퍼티상에서 찾을 수가 없어서 다음과 같이 WndProc 메소드를 override 하는 방법으로 해결했습니다. 다른 메시지 가로채기할 때에도 유용할 것 같군요.
- private const int WM_NCLBUTTONDBLCLK = 0xA3;
- protected override void WndProc(ref Message m)
- {
- switch (m.Msg)
- {
- case WM_NCLBUTTONDBLCLK:
- if (this.WindowState == System.Windows.Forms.FormWindowState.Maximized)
- this.WindowState = System.Windows.Forms.FormWindowState.Normal;
- return;
- default:
- break;
- }
- base.WndProc(ref m);
- }
3. 메시지와는 관련 없지만, 타이틀바에서 close(x)버튼 비활성화 하는 방법
출처 : http://vinothnat.blogspot.com/ (유용한 정보가 많네요.)
타이틀바에서 기본적으로 ControlBox 속성을 true 로 주면, 최대화/최소화/닫기 버튼이 나타납니다. ㅁ_x 이렇게요. 나타나게 한 뒤, 최대/최소화 버튼은 각각 MaximizeBox, MinimizeBox 속성을 false 로 해 줌으로서 안보이게 할 수 있지만, x 버튼은 사라지게 할 수 없습니다. 아직 사라지게 하는 방법은 찾지 못했지만(WndProc로 가능하긴 할 듯), 일단 비활성화(disable)하는 방법입니다.
타이틀바에서 기본적으로 ControlBox 속성을 true 로 주면, 최대화/최소화/닫기 버튼이 나타납니다. ㅁ_x 이렇게요. 나타나게 한 뒤, 최대/최소화 버튼은 각각 MaximizeBox, MinimizeBox 속성을 false 로 해 줌으로서 안보이게 할 수 있지만, x 버튼은 사라지게 할 수 없습니다. 아직 사라지게 하는 방법은 찾지 못했지만(WndProc로 가능하긴 할 듯), 일단 비활성화(disable)하는 방법입니다.
- protected override CreateParams CreateParams
- {
- get
- {
- CreateParams param = base.CreateParams;
- param.ClassStyle = param.ClassStyle | 0x200;
- return param;
- }
- }
반응형
'Programming > C#' 카테고리의 다른 글
C# Dictionary Examples, Keys and Values (5) | 2010.11.08 |
---|---|
C# 쓰레딩 [멀티쓰레딩] (0) | 2010.11.04 |
IPC .Net ( 프로세스간 통신 ) (0) | 2010.11.03 |
외부 프로그램 실행 (0) | 2010.10.28 |
작성된 프로그램에 의해 윈도우종료가 문제될 때 (0) | 2010.10.28 |