어떨때 ShowMessage나 MessageBox로 메시지를 출력하고 몇초간 사용자가 창을 닫지 않으면
스스로 닫게 하는 메시지창이 필요할 경우도 있습니다.
그때 긁어 쓰기 좋은 코드.
class TShowMessageTimeout
{
TTimer *Timer;
public:
void __fastcall OnTimer(TObject *sender)
{
delete Timer;
// Enter or ESC
keybd_event(27, 0, 0, 0);
keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
}
TShowMessageTimeout(String msg, int time_ms)
{
Timer = new TTimer(Application);
Timer->Interval = time_ms;
Timer->Enabled = true;
Timer->OnTimer = OnTimer;
// 아래 메시지박스 창 계열은 다 됩니다.
//ShowMessage(msg);
MessageBox(Application->Handle, msg.c_str(), "Message", MB_OK);
}
};
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// 사용 : 메시지 보여주고 2초뒤 스스로 닫힙니다.
TShowMessageTimeout msg("Program already running...", 2000);
원리는 메시지창 보여주고 ESC를 누른 것 같은 효과를 내주는 것인데,
이로 인한 단점이 하나 있습니다.
메시지 창이 표시 될때 사용자가 마우스를 다른 곳으로 이동해 클릭해서
메시지창이 포커스를 잃으면 망구(표준어: 아무) 소용 없다는 것.
하지만 단독으로 동작하는 프로그램이라면 큰 걱정 없이 쓸수도 있습니다.
아쉬우면 또 여기에 보강하면 되고요.
|