VC :在对话框中的控件中绘图

摘要:
或者:我现在在对话框中放置一个静态文本,并使用CWndpwnd=GetDlgItem;CDC*pDC=GetDc();在pDC中绘制的问题是,在静态文本中绘制时,它以像素为基本单位,这与实际情况不同。例如,我想画一个半径为1的圆。如果我以一个像素为基本单位,它基本上是一个非常小的点。第二个问题是我在矩形中画一个点,它实际上是一个长度为2像素的矩形。我想问是否有更好的方法来得出结论。

如果我们只想在某个空间窗口内绘图的话,则应避免重复绘制对话框元素。如果只想显示一些文本,我们可以利用对话框编辑器来创建一个具有特殊ID的空静态控件,然后在对话框的成员函数中调用CWnd::SetDlgItemText函数,以便在该控件中显示文本。

如果想显示图形的话,必须利用ClassWizard相对话框中加入OnPaint成员函数,该函数必须将静态控件的ID转换CWnd指针,然后在得到他的设备环境。这里的一个技巧就在于我们既要在控件窗口绘图,又要防止Windows对他进行重复绘制。我们可以通过利用Invalidate/UpdateWindow这一调用序列来达到这一效果。

例:CWnd * pWnd = GetDlgItem(IDC_STATIC); //IDC_STATIC1 specified in the dialog editor
CDC * pControlDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->Rectangle(0,0,10,10);
pWnd->ReleaseDC(pControlDC);

我们可以利用以下语句在对话框的其他成员函数中强行调用OnPaint函数

Invalidate();

也可以:

响应WM_PAINT消息 在OnPaint函数里面定义CPaintDC dc(this); 然后用这个dc进行绘图就是了,跟在视图类中绘图中一样。

或者:

我现在是在对话框内放了一个静态文本, 用 CWnd pwnd=GetDlgItem(IDC_STATIC); CDC *pDC=GetDc(); 再在pDC绘图,现在遇到的问题是,在静态文本内绘图,它是以像素为基本单位的,和实际有些区别,比如说我要画的是一个半径为1的圆,如果以一个像素为基本单位,根本就是一个很小的点, 问题二,就是我画点是以Rectangle(250,150,252,152)实际上是一个长度为2像素的矩形,想问问有没有画点更好的方法。

// 设置窗口大小

SetWindowPos(0, 0, 0, 500, 500, SWP_NOMOVE);

免责声明:文章转载自《VC :在对话框中的控件中绘图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sed的使用Csharp: Winform 顏色選擇器 Color convert RGB and RGB convert Color下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

聚合初始化

从当前C++标准库中提取,提供了两个容器来表示数组的概念:array表示静态数组,vector表示动态数组。这两种类型都可以使用列表初始化进行初始化。std::array={1,2,3,4,5};std::vector<int>={1,2,3,4,5};这实际上是聚合初始化。聚合初始化历史悠久,在C语言中就已经存在。intarray[5]={1,2,3,4,...

"SQLserver 事务日志已满"解决方法

如果不够,备份后换个地方存[注:tempdb你数据库名称。...

阿里巴巴开源性能监控神器Arthas初体验

今天跟大家介绍一款阿里巴巴开源的性能分析神器Arthas官方网站:https://alibaba.github.io/arthas/index.htmlArthas能为你做什么事情呢?接下来,我们找个项目实际体验一下Arthas。﹏﹏﹏﹏上述几个命令只是性能测工作中常用的一些操作,Arthas还有很多其他维度的监控数据,大家可以去官网看下用户手册学习更多操作...

nginx配置跨域(CORS)、防盗链(valid_referers)、缓存(expires)、压缩(gzip)

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。服务器根据这个值,在许可范围内,则在头信息包含Access-Control-Allow-Origin。...

jquery跨域请求数据

Jquery跨域请求数据Jquery跨请求数据。事实上,这很容易。请遵循以下步骤:首先,编写js,通过get获取远程数据。请注意,回调参数应添加在链接之后,这意味着将回调函数地址传输到远程页面。',{params},函数cb{alert;alert;},'json');第二:编写处理程序。publicvoidProcessRequest{context.Re...

Java 实体类转json对象,属性名转key后首字母强制被转成小写的解决方案

  2.原因分析我们知道在Java规范中,实体类的属性名的命名规范需要遵循首字母小写的驼峰命名法,既是规范也是约束也是牢笼。如果不喜欢这种实现方式,还可以迭代json取值,将key的首字母转大写,也是可以哒。...