我写了一个程序,每N秒,定时对数据库进行刷新,以修正数据库内的一些数据。我把它放在启动菜单栏里,希望一开机就运行。同时希望程序一运行就隐藏到系统栏,这样不影响我使用其它程序。
本来我是想直接在CMainDlg::OnInitDialog中用ShowWindow(SW_HIDE);的,但是很不幸,程序窗口依然显示。在网上查找一段时间以后没有找到解决办法,只好自行摸索了。
最后我是通过延时发隐藏窗口请求来解决的(先显示窗口,等待一段时间,再隐藏窗口)。我想主窗口在CMainDlg::OnInitDialog中不能隐藏的原因,是该函数运行后,还有一些事件刷新了主窗口,所以我通过延时等待所有的主窗口事件处理完成以后再进行隐藏。
在CMainDlg::OnInitDialog中:
//
设置定时间隔
SetTimer(IDT_TIMER_TOSYSTRAY,DELAY_TIME
*
1000
);
在CMainDlg::OnTimer中:
switch(wParam)
{
case IDT_TIMER_TOSYSTRAY:
// 隐藏窗口到系统栏
KillTimer(IDT_TIMER_TOSYSTRAY);
SendMessage(WM_CLOSE);
break;
case IDT_TIMER_REFRESH:
break;
}
真正的处理函数:
LRESULT CMainDlg::OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// TODO: Add your message handler code here and/or call default
if (IsWindowVisible())
ShowWindow(SW_HIDE);
return 0;
}