IsIconic()和OnPaint()函数
来源:互联网 发布:云计算安全问题实例 编辑:程序博客网 时间:2024/06/05 00:42
void CSetAddressDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); }}
IsIconic()作用是判断窗口是否处于最小化状态(点击了最小化按钮之后)。
对于普通的对话框来说,如果你在if (IsIconic()) 下面加入AfxMessageBox(“haha”) ,你会发现消息框并不会弹出。
原因是,if (IsIconic()) 这段代码是在OnPaint()函数内,当你最小化了对话框之后,虽然IsIconic()的值是TRUE,但是OnPaint()函数并不会运行。因为OnPaint()响应的是WM_PAINT消息,而WM_PAINT消息是针对客户区的。一个最小化了的窗口不需要重绘客户区。
为了验证这一点,可以设置一定时器,在OnTimer()函数里写上
if(IsIconic()) MessageBeep(MB_OK);
当你点击最小化按钮后,你会听见嘟嘟声。
那么这段代码究竟有什么用?它是不是永远不会被执行呢?当然不是。举两个例子。
第一,如果你强行发送WM_PAINT消息,它会执行。
第二,特殊的对话框。比如一个ToolBox风格的对话框。这个对话框不显示在任务栏,在最小化之后它会变成一个很小的一条显示在桌面上。这时如果它被遮挡,就会出发WM_PAINT消息,从而执行那段代码。
总之,一般情况下可以不要这段代码,它的特殊用途我也不是很了解,但是我们至少可以知道它是怎么样工作的。
转处:http://blog.csdn.net/xs574924427/article/details/7355425
阅读全文
0 0
- IsIconic()和OnPaint()函数
- IsIconic()和OnPaint()函数
- IsIconic()和OnPaint()函数 虽然没什么用 留个印象
- IsIconic()和OnPaint()函数 虽然没什么用 留个印象
- ISICONIC() ONPAINT里的用途
- IsIconic() OnPaint里的用途
- IsIconic() OnPaint里的用途
- OnDraw函数和OnPaint函数
- 关于IsIconic函数
- 关于IsIconic函数
- IsIconic
- IsIconic
- IsIconic
- MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
- onDraw和onPaint函数的区别
- OnDraw和OnPaint函数的区别
- OnPaint 和 OnDraw函数的区别
- 3.1 OnPaint和OnDraw函数的设计
- 结构体与类(静态类、抽象类)学习
- Java反射机制
- Android.mk添加本地程序和库的经常使用模版
- Recurrent neural network based language model翻译(部分)
- 邮件营销中如何引导用户注册才能有效预防退订?
- IsIconic()和OnPaint()函数
- 【English】Learning English
- Android零基础入门第45节:GridView简单使用
- mysql中You can't specify target table for update in FROM clause错误
- 单源最短路---dijkstra模板(二叉堆优化)
- C语言day1(数据类型、变量本质)
- 机器学习中的数学(3)——协方差矩阵和散布(散度)矩阵
- java 调用matlab绘图
- CSS布局奇淫技巧之–各种居中