|
폼의 캡션의 [_] [ㅁ][X] 버튼을 클릭했을때 이벤트만 잡으려는 것인가요?
아니면 최대화 , 최소화 , Restore 등의 이벤트를 잡으려는 것인가요?
1. 먼저 님의 생각하는 것처럼 FormResize 하면 제대로 잡을 수 없습니다.
이유는?
- FormResize 이벤트는 프로그램이 시작할때 곧바로 뜨고요
- Max , Min , Resotre버튼을 클릭하지 않고 size조절만 해도 이벤트가 발생합니다.
- 그리고 무엇보다 캡션의 Min버튼을 클릭할때는 이벤트가 발생하지 않습니다.
Minimize되는것은 화면에서 사라질뿐 Size변경은 없으니까요
2. 둘때로 FormClose이벤트가 Form이 Destory되는 이벤트가 아닙니다.
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
: ShowMessage("Distroy Form");
: }
: //---------------------------------------------------------------------------
FormClose이벤트는 단지 Form을 Hide시킬뿐입니다.
Form이 Close된후에 Form이 Destory되는경우는
첫째로. Close되는 폼이 Application->MainForm일 경우에 그렇구요
둘째로 . FormClose이벤트에 보면 파라메터로 TCloseAction이 넘어옵니다.
이 Action에 caFree를 설정하면 Close된후에 free됩니다.
폼이 Destory되는 이벤트는 Form에 OnDestory이벤트 가 있습니다. 그것을 활용하시면 됩니다.
그럼 결론적으로 Form의 minimize / maximize / restore이벤트를 잡으려면 어떻게 해하냐면?
WM_SYSCOMMAND 메세지를 잡아야 합니다.
WM_SYSCOMMAND에서 WParam이 SC_MINIMIZE 이면 minimize이벤트이구
WM_SYSCOMMAND에서 WParam이 SC_MAXIMIZE이면 maxmize이벤트 입니다.
WM_SYSCOMMAND에서 WParam이 SC_RESTORE이변 복귀 이벤트이구요
그런데 중요한것 한가지더...
폼의 캡션의 버튼을 클릭해서 하는경우 위와같은 메세지가 발생합니다만
폼의 캡션이 아니라 윈도우 데스트탑의 작업표시줄에 있는 프로그램버튼을 클릭해서 minimize / restore할경우
좀 다를수 있습니다. 메인폼만
왜냐하면 작업표시줄에 나타나는 버튼이 메인폼의 버튼이 아니라 Application->Handle 폼의 버튼이기때문이죠
그래서 메인폼의 경우 작업표시줄에서 maximize / minimaxe / restore이벤트까지 제대로 잡으려면
Application->Handle에서 발생하는 메세지까지 잡아야 합니다.
그럼..
너브 님이 쓰신 글 :
: 최소화하고 최대화 이벤트가 있을 줄 알고 보니 없네요...
: 대신 FormResize 이벤트를 사용하면 될 거 같네요;;;
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormResize(TObject *Sender)
: {
: if(Form1->WindowState == wsMaximized) { // 최대화....
: ShowMessage("Max Form");
: // do something.............
: }
: if(Form1->WindowState == wsMinimized) { // 최소화
: ShowMessage("Min Form");
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
: ShowMessage("Distroy Form");
: }
: //---------------------------------------------------------------------------
:
: 초보 님이 쓰신 글 :
: : 프로그램 폼에서
: : 상단에 [-][ㅁ][x] 각각의 이벤트를 아고 싶은데
: :
: : 몰라서
: : 프로그램은 실행되어 있고 화면은 나오지 않아서
: : 이벤트 잡아 주고 싶습니다.
|