_skyfly

我不要在IT中迷失方向

程序运行后,立即隐藏到系统栏内 ( 期待更好的解决办法 )。

我写了一个程序,每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;
}

posted on 2006-06-22 16:54 龙井2008 阅读(887) 评论(2)  编辑 收藏 引用 所属分类: 代码片段

评论

# re: 程序运行后,立即隐藏到系统栏内 ( 期待更好的解决办法 )。 2006-06-22 19:16 dabor

不建立对话框程序,即 "Dialog based" 。在 VC 中建立程序时选 "Single document" ,建立窗口函数后不要显示窗口:
// ShowWindow(SW_HIDE);

我没有用过 MFC ,"ShowWindow" 在哪不是很清楚。

  回复  更多评论   

# re: 程序运行后,立即隐藏到系统栏内 ( 期待更好的解决办法 )。 2008-04-25 17:20 vfdff

关注中   回复  更多评论   

只有注册用户登录后才能发表评论。