MFC单文档多线程画图时,怎么得到CDC 和 HDC画图的句柄。 cdc*pdc = this->getdc错了,我该怎么用

DWORD WINAPI DRAWTHREAD(LPVOID PARAM)
{
CDC *pDC= ??
HDC *hDC= ??
}

这个做法不好,GDI并不是线程安全的,正确的做法是你不断更新内存中的一张位图,然后在正常的OnPaint里面,把内存中的位图复制到DC中。复制的时候你还要注意保证复制的同时,你的线程没有正好在更新这张位图。

位图的句柄等可以通过线程函数的参数(你这里是PARAM)来传递。

CreateThread或者AfxBeginThread均有一个参数,可以直接传递到你的线程函数的PARAM中。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-03
把画图窗口的指针利用这个参数LPVOID PARAM传给线程。
CWnd *pWnd = (CWnd *)PARAM;
CDC *pDC = pWnd->GetWindowDC();本回答被提问者采纳
第2个回答  2011-09-03
1、使用全局变量,CDC *g_pDC = NULL;
在OnDraw中为其赋值。
在线程中判断g_pDC不为空,则执行函数体。
2、将pDC作为PARAM传进去。
3、使用全局变量theApp来获取所需的CDC。
第3个回答  2011-09-03
多线程直接调用dc在同一界面下画图,可能会出现错误,两个线程可能会冲突,建议参考一下msdn的例程mtgdi
第4个回答  2011-09-03
cdc *pdc=pWnd->GetDC()
HDC DC=pdc->GetSafeHwnd()
是这个意思?

hdc上画图怎么拷贝到cdc
HDC 和 CDC 是两套东西。HDC 用于视窗 Win API 程序,CDC 用于视窗 MFC 程序。两者函数基本一样,写法略有不同。例如画直线,LineTo(hdc,x,y); -- HDC pDC->LineTo(x,y); -- CDC HDC 函数 的第一个参数 是 HDC 的 对象 hdc ( 句柄)CDC 所有函数 则为它的 class的 成员函...

CDC *pDC=GetDC();
首先:计算机一般是不会骗人的,信你还是信计算机?我信计算机!看看最原始的函数原型:HDC GetDC(HWND hWnd \/\/ handle to window );你的GetDC()写在不同的地方有不同的含义,你学了类的概念就知道了。

mfc 绘图问题
C**View ::***(){ CDC *pDC;pDC=GetDC();pDC->Ellipse(10,10,10,10);ReleaseDC(pDC);} 本人初学,一同学习,共同进步 QQ631496417

CDC memdc; CDC* pDC = this->GetDC(); memdc.CreateCompatibleDC(pD...
GetDC(); 获得CClientDC ,memdc.CreateCompatibleDC(pDC); 创建与pDC的兼容的内存DC(利用文件映射机制,模拟的内存DC,速度快,相当于直接在内存中操作DC)

C++2008 View类的句柄
这样用:hdc=::GetDC(this->m_hWnd);其实如果已经使用MFC了,那么最好使用CDC类,例如:CDC *pDC = this->GetDC();\/\/从(0,0)到(300,300)画一条线 pDC->MoveTo(10,10);pDC->LineTo(300,300);

我想在基于对话框的MFC程序中画图,画图程序可以不写在OnPaint函数中吗...
1.可以不在OnPaint中 2.其机制是:a.windows是多窗口的,你的程序不应该把图画到其它地方去,所以你要取得窗口的专门管绘图的一个句柄,叫做 HDC b.你用MFC,要取它的话用这句: CDC* pDC=this->GetDC(); (某窗口的DC,例如本窗口就是this)c.然后就可以向DC中画了,例如:pDC->LineTo(100,100...

CDC *pDC=GetDC()画图的一些问题
(rect.Width() - cxIcon + 1) \/ 2;int y = (rect.Height() - cyIcon + 1) \/ 2;\/\/ Draw the icon dc.DrawIcon(x, y, m_hIcon);} else { CDialog::OnPaint();} static int i=0;CDC *pDC=GetDC();if(i==1)pDC->Rectangle(0,0,100,100);i++;ReleaseDC(pDC);} ...

CDC *pDC=GetDC();具体是什么意思?
CDC *pDC=GetDC() 返回GetDC()获取的CDC对象。后就就可以对该对象进行操作 【注】这里的GetDC()是CWnd的成员函数,其返回值是一个CDC的指针,并把这个返回值存在pDC这个指针变量里。CDC是一个关于DC的类,其中封装了与DC操作相关的一系列操作。GetDC()这个函数是用来从窗口客户区中获取一个DC来...

VC 解释一下CDC *pDC=pWnd->GetDC();
CDC *pDC=pWnd->GetDC();1.用CDC(MFC的设备上下文)实例化一个对象的指针 2.为这个对象的指针赋值为pWnd 3.pWnd被赋值为GetDC.相当于用API的DC实例化一个对象的指针pWnd 小结:用MFC的设备上下文实列化一个指针的对象,这个指针对象的值来源于API的设备上下文实例化。=== 实际上,MFC的大多...

MFC在单文档打开的图片中怎么选中某个区域,并且得到该区域的内容和RGB...
VC默认的),这个点是终点。。有了起点和终点,CRect就出来了。。区域就是这个CRect。。至于对话框。。在RescourcesView里先自己加个出来。。再从class wizard里加相应的处理。。显示该区域内容和得到其RGB值的范围都有现成的函数用的。。MSDN查下吧。。至于您那段代码。。小弟没看。。。咩哈哈 ...

相似回答