CDialog *m_pDlg = new CDialog();
//m_pDlg = new DialogShow();
if(m_pDlg)
{
if(!m_pDlg->Create(IDD_DLGSHOW, this))
{
MessageBox( _T("对话框初始化失败"), _T("温情提示") );
return ;
}
}////////////////我用Create创建了一个对话框。DWORD* pResultBuf = NULL; pDC= m_pDlg->GetDC(); //然后截取屏幕到为bmp到 pResultBuf中。为什么用如下代码显示不到上面的对话框中。 if(bm.CreateBitmap(497, 448,1,32, pBuffer))
{
CBrush brush;
if(brush.CreatePatternBrush(&bm))
{
CBrush* pOldBrush = (CBrush*)pDC->SelectObject(&brush);
pDC->FillRect(&CRect(rect.left + m_ShowOffsetX, rect.top + m_ShowOffsetY,
497, 448), &brush);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
}
bm.DeleteObject();
ReleaseDC(pDC);
}
解决方案 »
- VC6.0 CSocket类的接收数据速度
- 求用win32api编写一个Com组件(服务器)最简单的例子,不依赖MFC/ATL的。
- 关于拖拽时的内存释放
- 怎么显示正确的窗口
- 初学<深入浅出MFC>,第3章仿真中一个this指针的问题.
- 请问哪里有用完成端口做的UDP服务器代码?
- TCP中的超时重传之间不同的时间差的倍数关系(比如第一次重传的时间是6秒,然后第2次是12秒)是怎么回事( TCP/IP详解)?
- 战斗工作室成立宣言--看过的朋友顶一下
- 在Linux下的几行代码,拿到Windows下怎么就出错了?
- 为什么我的vc程序会有问题阿?
- vc picture控件装载图片时实现如 百叶窗等特效
- vc++与ado连接的更新记录问题?
pBuffer 里面我已经截取了屏幕并以bmp格式存在pBuffer里面呀。
我现在用GetDC取到对话框的DC,然后用画刷画出pBuffer里的内容来。
不知道我上面的代码哪里出错了?
有一个hdc的参数,?咋取?
在pDC->SelectObject(pOldBrush);前面调用BitBlt函数
哪有啊?我根本就没有看到BitBlt啊?我是回复的楼主这句话
===============
你到底显示在哪个对话框上啊?第一个还是另一个啊?你传啊个DC给哪个啊?
第一个对话框上有一个按钮,点击后用的是create方法创建的第二个对话框, 然后在第一个对话框上有一个显示图像的函数,这个函数有个参数传入第二个话框的DC(m_pDlg->GetDC();), 然后用这个函数在第二个对话框显示图像。不知这样解释清楚没有?
{
CBrush brush;
if(brush.CreatePatternBrush(&bm))
{
CBrush* pOldBrush = (CBrush*)pDC->SelectObject(&brush);
pDC->FillRect(&CRect(rect.left + m_ShowOffsetX, rect.top + m_ShowOffsetY,
497, 448), &brush);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
}
bm.DeleteObject();
ReleaseDC(pDC);
}首先,你得测试下你这个代码在正常对话框上,能不能显示出你想要的图.
如果能,那你得看看
CRect(rect.left + m_ShowOffsetX, rect.top + m_ShowOffsetY, 497, 448),
这个矩形所在的位置,是否不在你的new出来的对话框可见区域.
CDC memDC;
CBitmap memBitmap;
if(memDC.CreateCompatibleDC(pDC))
{
AfxMessageBox("ok1");
}
else
{
AfxMessageBox("error1");
}
if(memBitmap.CreateBitmap(497,448,1,32, pBuffer))
{
AfxMessageBox("ok2");
}
else
{
AfxMessageBox("error2");
}
CBitmap* pOldBitmap= memDC.SelectObject(&memBitmap);
pDC->BitBlt(0,0,497,448,&memDC,0,0,SRCCOPY);
if(memDC.SelectObject(pOldBitmap))
{
AfxMessageBox("ok3");
}
else
{
AfxMessageBox("error3");
}
memBitmap.DeleteObject();
ReleaseDC(pDC);
上面的代码弹出error3 对话框。 不知道哪里有错。
========
能显示出来吗?我觉得是一定显示不出来。
memBitmap.CreateBitmap(497,448,1,32, pBuffer)
要改成
CreateCompatibleBitmap
========================================另外,你1楼的代码没问题,怀疑你绘图的区域有问题,你再检查一下
CRect(rect.left + m_ShowOffsetX, rect.top + m_ShowOffsetY,497, 448);
//bm.CreateBitmap(497,448,1,32, pBuffer); 用上面的代码,我直接注释掉这一句,可以看到一个黑框在对话框里,说明区域是对的。
但如何把pBuffer的内容显示出来。
//bm.CreateBitmap(497,448,1,32, pBuffer); 用上面的代码,我直接注释掉这一句,可以看到一个黑框在对话框里,说明区域是对的。
但如何把pBuffer的内容显示出来。
===============
你的pBuffer中是位图数据,你可以用
DWORD SetBitmapBits(
DWORD dwCount,
const void* lpBits
);
将pBuffer中的数据导入到一个CBitmap对象中去,然后显示。
先把pBuffer里的位图数据保存成bmp图片到本地硬盘。然后
LoadImage 进来再BitBlt到客户区中。
不过还有个问题就是创建出来的对话框总是闪动。
第二个对话框是Create出来的,好像OnInitDialog, OnPaint等函数都不执行。
我这个对话框是做成半透明的,然后置顶在屏幕上。
然后再在上面画一些东东。现在创建出的对话框总闪动。
第二个对话框在特定位置显示,并且是半透明的。然后在上面再显示一些东东。
鼠标点上去不会有焦点。会透过这个对话框。
现在基本完成了,图也显示出来了。
只不过会不定的闪动。
高手们给个思路如何去闪动。OnInitDialog, OnPaint等函数都不执行;
有什么办法没?
高手们给个思路如何去闪动。OnInitDialog, OnPaint等函数都不执行;
有什么办法没?
==============
闪动的原因找到了吗?一般是重绘引起的。
应该是重绘引起的,一般情况应该可以在OnPaint来解决,现在不知道在哪解决?
在内存dc上画就应该能解决
CDC *pDC = GetDC();
CDC MemDC;
CDC Bitmap;
MemDC.CreateCompatibleDC(pDC);
Bitmap.LoadBitmap(IDB_GREEN);
CBitmap *oldmap = MemDC.SelectObject(&Bitmap);
pDC->BitBlt(0,0,rect.right,rect.bottom,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(oldmap);
Bitmap.DeleteObject();
MemDC.DeleteDC();
ReleaseDC(pDC);