VC中的DC

DC(Device Context) 设备上下文,可以理解为我们要在上面写写画画的那张纸。VC中有CDC CClientDC,CPaintDC。

举几个例子吧,

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);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值