OnQueryDragIcon()
{
return NULL;
}OnPaint() 
{
if (!IsIconic())
CDialog::OnPaint()
}
我把他们改成上面那样,与不改没有任何区别,至少目前我还没发现区别,那么原来MFC自动生成的那些代码有什么用呢?
附:上面两个函数的MFC自动产生的代码:
OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}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();
}
}

解决方案 »

  1.   

    IsIconic在你的窗口最小化时返回非零值。
    if (IsIconic())
    {
    ///...
    }
    这段代码的作用是用来绘制窗口最小化的时候得图标(ICON)的。OnQueryDragIcon是在窗口最小化的时候返回窗口的图标句柄。
      

  2.   

    返回NULL则使用系统默认的图标
      

  3.   

    你跟踪一下就知道了,IsIconic() 是=NULL的,而,OnQueryDragIcon()
    根本就没有执行,因为没有它的消息,就象你单击鼠标右键一样,只有你单击了右键,系统程序才会响应OnRButtonDowm(...)的
      

  4.   

    根据IsIconic() 的返回值来判断
      

  5.   

    http://search.csdn.net/Expert/topic/589/589214.xml?temp=.1078302
      

  6.   

    我想也应该是大家说的那样,但经过我修改后的程序:
    OnQueryDragIcon()
    {
    return NULL;
    }OnPaint() 
    {
    if (!IsIconic())
    CDialog::OnPaint()
    }
    与原来的没有任何区别,图标还是我自己定义的图标,还是我请手画的。
      

  7.   

    与原来的没有任何区别,图标还是我自己定义的图标,还是我请手画的那是没有激活这几个条件。程序已经很清楚了,那个函数应该是如何被激活的,条件应该怎么进去……你可以在原来生成的代码中设断点,想想怎么进那些断点:)
    另外,删除默认代码还不如你自己写点其他代码有效。因为系统默认的操作可能和删掉代码的结果差不多。查查MSDN吧,你会有收获的。