举几个例子吧,
1、在整个屏幕上画画
创建一个基于对话框的MFC AppWizard(exe),添加一个按钮 button1,建立相关联的响应函数OnButton1(),在函数中添加如下代码:
//获取当前桌面的指针
CWnd* pwnd = GetDesktopWindow();
//获取当前桌面的设备上下文
CDC* pdc = pwnd->GetWindowDC();
//画图
for(int x = 0; x < 600; x++)
for(int y = 0; y < 400; y++)
pdc->SetPixel(x,y,x*y);
编译->运行。
关闭程序,会发现桌面的图画还是存在,怎么在关闭对话框程序后使得图画也消失呢?
可以在classwizard中添加一个WM_ONDESTROY消息,并为它创建OnDestroy()函数,在函数中添加如下代码:
GetDesktopWindow()->RedrawWindow(NULL,NULL,RDW_INVALIDATE|RDW_ALLCHILDREN|RDW_ERASENOW);
就ok了。
接着怎么在生成的对话框中画画呢,可以用CClientDC即当前程序的设备上下文。创建第二个按钮button2和对应的响应函数OnButton2(),在OnButton2()中添加如下代码:
CClientDC pdc(this);
for(int x = 0; x < 200; x++)
for(int y = 0; y < 200; y++)
pdc.SetPixel(x,y,x*y);
如果要为对话框设置一个背景画呢,那就要重写OnPaint()函数了,将OnPaint()中的代码用以下代码替换:
CPaintDC pdc(this);
RECT* prect = &pdc.m_ps.paintrect;
for(int x = 0; x < prect->right; x++)
for(int y = 0; y < prect->bottom; y++)
pdc->SetPixel(x,y,x+y);