发布网友 发布时间:2024-09-27 15:40
共1个回答
热心网友 时间:2024-10-03 18:57
滑 动 控 件 是 Windows 中 最 常 用 的 控 件 之 一 。 一 般 而 言 它 是 由 一 个 滑 动 条 , 一 个 滑块和可选的刻度组成,用户可以借助移动滑块在相应的控件中显示对应的值。 通 常 ,在 滑 动 控 件 附 近 一 定 有 标 签 控 件 或 编 辑 框 控 件 ,用 于 显 示 相 应 的 值 。滑 动 控 件 在 应 用 程 序 中 用 途 级 为 广 泛 ,如 在 桌 面 的 属 性 中 就 可 以 看 到 。为 此 ,让 我 们 一起来看一下它的实现方式。 ( 1) 在 VC++ 6.0 中 新 建 一 个 对 话 框 文 档 的 工 程 。 ( 2) 打 开 资 源 管 理 器 , 在 对 话 框 中 放 置 一 个 EDIT 控 件 , 然 后 在 它 旁 边 放 上 一 个 Slider 控 件 。 基 本 的 框 架 已 经 完 成 了 。 ( 3) 对 Slider 控 件 右 击 , 选 择 “建 立 类 向 导 ”,对 刚 才 的 Slider 控 件 定 义 一 个 变 量 m_Slider,类 型 为 CSliderCtrl。
( 4) 在 对 话 框 初 始 化 的 代 码 BOOL CMy601Dlg:OnInitDialog()slider控件滑动, 后 添 加 相 应 的 属性。以下是常见的属性修改变量: * GetRange,SetRange 函 数 用 于 查 询 和 设 置 滑 动 条 的 取 值 范 围 , 默 认 为 0~100。 函 数 定 义 形 式 如 下 : void GetRange(int &nMin,int &nMax) const; void SetRange(int nMin,int nMax,BOOL bRedrGETaw=FALSE); * GetPos,SetPos 函 数 用于查询和修改滑动条的当前值。函数定义方式如下: int GetPos() const; int SetPos(int nPos); * GetLineSize,SetLineSize 函 数 用 于 查 询 和 设 置 在 按 一 下 右 或 左 箭 头 时 滑 块 的 移 动 量 ,默 认 为 1 个 单 位 。函 数 定 义形式如下: int GetLineSize() const; int SetLineSize(int nSize); * GetPageSize,SetPageSize 函 数 用 于 查 询 和 设 置 函 滑 块 和 块 移 动 量 ,块 移 动 量 是 指 当 按 下 PgUp 或 PgDown 时 滑 块的移动量。
函数定 义形式如下: int GetPageSize() const; int SetPageSize(int nSize); * SetTicFreq 函 数 用于设定滑动条刻度的频率。默认为一个单位一个函数。函数定义方式如下: void SetTicFreq(int nFreq);* SetTic 函 数 用 于 在 指 定 的 位 置 设 置 刻 度 。 Windows 默 认 的 刻 度 是 均 匀 的 。 函 数 定 义 形 式 如 下: BOOL SetTic(int nTic); * ClearTics 函 数 用于消除所有的刻度。函数定义方式如下: void ClearTics(BOOL bRedraw=FALSE); 我们在初始化时读取以下段落:m_Slider.SetRange(-100,100); m_Slider.SetTicFreq(10);即 : 设 置 范 围 为 -100 到 100, 刻 度 为 每 10 个 单 位 一 个 。( 5) 现 在 我 们 加 入 事 件 过 程 代 码 。 选 择 Slider 的 “事 件 ”然 后 选 择 第 一 个 过 程 ( NM_CUSTOMDRAW) 随 后 加 入 以 下 代码:void CMy601Dlg:OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) { UpdateData(TRUE); m_Int=m_Slider.GetPos(); UpdateData(FALSE); *pResult = 0; }其 中 m_Int 是 定 义 的 EDIT 控 件 的 类 型 为 INT 的 变 量 。
此 我 们 的 编 辑 工 作 结 束 至 了。2:画点画线(1)画点SetPixel()函数可以在选定的坐标位置按指定的形状画点。函数原型说明如下: COLORREF CDC: SetPixel(int X, int Y, COLORREF crColor); 其中,(X,Y)为点的坐标位置,crColor 参数为点的颜色值。如果变量调用失败,则 函数返回像素的颜色值,否则返回值为-1。颜色值通过 RGB(Red,Green,Blue)来修改,其中三个参数取值 0~255。例如,在 VcAPP 项目中,在 CVcAppView 类中的 OnDraw()函数中加 入以下画点语句: //绘制一组彩色点 //绘制一组彩色点 pDC->TextOut(20,20,"point:"); pDC->SetPixel(100,20,RGB(255,0,0)); pDC->SetPixel(110,20,RGB(0,255,0)); pDC->SetPixel(120,20,RGB(0,0,255)); pDC->SetPixel(100,20,RGB(255,255,0)); pDC->SetPixel(100,20,RGB(255,0,255)); pDC->SetPixel(100,20,RGB(0,255,255)); pDC->SetPixel(100,20,RGB(0,0,0)); pDC->SetPixel(100,20,RGB(255,255,255)); 运行程序,查看运行结果。
(2)画直线和折线画直线应该 LineTo()和 MoveTo()两个函数的配合使用。 LineTo()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一 段直线。直线的色彩通过画笔的色调来设置,在前面介绍。LineTo()函数原型说明如下: 直线的终点位置由(nXEnd, nYEnd)指定。如果变量调用失败,那么该点就变成当前 位置,并返回 TRUE,否则返回 FALSE。 MoveTo()函数也是将当前位置移动到选定位置,它并没有画出直线,其函数表明为: BOOL CDC: LineTo(int nXEnd, int nYEnd); BOOL CDC: MoveTo (int X, int Y); 示例:在 CVcAppView 类中的 OnDraw()函数中加入以下画点语句: //绘制直线 pDC->TextOut(20,60,"Line:"); pDC->MoveTo(20,90); pDC->LineTo(160,90);Polyline()函数用来画一条折线,而 PolyPolyline()函数则用来画多条折线slider控件滑动,它们的变量 原型说明如下: DWORD cCount); BOOL CDC:PolyPolyline(COUST POINT * lppt, COUST DWORD *lpdwPolyPoints, BOOL CDC:Polyline(COUST POINT *lppt, int cPoints); 在 Polyline()函数中,lppt 是指向折线顶点数组的指针,而 cPoints 是折线顶点数组中的 顶点数。
例如,绘制一条具有 4 个顶点的折线,程序如下: POINT polylinepoint[4]={{70,240},{20,190},{70,190},{20,240}}; pDC->Polyline(polylinepoint,4); 在 PolyPolyline()函数中,lppt 是指向保存顶点数组的指针,而各条折线的顶点数则 保存在 lpdwPolyPoints 参数所指向的字段中,最后的 cCount 参数指定折线的数量。例如: POINT polypolylinePt[9]={{95,160},{120,185},{120,250},{145,160},{120,185}, {90,185},{150,185},{80,210},{160,210}}; DWORD dwPolyPoints[4]={3,2,2,2}; //分四段折线,分别占用 3,2,2,2 个顶点 pDC->PolyPolyline(polypolylinePt, dwPolyPoints, 4); 注:由于一条折线至少应该 2 个顶点,因此 dwPolyPoints 数组中的数不需要大于 2。
(3)画弧线和曲线通过 Arc()函数画圆弧或整个半圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数 的圆形说明如下: int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc); BOOL CDC: Arc(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, 其中, (nLeftRect, nTopRect) 是外接圆形的左上角坐标值, (nRightRect, nBottomRect) 是外接圆形的右下角坐标值。而椭圆中心与点(nXStartArc, nYStartArc)所组成的射线与椭 圆的交点成为弧线的起点,椭圆中心与点(nXEndArc, nYEndArc)所组成的射线与圆弧的 交点作为弧线的终点。椭圆上从始点到终点就形成一条弧线。 在 Windows 系统中,弧线从始点到终点的方向是逆时针方向,但可以借助 SetArcDirection()函数将绘制弧线方向设定为顺时针方向。 示例,用 Arc()绘制圆、圆弧和半圆,程序如下: for (i=0;i<6;i++){ pDC->Arc(260-5*i,70-5*i,260+5*I,70+5*i,260+5*i,70,260+5*i,70); } for (i=3;i<6;i++) { pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i, (int)260+10*i*cos(60*3.1415926/180), (int)70+10*i*sin(60*3.1415926/180), (int)260+10*i*cos(60*3.1415926/180), (int)70-10*i*sin(60*3.1415926/180)); pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i, (int)260-10*i*cos(60*3.1415926/180), (int)70-10*i*sin(60*3.1415926/180), (int)260-10*i*cos(60*3.1415926/180), (int)70+10*i*sin(60*3.1415926/180)); } Bezier 曲线是最常见的非规则曲线之一。
Bezier 曲线属于三次曲线, 需要四个控制顶点 来确认一条 Bezier 曲线,其中曲线通过第一点和最终一点,并且第一条边和最终一条边是 曲线在起点和终点处的切线,从而确认了曲线的走向。PolyBezier()函数可以画出一条或多 条 Bezier 曲线,其变量原型说明如下: BOOL CDC: PolyBezier(CONST POINT * lppt, DWORD cPoints); 其中, 参数是曲线控制顶点所构成的变量, lppt cPoints 参数表示 lppt 数组中的顶点数, 一条 Bezier 曲线必须四个控制顶点。如果 lppt 数组用于画多条 Bezier 曲线,第二条以后的 曲线只应该三个控制顶点,因为前面的曲线总是把前一条曲线的终点作为自己的起点。 示例,给出四个控制顶点,画出一条 Bezier 曲线和特点多边形。 //绘制 Bezier 曲线 POINT polyBezier[4]={{20,310},{60,240},{120,300},{160,330}}; pDC->Polyline(polyBezier,4); pDC->PolyBezier(polyBezier,4); (4)画封闭曲线Windows 中提供了一组画封闭曲线的变量,包括绘制圆形、多边性、椭圆等,这些画 封闭曲线的函数不但可以借助画笔来画出轮廓线, 同时还可以借助画刷来填充那些封闭曲线 所围成的区域。