|
아직두 시스템 종료시 저의 프로그램을 죽이지 못하고 있습니다..
소스를 올리니 고수분들께서 좀 봐주세여..
void __fastcall TForm1::closeMenuClick(TObject *Sender)
{
canclose = true;
Close();
}
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = canclose;
if( !CanClose )
{
TrayMessage(NIM_ADD);
Hide();
}
canclose = false;
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (MessageDlg("프로그램을 종료하시겠습니까?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
{
Action = caFree;
}
else
{
Action = caNone;
}
}
보시다 시피 close 유무를 컨트롤하는 플래그 canclose를 두고 이것을 컨트롤하여 true로 둘수 있는것은 팝업메뉴에서 가능하도록 해두었습니다..
즉 팝업에서 종료를 선택했을시만 canclose를 true로 할 수 있고 이것은 곧이어 호출된 Close()함수에 의해서 FormCloseQuery를 호출하고... canclose가 true이므로 다시 FormClose를 호출하고 FormClose에 의해서 프로그램이 종료됩니다.근데 이러한 과정은 프로그램 종료버튼을 클릭했을 때 발생하고 시스템 종료시에는 바로 프로그램이 종료하도록 하고 싶은데 시스템 종료시 Close()가 가장 먼저 호출되고 따라서 그다음인 FormCloseQuery가 호출되어서 이 시점에서 canclose는 false이므로 절대 프로그램이 죽지 않는다는 것입니다.
그래서 제가 묻고 싶은 것은 시스템 종료시 발생하는 이벤트와 프로그램 종료시 발생하는 이벤트가 다르다면 canclose를 걔네들 이벤트에서 설정하면 "시스템 종료와 프로그램 종료"를 구분하지 않는가하는 생각을 했던 것입니다..
모쪼록 제가 뭘 간과하구 있는지...\
그럼 어떻게해야 하는지 일러주심 감사하겠습니다.
|