vc++中绘图~不建立一个MFC应用程序是么但调用CDC类的moveto,lineto函数来画图~
和这个问题有些相似~~http://zhidao.baidu.com/question/190919851.html?fr=qrl&cid=866&index=4&fr2...
和这个问题有些相似~~http://zhidao.baidu.com/question/190919851.html?fr=qrl&cid=866&index=4&fr2=query
但我太菜~没有弄得很明白~希望高手给我解释一下~最好是有具体一点例子~急求啊~谢谢啊~ 展开
但我太菜~没有弄得很明白~希望高手给我解释一下~最好是有具体一点例子~急求啊~谢谢啊~ 展开
展开全部
1. 不知用MFC库与头文件,是无法调用CDC的。
2. 如果你建立的不是MFC程序,那么俺假设你建了win32程序或者win32控制台程序。
1. 你的代码中添加相应的头文件
2. 工程中选择使用MFC库
3. 假设你的程序中创建了窗口,那么,可以通过窗口句柄hWnd构造CDC。
例如:Attach(::GetDC(hWnd)); CDC::FromHandle,
构造方法很多,这取决于你当时在处理什么windows消息。有时windows消息中会带HDC,可以直接用HDC句柄构造CDC,如果消息中不带HDC,你就需要用WIn32函数获取HDC.不同的消息中对HDC的回收也是不一样的,有的消息里你回收(Relese)了会出问题。
4. 一旦完成CDC的构造,当然是成功构造之后,你就能调用画线函数了。
CDC类,本质上是封装了HDC和使用HDC的一系列GDI函数,因此有了HDC你就能构造MFC中任何一个DC类。
2. 如果你建立的不是MFC程序,那么俺假设你建了win32程序或者win32控制台程序。
1. 你的代码中添加相应的头文件
2. 工程中选择使用MFC库
3. 假设你的程序中创建了窗口,那么,可以通过窗口句柄hWnd构造CDC。
例如:Attach(::GetDC(hWnd)); CDC::FromHandle,
构造方法很多,这取决于你当时在处理什么windows消息。有时windows消息中会带HDC,可以直接用HDC句柄构造CDC,如果消息中不带HDC,你就需要用WIn32函数获取HDC.不同的消息中对HDC的回收也是不一样的,有的消息里你回收(Relese)了会出问题。
4. 一旦完成CDC的构造,当然是成功构造之后,你就能调用画线函数了。
CDC类,本质上是封装了HDC和使用HDC的一系列GDI函数,因此有了HDC你就能构造MFC中任何一个DC类。
追问
有几个问题~
1. 你的代码中添加相应的头文件
请问是什么头文件啊~
2. 假设你的程序中创建了窗口,那么,可以通过窗口句柄hWnd构造CDC
建造的不是MFC程序~怎麽创建窗口啊~
那个~我是初学MFC~还没什么概念~能详细一点麽~
追答
case WM_PAINT:
{
RECT re;
::GetClientRect(hWnd, &re);
hdc = BeginPaint(hWnd, &ps);
CDC cdc;
cdc.Attach(hdc);
cdc.FillRect((CRect *)&re, &CBrush(RGB(111, 12, 160)));
cdc.Detach();
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
{
isMouseDown = true;
isFirstDraw = true;
start.x = LOWORD(lParam);
start.y = HIWORD(lParam);
}
break;
case WM_LBUTTONUP:
{
isMouseDown = false;
}
break;
case WM_MOUSEMOVE:
{
static CPen pen(PS_SOLID, 3, RGB(56, 200, 77));
if(!isMouseDown) {
return DefWindowProc(hWnd, message, wParam, lParam);
}
if( (rand() % 100) < 32 ) //for performace
return DefWindowProc(hWnd, message, wParam, lParam);
HDC dc = ::GetDC(hWnd);
CDC cdc;
cdc.Attach(dc);
cdc.SelectObject(pen);
::SetROP2(cdc, R2_NOTXORPEN);
POINT temp = { current.x, current.y }; ////for performace , first update, then erase
current.x = LOWORD(lParam);
current.y = HIWORD(lParam);
cdc.MoveTo(start.x, start.y);
cdc.LineTo(current.x, current.y);
if(!isFirstDraw) {
cdc.MoveTo(start.x, start.y);
cdc.LineTo(temp.x, temp.y);
} else {
isFirstDraw = false;
}
cdc.Detach();
::ReleaseDC(hWnd, dc);
}
break;
这个例子说明了如何在win32中使用MFC,,,
当然,,也可在win32中直接继承 mfc中的类。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询