view.h
int m_nflagStop;
CBitmap m_bmOffScreen;//这两个定义我已经查过了,原程序中的定义是这样的
LPBYTE m_lpBits; //这两个定义我已经查过了,原程序中的定义是这样的view.cpp
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldMem = dcMem.SelectObject(&m_bmOffScreen);
//m_bmOffScreen的数据类型应该怎样定义?
CRect rect(0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN));
dcMem.FillSolidRect(rect, ::GetSysColor(COLOR_WINDOW));
int nCx, nCy;
nCx = dcMem.GetDeviceCaps(HORZRES) / 2;
nCy = dcMem.GetDeviceCaps(VERTRES) / 2;
dcMem.SetViewportOrg(nCx, nCy);
MyDrawFunction(&dcMem);//这是个我自己编写的描画函数 if (1 == m_nflagStop)
{
KillTimer(1);
}
dcMem.SetMapMode(MM_TEXT);
dcMem.SetViewportOrg(0, 0);
CRect rcClient;
GetClientRect(rcClient);
pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &dcMem, 0, 0, SRCCOPY);
dcMem.SelectObject(pOldMem);
}
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = dc.GetDeviceCaps(HORZRES);
bmi.bmiHeader.biHeight = dc.GetDeviceCaps(VERTRES);
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hOffScreen = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (LPVOID*)m_lpBits, NULL, 0);
m_bmOffScreen.Attach(hOffScreen);
// m_lpBits的数据类型应该怎样定义?
return 0;
}
/*我将OnCreate()中的这段码移到OnSize()中后发现即使通过了编译,程序也无法正常运行。*/
void CSMNView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (::IsWindow(m_hWnd)){ //即使取消这段码
m_bmOffScreen.DeleteObject(); // 也还是一样
delete m_lpBits; //
}
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = cy;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hOffScreen = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (LPVOID*)m_lpBits, NULL, 0);
m_bmOffScreen.Attach(hOffScreen);}
int m_nflagStop;
CBitmap m_bmOffScreen;//这两个定义我已经查过了,原程序中的定义是这样的
LPBYTE m_lpBits; //这两个定义我已经查过了,原程序中的定义是这样的view.cpp
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldMem = dcMem.SelectObject(&m_bmOffScreen);
//m_bmOffScreen的数据类型应该怎样定义?
CRect rect(0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN));
dcMem.FillSolidRect(rect, ::GetSysColor(COLOR_WINDOW));
int nCx, nCy;
nCx = dcMem.GetDeviceCaps(HORZRES) / 2;
nCy = dcMem.GetDeviceCaps(VERTRES) / 2;
dcMem.SetViewportOrg(nCx, nCy);
MyDrawFunction(&dcMem);//这是个我自己编写的描画函数 if (1 == m_nflagStop)
{
KillTimer(1);
}
dcMem.SetMapMode(MM_TEXT);
dcMem.SetViewportOrg(0, 0);
CRect rcClient;
GetClientRect(rcClient);
pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &dcMem, 0, 0, SRCCOPY);
dcMem.SelectObject(pOldMem);
}
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = dc.GetDeviceCaps(HORZRES);
bmi.bmiHeader.biHeight = dc.GetDeviceCaps(VERTRES);
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hOffScreen = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (LPVOID*)m_lpBits, NULL, 0);
m_bmOffScreen.Attach(hOffScreen);
// m_lpBits的数据类型应该怎样定义?
return 0;
}
/*我将OnCreate()中的这段码移到OnSize()中后发现即使通过了编译,程序也无法正常运行。*/
void CSMNView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if (::IsWindow(m_hWnd)){ //即使取消这段码
m_bmOffScreen.DeleteObject(); // 也还是一样
delete m_lpBits; //
}
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = cy;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hOffScreen = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (LPVOID*)m_lpBits, NULL, 0);
m_bmOffScreen.Attach(hOffScreen);}
m_bmOffScreen.DeleteObject(); // 也还是一样
delete m_lpBits; //
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = cy;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
HBITMAP hOffScreen = ::CreateDIBSection(dc, &bmi, DIB_RGB_COLORS,(LPVOID*)m_lpBits, NULL, 0);
m_bmOffScreen.Attach(hOffScreen);
}
if (::IsWindow(m_hWnd)){ //即使取消这段码
m_bmOffScreen.DeleteObject(); // 也还是一样
delete m_lpBits; //这样做是否有问题?
OnCreate(){
CClientDC dc(this);
BITMAPINFO bmi;
bmi.bmiHeader.biSize
....................
}
和现在的版本
OnSize()
{
.............
}