zoukankan      html  css  js  c++  java
  • IsIconic() OnPaint里的用途

    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消息,从而执行那段代码。    总之,一般情况下可以不要这段代码,它的特殊用途我也不是很了解,但是我们至少可以知道它是怎么样工作的。
  • 相关阅读:
    python学习6—数据类型之集合与字符串格式化
    python学习5—一些关于基本数据结构的练习题
    21-python-time,random模块的应用
    20-python-装饰器⭐
    19-python-迭代器、生成器
    18-python-文件的操作
    17-python-主要内置函数
    16-python-map、filter函数
    15-python-局部变量全局变量
    14-python-函数
  • 原文地址:https://www.cnblogs.com/cplusplus/p/2768329.html
Copyright © 2011-2022 走看看