IsIconic()和OnPaint()函数
来源:互联网 发布:足球视频分析软件 编辑:程序博客网 时间:2024/06/05 08:39
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();
}
{
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消息,从而执行那段代码。 总之,一般情况下可以不要这段代码,它的特殊用途我也不是很了解,但是我们至少可以知道它是怎么样工作的。
阅读全文
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函数的设计
- 阿里云免费套餐邀请码阿里云ecs免费6个月
- ora-28547:Navicat 链接 Oracle时报错
- Zookeeper-Zookeeper可以干什么
- 两种方式访问光距感
- InputStream中read()与read(byte[] b) 标签: bytestringjavafilenullpath 2012-08-21 20:38 15233人阅读 评论(1) 收藏
- IsIconic()和OnPaint()函数
- linux下java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
- 【yoyo】jvm中堆栈以及内存区域分配
- P1003 铺地毯
- VxWorks多任务--生产者消费者模型
- hdu 6113 度度熊的01世界 (dfs+扩边界)
- HDU5775-Bubble Sort(逆序对)
- jenkins gitlab拉取branch或者tag
- return break continue的作用于用法