用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给做掉了。
分享到:
相关推荐
1、调用CWnd::Create函数手动创建编辑框、下拉控件以及按钮等控件; 2、调用CWnd::CreateEx函数手动创建下陷风格的编辑框和列表控件等; 3、调用CWnd::Create函数手动创建日期控件;
18. `CWnd::GetDlgItemInt` / `CWnd::SetDlgItemInt`:获取或设置控件的数值(UINT类型)。 19. `CWnd::GetDlgItemText` / `CWnd::SetDlgItemText`:获取或设置控件的文本字符串。 20. `CWnd::GetFocus` / `CWnd::...
首先,我们需要理解`CWnd::FromHandle`静态成员函数的作用。这个函数接收一个`HWND`作为参数,并尝试返回与该句柄关联的`CWnd`对象指针。但请注意,这并不总是能够成功,因为并非所有的`HWND`都对应一个`CWnd`对象。...
CWnd::GetWindowText 函数用于获取指定控件上的文本信息并把它保存在一个 CString 对象或 char 型数组中。该函数有两个原型: int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; void ...
- `CWnd::ClientToScreen`:将客户区坐标转换为屏幕坐标。 - `CPoint::Offset`:偏移 CPoint 的 X 和 Y 值。 - `CWnd::GetStyle`:获取窗口的样式。 #### 其他相关函数 - `CMenu::CreatePopupMenu`:创建一个弹出...
为了转换为`CWnd`,你可以使用`CWnd::FromHandle()`静态成员函数: ```cpp CWnd* pWnd = CWnd::FromHandle(hwnd); ``` 2. **Attach()**: `CWnd`类有一个`Attach()`成员函数,可以将现有的`HWND`附加到`CWnd`...
- `CWnd::GetDlgItemText` 和 `CWnd::SetDlgItemText` - **作用**:用于获取或设置控件中的文本内容。 - `CWnd::GetDlgItemInt` 和 `CWnd::SetDlgItemInt` - **作用**:用于获取或设置控件中的整数值。 #### 三...
你可以通过调用`CWnd::SendMessage`成员函数来向任何窗口发送消息。例如,向当前活动窗口发送一条`WM_PAINT`消息: ```cpp CWnd* pWnd = AfxGetMainWnd(); pWnd->SendMessage(WM_PAINT); ``` 三、消息的构成 在MFC...
5. `CWnd::GetDlgItemText` 和 `CWnd::SetDlgItemText` 与`GetWindowText`和`SetWindowText`类似,但它们专门用于通过控件ID获取或设置控件的文本。`GetDlgItemText`的重载版本需要提供一个缓冲区来存储文本,而`...
CWnd::OnTimer(nIDEvent); } ``` 在适当的地方调用SetTimer设置定时器,例如在 OnInitDialog 或其他初始化函数中: ```cpp // 假设我们想要每1秒触发一次定时器 SetTimer(YOUR_TIMER_ID, 1000, NULL); ``` 最后...
当窗体大小发生改变时,系统会自动调用CWnd类的OnSize()成员函数。在这个函数中,你可以编写代码来处理控件的位置和大小调整。例如,你可以遍历所有子控件,根据新的窗体尺寸重新计算并设置它们的位置和大小。 2. ...
标题"Demo.rar_DEMO"和描述"通过HWND获得CWnd指针,可以调用CWnd::FromHandle函数"正是指向了这个关键知识点。 `CWnd::FromHandle`是MFC中用于将一个HWND转换为CWnd指针的静态成员函数。这个函数的原型如下: ```...
10. `CMenu` 相关函数:`CMenu::CheckMenuItem`用于在菜单项上添加或移除复选标记,`CMenu::SetDefaultItem`设置默认菜单项,`CWnd::GetMenu`和`CWnd::GetSubMenu`分别获取窗口菜单和弹出菜单,`CMenu::...
- `CWnd::GetWindowText` 和 `SetWindowText`:获取或设置窗口标题。 - `atoi` 和 `itoa`:分别用于将字符串转换为整数和将整数转换为字符串。 以上仅是VC++中部分基础函数的介绍,实际上,VC++提供了更丰富的...
这些消息被发送到应用程序的消息队列中,然后由消息循环(通常是在`CWnd::RunModalLoop`函数中实现)取出并分发给相应的处理函数。MFC提供了一套复杂但有序的消息处理体系,确保每个消息都能被正确地解析和响应。 #...
CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,0); } //发送消息命令二 void CSenderDlg::OnCommand2() { //找到接收消息的窗口(窗口名为Receiver) ...
CWnd::TrackPopupMenu 函数可以在指定位置显示浮动弹出窗口并跟踪弹出菜单的菜单项。 9. 图形输出函数 CDC::DrawText 函数可以调用该成员函数在给定矩形中输出格式化文字,可以输出多行文字并规定对齐方式和使用何...