程序描述:
1.有一个class用来显示单个的图片
class CMyImg : public CStatic
{
...
CBitmap m_bmp;
...
}
int CMyImg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
...
m_bmp.LoadBitmap(IDB_BITMAP1);
...
}
void CMyImg::OnPaint() 
{
...
CRect rt;
GetClientRect(rt);
dc.DrawState(CPoint(0, 0), CSize(rt.Width(), rt.Height()), &m_aryTrain[m_trainunit], DST_BITMAP);
...
}
2.有一个class上面有很多这样的CMyImg对象,有接口来管理他们
class CMyStatic : public CStatic
{
...
CMyImg m_img1, m_img2;
...
}
void CMyStatic::Show1()
{
m_img1.ShowWindow(SW_SHOW);
m_img2.ShowWindow(SW_HIDE);
}
void CMyStatic::Show2()
{
m_img1.ShowWindow(SW_HIDE);
m_img2.ShowWindow(SW_SHOW);
}BOOL CMyStatic::CreateMyStt(CWnd *pParent)
{
if (!CStatic::Create("", WS_CHILD | SS_SIMPLE | WS_VISIBLE | SS_BITMAP, CRect(...), pParent))
return FALSE;

m_img1.Create("", SS_BITMAP | SS_CENTERIMAGE | WS_VISIBLE, CRect(...), this);
m_img2.Create("", SS_BITMAP | SS_CENTERIMAGE | WS_VISIBLE, CRect(...), this);
}3.有一个Dialog上面动态创建了一个CMyStatic的对象m_mystt
int CMyDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
...
m_mystt.CreateMyStt(this);
...
}
问题来了:
当在Dialog里面调用m_mystt.Show1()或者m_mystt.Show2()的时候,m_mystt并没有刷新!必须要调用Invalidate()才行,调用m_mystt.Invalidate()都不行。请问这是怎么一回事情呢?应该怎么处理才可以避免这个问题?

解决方案 »

  1.   

    因为你那样做并没有发出WM_PAINT消息
      

  2.   

    why?
    调用m_mystt.Invalidate()不是就向m_mystt发出了WM_PAINT消息吗?
      

  3.   

    我试过在CMyStatic::CreateMyStt()中,创建m_img1和m_img2的时候父窗口指针传pParent就不存在这个问题(但是坐标和其它一些东西会有问题),似乎与控件的层次有关
      

  4.   

    在Show1、Show2中调用InvalidateRect刷新CMyStatic中子控件区域。