CWnd::SetIcon究竟做了什么事?
来源:互联网 发布:2017淘宝入驻条件费用 编辑:程序博客网 时间:2024/04/27 23:25
用VC向导生成的基于对话框的程序中,在对话框的OnInitDialog()函数中,总可以看到如下的代码段:
BOOL CXXXDlg::OnInitDialog()
{
......
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
......
}
那SetIcon究竟做了什么事?为什么需要调用这函数两次?对于此函数,MSDN上的解释说:"Call this member function to set the handle to a specific icon, as identified by hIcon."看了后仍然不甚了了。
自己动手,丰衣足食。在SetIcon处设置一个端点,单步进去,看CWnd::SetIcon究竟做了些什么。像其它MFC中的代码一样,CWnd::SetIcon也只是对消息进行了简单的封装。
AFXWIN_INLINE HICON CWnd::SetIcon(HICON hIcon, BOOL bBigIcon)
{
ASSERT(::IsWindow(m_hWnd));
return (HICON)::SendMessage(m_hWnd, WM_SETICON, bBigIcon, (LPARAM)hIcon);
}
哦,原来是向窗口(窗口句柄为m_hWnd)发送了一个WM_SETICON消息,再呼出MSDN,对于这个消息,MSND上有比较详细的解释。如消息名SETICON所揭示的那样,发送这个消息给窗口,是为了让这个窗口和大图标(large icon)或者小图标(small icon)关联。在用户按ALT+TAB键切换窗口时,显示的就是大图标,小图标就是对话框窗口标题栏上的那个图标。
同一的参数m_hIcon, 却带有TRUE或者FALSE,这是颇让人感到疑惑的地方。说白了其实也是很简单的事情,我们在用VC的资源编辑器编辑图标(icon)时,不是可以选择不同大小的图片来进行编辑吗?这些大小不同的图,最终都存入到同一个.ico文件中去了。所以m_hIcon指向的是一组图标,第二个参数(TRUE或者FALSE)就是用来指定这一组图标中某一类大小的图标的,参数值为TRUE时,指明使用大图标(32*32相素),FALSE指明使用小图标(16*16像素)。
当然,一般程序中我们并没有对WM_SETICON消息进行处理,所以这些设置大小图标的事情,都被默认的消息处理函数DefWindowProc给做掉了。
- CWnd::SetIcon究竟做了什么事?
- CWnd::SetIcon究竟做了什么事? zz
- CWnd::SetIcon究竟做了什么事?
- Ubuntu 12.04 下安装 openGL 驱动时,究竟做了什么事?
- 构造函数 做了什么事
- 由早泄到阳痿,究竟出了什么事?
- PeekMessage究竟做了什么?
- linux中的fork函数到底做了什么事
- SetIcon
- SetIcon
- suspend和resume究竟做了什么?
- new/delete究竟做了些什么
- const 它究竟做了什么?
- setContentView() 究竟都做了什么?
- C++编译器创建的默认构造究竟做了什么??
- OpenGL中glRotatef()函数究竟对矩阵做了什么
- 三极管的基极电流究竟做了什么?
- 【Java笔记】类的构造器究竟做了什么?
- 画uml图、流程图、软件结构图、类图、顺序图的方法
- Request.QueryString 应用
- catos与IOS 各种设备cisco抓包
- H.264/MPEG-4 Part 10 White Paper 译(一) Overview
- 苹果不再需要乔布斯 已完成其三大使命 (转)
- CWnd::SetIcon究竟做了什么事?
- struts2: Constant Configuration
- gcov和lcov对linux c++分析代码覆盖率
- 电脑维修小知识(我抄的!)
- 利用指针访问数组元素与下标法访问哪个更快
- ANT的安装与配置
- 使用gcov进行保险测试
- 【转】李一男印象
- 一些SQL操作