VIEW中三个变量
CImage imgOriginal;
int m_nFilterLoad;
SizesEnum m_nImageSize;void CeeeView::OnInitialUpdate() // 加载并显示背景
{
CFormView::OnInitialUpdate();
ResizeParentToFit(); for ( int i=0; i<4; ++i )
ti[i].x = ti[i].y = 50*i; ti[0].type = ti[2].type = TargetType::target;
ti[1].type = ti[3].type = TargetType::jam;
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
HRESULT hResult; hResult = imgOriginal.GetExporterFilterString(strFilter,aguidFileTypes);
if (FAILED(hResult)) {
CString fmt;
return;
} if(FAILED(hResult)) {
return;
} imgOriginal.Destroy();
hResult = imgOriginal.Load(L"C:\\Documents and Settings\\All Users\\Documents\\My Pictures\\示例图片\\Sunset.jpg");
if (FAILED(hResult)) {
return;
} m_nImageSize = SIZE_ORIGINAL;
Invalidate();
UpdateWindow();
}
void CeeeView::OnDraw(CDC* pDC) // 动态显示小位图
{
// TODO: 在此添加专用代码和/或调用基类
CeeeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; for ( int i=0; i<4; ++i )
if ( true == ti[i].available )
{
CBitmap bmp; BITMAP bmpInfo;
if ( 0==ti[i].type )
bmp.LoadBitmap(IDB_BITMAP1);
if ( 1==ti[i].type )
bmp.LoadBitmap(IDB_BITMAP2);
bmp.GetBitmap(&bmpInfo);
// Create an in-memory DC compatible with the
// display DC we're using to paint
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC); // Select the bitmap into the in-memory DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp); // Find a centerpoint for the bitmap in the client area
CRect rect;
GetClientRect(&rect);
ti[i].x +=10;
int nX = ti[i].x;
int nY = ti[i].y ; // Copy the bits from the in-memory DC into the on-
// screen DC to actually do the painting. Use the centerpoint
// we computed for the target offset.
pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCAND); dcMemory.SelectObject(pOldBitmap);
}}
void CeeeView::OnPaint() // 显示背景
{
CPaintDC dc(this); // device context for painting
if (!imgOriginal.IsNull())
{ switch (m_nImageSize)
{
case SIZE_HALF:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);
break;
case SIZE_ORIGINAL:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth(),imgOriginal.GetHeight(),SRCCOPY);
break;
case SIZE_DOUBLE:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()*2,imgOriginal.GetHeight()*2,SRCCOPY);
break;
case SIZE_FILL:
CRect rctWindowSize;
GetClientRect(rctWindowSize);
imgOriginal.StretchBlt(dc,0,0,rctWindowSize.Width(),rctWindowSize.Height(),SRCCOPY);
};
}
CView::OnPaint();
return;
}程序在单独显示小位图 或背景时 都正常, 但希望它同时显示时 就什么都没显示了 请问为何 ? 如何解决 ? 谢谢
CImage imgOriginal;
int m_nFilterLoad;
SizesEnum m_nImageSize;void CeeeView::OnInitialUpdate() // 加载并显示背景
{
CFormView::OnInitialUpdate();
ResizeParentToFit(); for ( int i=0; i<4; ++i )
ti[i].x = ti[i].y = 50*i; ti[0].type = ti[2].type = TargetType::target;
ti[1].type = ti[3].type = TargetType::jam;
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
HRESULT hResult; hResult = imgOriginal.GetExporterFilterString(strFilter,aguidFileTypes);
if (FAILED(hResult)) {
CString fmt;
return;
} if(FAILED(hResult)) {
return;
} imgOriginal.Destroy();
hResult = imgOriginal.Load(L"C:\\Documents and Settings\\All Users\\Documents\\My Pictures\\示例图片\\Sunset.jpg");
if (FAILED(hResult)) {
return;
} m_nImageSize = SIZE_ORIGINAL;
Invalidate();
UpdateWindow();
}
void CeeeView::OnDraw(CDC* pDC) // 动态显示小位图
{
// TODO: 在此添加专用代码和/或调用基类
CeeeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; for ( int i=0; i<4; ++i )
if ( true == ti[i].available )
{
CBitmap bmp; BITMAP bmpInfo;
if ( 0==ti[i].type )
bmp.LoadBitmap(IDB_BITMAP1);
if ( 1==ti[i].type )
bmp.LoadBitmap(IDB_BITMAP2);
bmp.GetBitmap(&bmpInfo);
// Create an in-memory DC compatible with the
// display DC we're using to paint
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC); // Select the bitmap into the in-memory DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp); // Find a centerpoint for the bitmap in the client area
CRect rect;
GetClientRect(&rect);
ti[i].x +=10;
int nX = ti[i].x;
int nY = ti[i].y ; // Copy the bits from the in-memory DC into the on-
// screen DC to actually do the painting. Use the centerpoint
// we computed for the target offset.
pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCAND); dcMemory.SelectObject(pOldBitmap);
}}
void CeeeView::OnPaint() // 显示背景
{
CPaintDC dc(this); // device context for painting
if (!imgOriginal.IsNull())
{ switch (m_nImageSize)
{
case SIZE_HALF:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);
break;
case SIZE_ORIGINAL:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth(),imgOriginal.GetHeight(),SRCCOPY);
break;
case SIZE_DOUBLE:
imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()*2,imgOriginal.GetHeight()*2,SRCCOPY);
break;
case SIZE_FILL:
CRect rctWindowSize;
GetClientRect(rctWindowSize);
imgOriginal.StretchBlt(dc,0,0,rctWindowSize.Width(),rctWindowSize.Height(),SRCCOPY);
};
}
CView::OnPaint();
return;
}程序在单独显示小位图 或背景时 都正常, 但希望它同时显示时 就什么都没显示了 请问为何 ? 如何解决 ? 谢谢
解决方案 »
- 关于ATL控件和OpenGL结合的一个技术问题——纹理映射
- 注册文件系统事件SHChangeNotifyRegister后,如何从lParam参数中获得被改动的文件或文件夹的信息.例如获得新创建的文件名
- 在服务中读取注册表的问题?
- 向窗口发送按键消息
- VC中怎么制作日志文件
- 如何使用在dll中创建的PropertyPage? Sheet 在Exe中。在Release 模式没有问题。在debug中有断言错误//附原码
- win2k下,按backspace键后,发向CMD.exe进程的是什么东东?
- 请问如何在Windows下直接访问硬盘扇区啊
- 紧急求助:如何利用SDK添加工具条按钮。(无内容)
- 完成端口 内存泄漏
- 向cnzdgs提问!关于移动打开文件对话框的问题!
- 显示图片
void CeeeView::OnPaint() // 显示背景
{
CPaintDC dc(this); // device context for painting
OnDraw(&dc);
} 即可。
CPaintDC dc(this); // device context for painting
OnDraw(&dc);