随笔 - 41  文章 - 2 评论 - 0 阅读 - 52537
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

想做一个基于对话框的程序,程序启动以后自动隐藏于托盘,不显示对话框也不在任务栏显示图标;也就是达到程序“悄悄的运行”,只在托盘能看出来程序运行着呢。

这就要分两个部分来做,

一,程序启动对话框隐藏,任务栏图标不显示。

二,程序隐藏到托盘,双击托盘恢复对话框的显示,右击托盘直接关闭程序。

 首先来做第一部分,在网上搜到的删除托盘图标都使用的ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 也就是通过修改窗口格式来实现;我试了一下的确任务栏的图标不显示了,可是对话框上的最大化最小化图标也没了,为了保持对话框原有的模样,于是参考文章关于MFC程序中隐藏任务栏图标的问题,删除任务栏图标通过创建一个隐藏的窗口,然后设为主对话框的父窗口就行了,示例代码如下:

 

复制代码
BOOL CxxxApp::InitInstance()
{
    ......
    CWnd m_wndOwner;
    if ( m_wndOwner.m_hWnd == NULL ) 
    { 
        LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);

        if ( !m_wndOwner.CreateEx(0, pstrOwnerClass, _T(""),  //创建一个隐藏的弹出样式的窗口 
            WS_POPUP, CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            NULL, 0) ) 
            return FALSE; 
    }

    //CsaveParamReportDlg dlg;
    CxxxDlg dlg(&m_wndOwner); // 以隐藏的窗口作为父窗口
    m_pMainWnd = &dlg;

    ......
   // 销毁隐藏的父窗口

    if (m_wndOwner.m_hWnd!=NULL)
    {
        m_wndOwner.DestroyWindow();
    }
return FALSE;
}
复制代码

 

通过上边的操作,在对话框初始化的时候,就可以使用如下代码隐藏任务栏图标:

 ModifyStyleEx(WS_EX_APPWINDOW, 0);//从任务栏中去掉图标

 

 

 

 

posted on   lazybee  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示