本人刚接触vc编程,想实现一个这样的功能.
CBitmap bitmap;void onPaint()
{
CPaintDC dc(this);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&dc);
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
dc.BitBlt(0, 0, bmpInfo.bmWidth - 100, bmpInfo.bmHeight - 100,&bitmapDC, 0, 0, SRCCOPY);
}
void onButton()
{
//在这里面得到当前窗体位图
bitmap = ```````````//这里要该怎么做?}其实我就是想实现:我本来在窗提画了很多东西,但一刷新就不在了,现在就需要在刷新前保存以前画的,在刷新的时候在把以前画的东西画上去.各位大虾帮忙看看,我才学很多不知道,请各位不吝赐教,分数好说.
CBitmap bitmap;void onPaint()
{
CPaintDC dc(this);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&dc);
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
dc.BitBlt(0, 0, bmpInfo.bmWidth - 100, bmpInfo.bmHeight - 100,&bitmapDC, 0, 0, SRCCOPY);
}
void onButton()
{
//在这里面得到当前窗体位图
bitmap = ```````````//这里要该怎么做?}其实我就是想实现:我本来在窗提画了很多东西,但一刷新就不在了,现在就需要在刷新前保存以前画的,在刷新的时候在把以前画的东西画上去.各位大虾帮忙看看,我才学很多不知道,请各位不吝赐教,分数好说.
解决方案 »
- 谁有计算机专业优秀论文啊?
- RE:Visual C++ 6.0如何导入其他的.h文件(象导入stdio.h这类基本库一样)?
- 一个关于EditCtrl比较变态的需求的解决方案
- 如果得到当前的时间,精确到毫秒的?----在线给分----
- 必须用微软的编辑控件做编辑器?我不服!散分100求前辈高人指点
- Windows SDK 如何实现窗口重绘? 谢谢!!~~~
- 我如何知道我用VC编出的程序调用了那些VC带的DLL
- 关于局域网之间的连接以及完成端口
- 急! 网上哪里有编译原理的学习资料??
- 如何在用ATL制作的COM中返回一個Recordset??
- 新手问题
- 安装了platform.sdk后,vc就可以自动识别它了吗?
刷新怎么会刷掉画的东西呢?除非是你使程序发送了没有经过处理的WM_PAIN消息我也是菜鸟,仅供参考
void CDrawTest12Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
switch(mouseStyle)
{
case 0:
break;
case 1:
case 2:
isDraw = TRUE;
nPointStart = point;
break;
case 3:
isDraw = FALSE;
nPointStart = point;
break;
}
CDialog::OnLButtonDown(nFlags, point);
}void CDrawTest12Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
switch(mouseStyle)
{
case 0:
break;
case 1:
case 2:
isDraw = FALSE;
nPointEnd = point;
break;
case 3:
isDraw = TRUE;
nPointEnd = point;
break;
}
Invalidate(FALSE);
CDialog::OnLButtonUp(nFlags, point);
}void CDrawTest12Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
switch(mouseStyle)
{
case 0:
break;
case 1:
case 2:
nPointEnd = point;
break;
case 3:
break;
}
Invalidate(FALSE);
// TODO: Add your message handler code here and/or call default
}void CDrawTest12Dlg::OnPoint()
{
// TODO: Add your control notification handler code here
mouseStyle = ERASER;
eraserWidth = 4;
isDraw = FALSE;
}void CDrawTest12Dlg::OnButton4()
{
// TODO: Add your control notification handler code here
nPenStyle = PS_SOLID;
crColor = RGB(0,255,255);
nWidth = 2;
}void CDrawTest12Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting //test();
if(isFirstPaint)
{
drawCavnes();
isFirstPaint = FALSE;
}
if(isDraw)
{
CPen pen;
CPoint line[2];
switch(mouseStyle)
{
case 0:
break;
case 1:
pen.CreatePen(nPenStyle, nWidth, crColor);
dc.SelectObject(&pen);
line[0] = nPointStart;
line[1] = nPointEnd;
nPointStart = nPointEnd;
dc.Polyline(line, 2);
break;
case 2:
pen.CreatePen(nPenStyle, eraserWidth, RGB(255,255,255));
line[2];
dc.SelectObject(&pen);
line[0] = nPointStart;
line[1] = nPointEnd;
nPointStart = nPointEnd;
dc.Polyline(line, 2);
break;
case 3:
dc.MoveTo(nPointStart);
dc.LineTo(nPointEnd);
break;
}
}
// TODO: Add your message handler code here
// Do not call CDialog::OnPaint() for painting messages
}
可以使用CArchive类进行处理,也可以使用CObList进行处理!
直接放在OnPaint()函数里面
这样重画的时候也会画上你画的东西
以前做过实时曲线 历史曲线方面的 只是没太明白楼主意思 想的有点简单
wzbhbb() :
GetClientRect(&rectClient);
memDC.CreateCompatibleDC(&dc);
memBitmap.CreateCompatibleBitmap(&dc, rectClient.right, rectClient.bottom);
memBitmap就是得到的位图么?但好像得不到呢?!
------------------------------
bitmap申明成成员变量就行了.
CreateCompatibleBitmap是创建与设备内容兼容的位图,它只创建了一个模版,其中并没有位图信息
我现在做的是
在这个
CPaintDC dc(this);
CRect rectClient;
GetClientRect(&rectClient);
//draw cpu free usges
memBitmap.CreateCompatibleBitmap(&dc, rectClient.right, rectClient.bottom);//得到位图
-------------------------------------------------------
在
void CDrawTest12Dlg::test()
{
CPaintDC dc(this); // device context for painting
CRect rectClient; memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&memBitmap);
dc.BitBlt(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom,
&memDC, 0, 0, SRCCOPY);
}
画位图
但不对:(
如果你想要保存变量的画得在DOC里操作。看看文档操作一章!