对话框上绘图

对于如何在SDK以及单文档界面的用户区上画图,介绍得都比较多,其实最关键的就是要获得DC,然后就可以调用GDI函数来在与DC关联的环境上画图了。
现在要想在对话框上画图,最关键的问题就是先用何种控件,以及如何获得该与控件相关的DC。
我比喜欢用Picture控件,其实静态文本框控件也可以,但总觉得前都要专业一点。在Picture的Properties里面的General选项卡里面的Rectangle组合框里面选择Rectangle然后Color选择White,这样是不是就有一点单文档界面的味道了。把它的ID改为IDC_STATIC_PICTURE,为什么要改呢?下面再说。
    那么如何在上面画图呢?
    我们添加一个按钮,并在它的响应函数里面添加上
CClientDC dc(GetDlgItem(IDC_STATIC_PICTURE)); // 获得控件的CWnd,之所以要把ID改为IDC_STATIC_PICTURE就是为了与其它静态控件区别出来
dc.MoveTo(0,0);
dc.LineTo(30,30);
    这些处理方式与单文档的处理方式基本上是一样的。然后编译运行就OK了
   
    在画图过程中也可能会遇到一些问题:
1.控件上绘好图之后,鼠标移上去停留两秒之后,会出现一条白线, 这是由于你开了金山词霸或有道词典等桌面工具的缘故。
2.被其它窗口挡住并移开之后,变成空白, 原因很简单窗口要重绘,但是到哪重绘呢?到对话框的WM_PAINT消息所对应的OnPaint函数里面去。

 

以上来自网友的参考:

在wince平台上,本人使用picture控件绘图没有实现,好像是不支持。

在静态文本控件上的绘图,代码如下:(将如下代码放到按钮的单击事件中,添加一个静态文本控件ID 值是IDC-SS)

PAINTSTRUCT ps;
 RECT rect;
 HDC hdc;
 CClientDC dc(GetDlgItem(IDC_SS)); // 获得控件的CWnd
 HWND hWnd=this->GetSafeHwnd();
 HBRUSH hBr,hOldBr;

 this->GetClientRect(&rect);
 //GetClientRect(hWnd,&rect);
    //BeginPaint(&ps);
 hdc = *BeginPaint(&ps);
 if(tag==true)
  {hBr=(HBRUSH)GetStockObject(WHITE_BRUSH);
  tag=false;
  }
 else
  {
  hBr=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
  tag=true;
  }
 hOldBr=(HBRUSH)SelectObject(dc,hBr);
 Ellipse(dc,10,10,80,80);
 SelectObject(dc,hOldBr);
 EndPaint(&ps);

 

 

 

本人运行通过。

有不对的地方请指点,谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值