作者:丶沈丨灬de艳本人 | 来源:互联网 | 2023-10-11 16:18
问题描述:我在WindowsCE操作系统中,开发一个小程序,采用mfc基于对话框来编写。简单来说,就是程序中通过串口接收(下位机发过来的)一些命令。这些命令有“画点”“画线”“绘
问题描述:
我在Windows CE操作系统中,开发一个小程序,采用mfc基于对话框来编写。
简单来说,就是程序中通过串口接收(下位机发过来的)一些命令。这些命令有
“画点”“画线”“绘制位图”“画矩形”“清屏(其实就是将对话框背景,更改
为全红色,或者全绿色,或者全蓝色)”等等。
现在我在接收下位机通过串口发送过来的“清屏”指令之后,通过Invalidate
函数来刷新背景,在WM_CTLCOLOR消息响应函数中,返回一个相应颜色(红或者绿
或者蓝)的刷子来达到目的。
不过,现在问题出现了。我通过上述方法,修改了对话框背景色之后。当我再次
接收到“画圆”指令,我通过Ellipse函数来画圆。我简单的贴一些代码上来:
BYTE *pbuf = (BYTE*)wParam;
CClientDC dc(this);
int iColorR = pbuf[9], iColorG = pbuf[10], iColorB = pbuf[11];
int iRadius = pbuf[7]/16*1000 + pbuf[7]%16*100 + pbuf[8]/16*10 + pbuf[8]%16;
POINT ptOri = {0};
ptOri.x = pbuf[3]/16*1000 + pbuf[3]%16*100 + pbuf[4]/16*10 + pbuf[4]%16;
ptOri.y = pbuf[5]/16*1000 + pbuf[5]%16*100 + pbuf[6]/16*10 + pbuf[6]%16;
CPen pen(PS_SOLID, 1, RGB(iColorR, iColorG, iColorB));
CPen *pOldPen = dc.SelectObject(&pen);
RECT rc = {0};
rc.left = ptOri.x - iRadius;
rc.top = ptOri.y - iRadius;
rc.right = ptOri.x + iRadius;
rc.bottom = ptOri.y + iRadius;
dc.Ellipse(&rc); // 绘制圆形
dc.SelectObject(pOldPen);
这样总是会画一个内部由白色来填充的圆形。在我没有修改对话框背景色之前,通过Ellipse
函数是可以绘制一个只有边框,内部无填充的圆形。现在都变为了白色。我想应该是跟之前修改
对话框背景色时返回的那个指定颜色的画刷有关。但是更改背景又是必须的功能,画圆我又不想画
内部有白色填充的。请大侠们给小弟支招。我是一个刚刚入行的菜鸟。级别低,只有100分奉上。
但只要回帖的就有分数。分数会根据功劳大小而不同。多谢。
6 个解决方案
CBrush brh(RGB(x,y,z));
CBrush* poldbrh = dc.selectobject(brh);
dc.Ellipse(&rc); // 绘制原型
dc.SelectObject(pOldPen);
dc.SelectObject(pOldbrh);
dc.SelectStockObject(NULL_BRUSH);
dc.Ellipse(&rc); // 绘制圆形
在 WM_PAINT中做所有的绘图操作。
void OnPaint()
{
CPaintDC dc(this);
// 填充背景
dc.FillSolidRect(&rect, RGB(x,y,z));
// 根据绘图指令绘制图形
if (绘制圆)
{
dc.Ellipse(&rc);
}
}
一是问题太简单
二是VC/MFC板块坛友很热心
问题很多解决,尤其感谢2,3楼的大侠。
剩下时间,大家可以自由接分。
呵呵。
晚上9点前结贴。
一是问题太简单
二是VC/MFC板块坛友很热心
问题很快解决,尤其感谢2,3楼的大侠。
剩下时间,大家可以自由接分。
呵呵。
晚上9点前结贴。