`
huobengluantiao8
  • 浏览: 1032749 次
文章分类
社区版块
存档分类
最新评论

VC 关于让子窗显示图标的问题

 
阅读更多

以下是网络上流传很久的例子,大家难得没有发现问题吗??红色字标明了问题所在。

更改窗口图标并将其显示在任务栏

以下两个函数可以为应用程序中的各子窗口显示一个任务条到任务栏并更改它们的图标。对那些象QQ一样隐藏主窗口的应用程序特别有用。

//函数用途:更改一个窗口的图标并将其显示在任务栏、任务切换条、任务管理器里
//参数说明:
//hWnd 要改变图标的窗口句柄
//hLargeIcon 显示到任务切换条上的图标 32*32
//hSmallIcon 显示到除任务切换条之外的图标 16*16
//hIcon 显示的图标,32*32,在显示到任务切换条之外的其余地方时会被自动压缩成16*16的。
//注释:
//此函数对于模式对话框无能为力。
//如果HICON 为NULL,函数不改变窗口图标,但是将原有图标显示到任务栏、
// 任务切换条、任务管理器里。
//此函数是通过将窗口的父窗口指针置空来实现将图标显示到任务栏、任务切换条、
// 任务管理器里的,所以调用完成后,其父窗口指针不再可用。
BOOL SendWndIconToTaskbar(HWND hWnd,HICON hLargeIcon,HICON hSmallIcon);
BOOL SendWndIconToTaskbar(HWND hWnd,HICON hIcon);

BOOL CUIApp::SendWndIconToTaskbar(HWND hWnd,HICON hLargeIcon,HICON hSmallIcon)
{
 BOOL ret = TRUE;
 ASSERT(hWnd);
 if(!::IsWindow(hWnd))
  return FALSE;
 //获取窗口指针
 CWnd* pWnd;
 pWnd = pWnd->FromHandle(hWnd);
 ASSERT(pWnd);
 if(!pWnd)
  return FALSE;
 //将父窗口设为NULL
 if(pWnd->GetParent())
  if(::SetWindowLong(hWnd,GWL_HWNDPARENT,NULL) == 0)
   return FALSE;

  if(!(pWnd->ModifyStyle(NULL,WS_OVERLAPPEDWINDOW)))
   ret = FALSE;
  //设置窗口图标
  if(hLargeIcon && hSmallIcon)
  {
   pWnd->SetIcon(hSmallIcon,FALSE);
   pWnd->SetIcon(hLargeIcon,TRUE);
  }

  return ret;
 }

BOOL CUIApp::SendWndIconToTaskbar(HWND hWnd,HICON hIcon)
{
 BOOL ret = TRUE;
 ASSERT(hWnd);
 if(!::IsWindow(hWnd))
  return FALSE;
  //获取窗口指针
 CWnd* pWnd;
 pWnd = pWnd->FromHandle(hWnd);
 ASSERT(pWnd);
 if(!pWnd)
  return FALSE;
 //将父窗口设为NULL
 if(pWnd->GetParent())
  if(::SetWindowLong(hWnd,GWL_HWNDPARENT,NULL) == 0)
   return FALSE;

 if(!(pWnd->ModifyStyle(NULL,WS_OVERLAPPEDWINDOW)))
  ret = FALSE;
 //设置窗口图标
 pWnd->SetIcon(hIcon,TRUE);
 pWnd->SetIcon(hIcon,FALSE);

 return ret;
}

如果主窗口产生时隐藏了(一直隐藏,只到关闭),产生的子窗口,子窗口如何来关闭主窗口呢?
可以把if(::SetWindowLong(hWnd,GWL_HWNDPARENT,NULL) == 0)
改成,if(::SetParent(hWnd,NULL) == 0) 即可使子窗口显示图标,同时主窗口的指针在子窗口中也可以使用,不过带来一个问题,就是子窗口不能在任务栏显示!!

分享到:
评论

相关推荐

    VC编程技巧精选,很不错

    71. 在VC1.5中,如何得到子窗口在主窗口中的相对坐标? 72. VC1.5 如何调用进程? 73. VC++1.5编Win3.1程序能否实现全局跳转? 74. 如何在DLL用自定义窗口? 75. 如何让TOOLTIP的字体变大? 76.怎样更换wallpaper. 77.写...

    TabBars---VC6 IDE增强插件

    还可以选择是否在标签栏显示图标,是否支持系统菜单以及新打开窗口的位置,对于系统资源比较有限的用户还可以选择打开窗口的最大限制。 二 C++程序文件和头文件快速切换 对于一个管理良好的软件项目,函数的声明...

    VC++常用功能实例

    ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ...

    VC学习大纲 VC学习讲义

    VC工程的编译原理与过程,将工程中不同的类拆分到不同的原文件中,每一个类由一个.h和.cpp文件共同完成,然后解决头文件重复定义问题,培养了学员良好的编程习惯,也为以后分析MFC Appwizard生成的工程奠定了良好...

    vc 抓屏程序:截取当前屏幕核心代码.rar

    vc 抓屏程序,截取当前屏幕核心代码,为了操作和显示方便,这里为其增加了一套窗体,你只需在启动程序后在窗体的空白处点击右键,即可将当前屏幕的内容截取下来,并显示在窗体中,与QQ抓图十分相似,但要像QQ截图...

    VC++常用的共用函数100多页

    ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ...

    VC++ 编程技巧

    1. 如何获取应用程序的...71A.在VC1.5中,如何得到子窗口在主窗口中的相对坐标? 26 72.VC1.5 如何调用进程? 26 73.VC++1.5编Win3.1程序能否实现全局跳转? 26 74.在DLL用自定义窗口 26 75.如何让TOOLTIP的字体变大 27

    vc++ 应用源码包_6

    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...

    Visual c++案例开发集锦

    在IE工具栏中加入快捷图标 简单浏览器开发 FTP客户端开发 一种简单的proxy程序 聊天室客户端程序开发 聊天室服务器端开发 第七章 报表与打印演示 程序互斥运行 定时关机 读写INI文件 删除目录及子目录文件 文件查找 ...

    VC++ 专家指导.doc

    (105) 如何可以让我的程序可以显示在其它的窗口上面? 77 (106) 如何控制窗口框架的最大最小尺寸? 79 (107) 如何改变窗口框架的颜色? 81 (108) 如何将应用程序窗口置于屏幕正中? 82 (1)当文档被修改时,如何在标题上...

    Visual C++案例开发集锦

    在IE工具栏中加入快捷图标 简单浏览器开发 FTP客户端开发 一种简单的proxy程序 聊天室客户端程序开发 聊天室服务器端开发 第七章 报表与打印演示 程序互斥运行 定时关机 读写INI文件 删除目录及子目录文件 文件查找 ...

    visual C++编程技巧.chm

    在VC1.5中,如何得到子窗口在主窗口中的相对坐标? <br>72. VC1.5 如何调用进程? <br>73. VC++1.5编Win3.1程序能否实现全局跳转? <br>74. 如何在DLL用自定义窗口? <br>75. 如何让TOOLTIP的字体变大...

    iDesktopCalendar 1.0.3 特别版

    在窗口自动隐藏后可以通过双击系统托盘图标来快速显示,方便查询时间。 语音报时或者音乐提示时,可以通过双击系统托盘图标或者窗口来停止声音播放。 在窗口自动隐藏时,可以有系统任务栏的气泡提示。...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 2/7

     实例002 带图标的程序菜单   实例003 根据表中数据动态生成菜单   实例004 浮动的菜单   1.2 弹出菜单应用实例   实例005 在控件上单击右键弹出菜单   实例006 个性化的弹出菜单   实例007 ...

    C++MFC教程

    |------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图 |------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章 文档视结构 |------ 3.1 文档 视图 框架窗口间的关系和消息传送规律 |------ ...

    注册表查看编辑器 + 源码

    XP系统下,自带的隐藏了HKEY_PERFORMANCE_DATA、HKEY_PERFORMANCE_TEXT、HKEY_PERFORMANCE_NLSTEXT的显示,不过这三个键都不含子键,只含值,不知为何,这三个键的默认键值打不开,提示参数不正确。需要注意的是,...

    iDesktopCalendar V1.1.0(我的桌面日历)

    在窗口自动隐藏后可以通过双击系统托盘图标来快速显示,方便查询时间。 语音报时或者音乐提示时,可以通过双击系统托盘图标或者窗口来停止声音播放。 在窗口自动隐藏时,可以有系统任务栏的气泡提示。...

    Visual C++ 编程资源大全(源码 窗体)

    enhstbar.zip 在状态条上显示按钮和进度指示条(88kb)<END><br>71,fully.zip 全屏幕显示窗口例子程序(42kb)<END><br>72,icondial.zip 在对话框内显示图标列表(12kb)<END><br>73,mfccmd.zip 多重Undo/Redo...

    vc++ 应用源码包_1

    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...

Global site tag (gtag.js) - Google Analytics