`
swimmer2000
  • 浏览: 38001 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

CWnd::SetIcon究竟做了什么事?

阅读更多

用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给做掉了。

分享到:
评论

相关推荐

    吕鑫:《VC++就业培训宝典之MFC视频教程》第十一章 第一节 调用CWnd::Create和CWnd::CreateEx函数手动创建控件

    1、调用CWnd::Create函数手动创建编辑框、下拉控件以及按钮等控件; 2、调用CWnd::CreateEx函数手动创建下陷风格的编辑框和列表控件等; 3、调用CWnd::Create函数手动创建日期控件;

    VC常用函数总结

    18. `CWnd::GetDlgItemInt` / `CWnd::SetDlgItemInt`:获取或设置控件的数值(UINT类型)。 19. `CWnd::GetDlgItemText` / `CWnd::SetDlgItemText`:获取或设置控件的文本字符串。 20. `CWnd::GetFocus` / `CWnd::...

    如何通过HWND获得CWnd指针

    首先,我们需要理解`CWnd::FromHandle`静态成员函数的作用。这个函数接收一个`HWND`作为参数,并尝试返回与该句柄关联的`CWnd`对象指针。但请注意,这并不总是能够成功,因为并非所有的`HWND`都对应一个`CWnd`对象。...

    mfc图形界面函数

    CWnd::GetWindowText 函数用于获取指定控件上的文本信息并把它保存在一个 CString 对象或 char 型数组中。该函数有两个原型: int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; void ...

    VC--常用的系统函数

    - `CWnd::ClientToScreen`:将客户区坐标转换为屏幕坐标。 - `CPoint::Offset`:偏移 CPoint 的 X 和 Y 值。 - `CWnd::GetStyle`:获取窗口的样式。 #### 其他相关函数 - `CMenu::CreatePopupMenu`:创建一个弹出...

    gain-CWnd.rar_mfc中获取cwnd_visual c_获取HWND_获取窗口口cwnd

    为了转换为`CWnd`,你可以使用`CWnd::FromHandle()`静态成员函数: ```cpp CWnd* pWnd = CWnd::FromHandle(hwnd); ``` 2. **Attach()**: `CWnd`类有一个`Attach()`成员函数,可以将现有的`HWND`附加到`CWnd`...

    VC 对话框相关

    - `CWnd::GetDlgItemText` 和 `CWnd::SetDlgItemText` - **作用**:用于获取或设置控件中的文本内容。 - `CWnd::GetDlgItemInt` 和 `CWnd::SetDlgItemInt` - **作用**:用于获取或设置控件中的整数值。 #### 三...

    SendMessage消息传递例程.rar

    你可以通过调用`CWnd::SendMessage`成员函数来向任何窗口发送消息。例如,向当前活动窗口发送一条`WM_PAINT`消息: ```cpp CWnd* pWnd = AfxGetMainWnd(); pWnd->SendMessage(WM_PAINT); ``` 三、消息的构成 在MFC...

    常用的MFC函数,数量齐全

    5. `CWnd::GetDlgItemText` 和 `CWnd::SetDlgItemText` 与`GetWindowText`和`SetWindowText`类似,但它们专门用于通过控件ID获取或设置控件的文本。`GetDlgItemText`的重载版本需要提供一个缓冲区来存储文本,而`...

    VC++ Timer 定时器使用源码

    CWnd::OnTimer(nIDEvent); } ``` 在适当的地方调用SetTimer设置定时器,例如在 OnInitDialog 或其他初始化函数中: ```cpp // 假设我们想要每1秒触发一次定时器 SetTimer(YOUR_TIMER_ID, 1000, NULL); ``` 最后...

    MFC控件自适应窗体改变大小

    当窗体大小发生改变时,系统会自动调用CWnd类的OnSize()成员函数。在这个函数中,你可以编写代码来处理控件的位置和大小调整。例如,你可以遍历所有子控件,根据新的窗体尺寸重新计算并设置它们的位置和大小。 2. ...

    Demo.rar_DEMO

    标题"Demo.rar_DEMO"和描述"通过HWND获得CWnd指针,可以调用CWnd::FromHandle函数"正是指向了这个关键知识点。 `CWnd::FromHandle`是MFC中用于将一个HWND转换为CWnd指针的静态成员函数。这个函数的原型如下: ```...

    常用VC函数供初学者参考

    10. `CMenu` 相关函数:`CMenu::CheckMenuItem`用于在菜单项上添加或移除复选标记,`CMenu::SetDefaultItem`设置默认菜单项,`CWnd::GetMenu`和`CWnd::GetSubMenu`分别获取窗口菜单和弹出菜单,`CMenu::...

    VC++基本函数一览表

    - `CWnd::GetWindowText` 和 `SetWindowText`:获取或设置窗口标题。 - `atoi` 和 `itoa`:分别用于将字符串转换为整数和将整数转换为字符串。 以上仅是VC++中部分基础函数的介绍,实际上,VC++提供了更丰富的...

    MFC 消息逆向分析.pdf

    这些消息被发送到应用程序的消息队列中,然后由消息循环(通常是在`CWnd::RunModalLoop`函数中实现)取出并分发给相应的处理函数。MFC提供了一套复杂但有序的消息处理体系,确保每个消息都能被正确地解析和响应。 #...

    VC 演示EXE程序通信的发送和接收消息机制.rar

      CWnd *pWnd=CWnd::FindWindow(NULL,str);   if(pWnd)   pWnd->SendMessage(WM_COMM,0,0);  }  //发送消息命令二  void CSenderDlg::OnCommand2()  {   //找到接收消息的窗口(窗口名为Receiver)   ...

    VC基本函数一览

    CWnd::TrackPopupMenu 函数可以在指定位置显示浮动弹出窗口并跟踪弹出菜单的菜单项。 9. 图形输出函数 CDC::DrawText 函数可以调用该成员函数在给定矩形中输出格式化文字,可以输出多行文字并规定对齐方式和使用何...

Global site tag (gtag.js) - Google Analytics