createpen函数(Cpen::CreatePen()不能连续使用2次)

本文目录
- Cpen::CreatePen()不能连续使用2次
- Delphi7 CreatePen()函数画出来的是黑色
- vc可视化编程的一段函数
- VC 这样使用CreatePen函数为什么会报错
- 代码HPEN red_pen=createPen(PS_SOLID,1,RGB(255,0,0))的涵义是什么
Cpen::CreatePen()不能连续使用2次
是的,不可以这样重复创建。
因为CPen::CreatePen是Constructors函数,就是说,是创建一个画笔,这个创建必须是空画笔才行。之所以这样,是因为CPen类过于简单,只有增删没有改。
CreatePen不能对一个已经创建的画笔再次创建,就好像。。。一个指针不能new两次是一个意思。
Delphi7 CreatePen()函数画出来的是黑色
你把画笔删了,HDC找不到这个画笔,就不能用他。。。。顺便说一下,如果用delphi就没必要使用这些GDI函数,delphi的窗口都有canvas对象属性,已经封装了大部分GDI操作,用法也比这个简单的多,你只需要写canvas.pen.color=clblue后,绘图,线条就能变成蓝色。。。
vc可视化编程的一段函数
void CMainFrame::OnToolsLine()
{
// TODO: Add your command handler code here 这儿添加你的代码
CPen newPen; //定义一个画笔
CPen *oldPen;
newPen.CreatePen(PS_SOLID,m_CurrentThickness,m_CurrentColor); //建一个画笔
CClientDC dc(this); //得dc画布
CRect rect; //定一个rect
GetClientRect(▭); //得客户区dc
dc.FillRect(▭,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));//dc用定义的画刷填rect
oldPen=dc.SelectObject(&newPen); //选入新画笔,并保存原画笔
dc.MoveTo(50,30); //移动画笔到50,30
dc.LineTo(300,200); //画线 50,30---300.200
dc.SelectObject(&oldPen); //还原 原画笔
}
VC 这样使用CreatePen函数为什么会报错
同一个画笔变量,不能重复的Create。当你需要两个不同的画笔时,你需要声明两个CPen变量分别的CreatePen才可以。
另外,你也可以使用指针CPen* ,这样在一次使用之后,销毁一下指针(注意之前要通过SelectObject(pOldPen)将它从dc中除去),就可以再次new CPen;CreatePen了。
代码HPEN red_pen=createPen(PS_SOLID,1,RGB(255,0,0))的涵义是什么
CPen::CreatePen
BOOL CreatePen( int nPenStyle, int nWidth, COLORREF cfColor );
BOOL CreatePen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );
返回值:如果成功则返回非零值或逻辑画笔的句柄;否则返回0。
参数: nPenStyle 指定画笔的风格。其可能取值的列表,请参见CPen构造函数中的nPenStyle参数。
nWidth 指定画笔的宽度。
· 对于CreatePen的第一个版本来说,如果这个值为0,则不管是什么映射模式,以设备单位表示的宽度总是一个像素。
· 对于CreatePen的第二个版本,如果nPenStyle是PS_GEOMETRIC,则宽度以逻辑单位给出。如果nPenStyle是PS_COSMETIC,则宽度必须设置为1。
crColor 包含画笔的一个RGB颜色。
pLogBrush 指向一个LOGBRUSH结构。如果nPenStyle是PS_COSMETIC,则此LOGBRUSH结构的lbColor成员指定画笔的颜色,此LOGBRUSH结构的lbStyle成员必须设置为BS_SOLED。如果nPenStyle为PS_GEOMETRIC,则此结构的所有成员都必须用于指定画笔画刷属性。
nStyleCount 指定lpStyle数组的长度(以双字为单位)。如果nPenStyle不是PS_USERSTYLE,这个值必须是零。
lpStyle 指向一个双字值的数组。第一个值指定一个用户定义的风格中第一段虚线的长度,第二个值指定第一段空白的长度,如此等等。如果nPenStyle不是PS_USERSTYLE,则这个指针必须为NULL。
说明:
CreatePen的第一个版本用指定的风格、宽度和颜色来初始化一支画笔。此画笔以后可选作为任何设备环境的当前画笔。
宽度大于1个像素的画笔总是具有PS_NULL,PS_SOLED或PS_INSIDEFRAME风格。
如果画笔具有PS_INSIDEFRAME风格和某一不匹配逻辑调色板中颜色的颜色,则此画笔用一个混合色来进行绘制。PS_SOLID画笔风格不能用一个混合色来创建一支画笔。当画笔的宽度小于或等于1时,PS_INSIDEFRAME风格等同于PS_SOLID风格。
CreatePen的第二个版本初始化一支具有指定的风格、宽度和刷子属性的逻辑装饰画笔或几何画笔。一支装饰画笔的宽度总是1;几何画笔的宽度总是由世界单位指定。当应用程序创建了一支逻辑画笔之后,它可通过调用CDC::SelectObject函数来将此画笔选入一个设备环境中。当一支画笔被选入一个设备环境之后,它就可以用于画直线或曲线。
· 如果nPenStyle为PS_COSMETIC和PS_USERSTYLE,则lpStyle数组中的项指定风格单位中虚线和空白的长度。一个风格单位由使用此画笔画线的设备定义。
· 如果nPenStyle为PS_GEOMETRIC和PS_USERSTYLE,则lpStyle数组中的项指定虚线和空白的长度(用逻辑单位表示)。
· 如果nPenStyle为PS_ALTERNATE,则忽略风格单位而交替设置像素。
当一个应用程序不再需要一支给定的画笔时,它将调用CGdiObject::DeleteObject成员函数或销毁CPen对象,以使资源不再使用。当一支画笔被选入一个设备环境后,应用程序就不能删除这支画笔了。
RGB(255,0,0):表示颜色值,这里是红色,R(red)G(green)B(blue),三个分量,对应的值范围都是0~255。.
1:是画笔的宽度,这里是1个像素那么宽
PS_SOLID:画笔风格,不能用一个混合色来创建一支画笔

更多文章:
switch case用法举例python(为什么Python中没有Switch/Case语句)
2025年9月27日 18:45
checkbox 选中事件(js动态生成的checkbox取值和选中事件)
2025年9月26日 11:00
用数据库做管理系统(何谓数据库管理系统简述数据库管理系统的功能)
2026年7月20日 19:30
个人述职报告ppt(简约彩色个人述职报告PPT模板最新怎么样)
2025年9月19日 22:30
驽马十驾的故事(“驽马十驾,功在不舍”是什么意思古代早有“龟兔赛跑”的故事!)
2025年8月1日 23:30
memory lapse是什么意思?collapse;是什么意思
2026年5月28日 23:45
delphi三层数据库技术(delphi 多个数据库使用一个三层问题)
2025年12月4日 01:45
count函数怎么统计文字(count如何计算同一种颜色的文字)
2025年6月1日 12:45
java打印爱心图案的代码(html爱心代码用devc++能打出来嘛)
2026年8月5日 05:00
python如何使用多线程(Python的keyboard模块使用多线程)
2026年9月14日 03:00












