程序描述:
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.有一个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()都不行。请问这是怎么一回事情呢?应该怎么处理才可以避免这个问题?
调用m_mystt.Invalidate()不是就向m_mystt发出了WM_PAINT消息吗?