一 常见变量获得

CDC * cDc=GetDC();

HDC m_Screenhdc = this->GetDC()->m_hDC;

//  整个窗口客户区的坐标

this->GetClientRect( &m_WndClientRect );

//  图元坐标编辑区的(即某一控件的窗口)

CWnd  m_pEditWnd = GetDlgItem(IDC_PIC_DOTEDIT);  /

/  图元坐标编辑区的相对于对话框的客户区的

Rect     m_editWndRect = getEditClientCoord();

//  图元坐标编辑区的自己的

Rect     m_pEditWnd->GetClientRect( &m_editRect );

//  图元坐标编辑区的DC  m_pEditDC=m_pEditWnd->GetDC();

//  图元坐标编辑区的Graphics  m_pEditGraphics = new Graphics( m_pEditDC->m_hDC );

CRect DlgSymbolEdit::getEditClientCoord()
{
 CRect rect;
 CWnd *pStrokeDis = GetDlgItem(IDC_PIC_DOTEDIT);
 pStrokeDis->GetWindowRect( &rect );
 //  从屏幕坐标转换成本地坐标
 ScreenToClient( rect );
 return rect;
}

二.DrawEdge()函数说明

void DlgSymbolEdit::OnPaint()
{

//再一次说明onpaint在onInitDialog之前运行,所以此处要给Rect等赋值。
 //  图元坐标编辑区的CWnd
 m_pEditWnd = GetDlgItem(IDC_PIC_DOTEDIT);
    //  图元坐标编辑区的自己的rect
    m_pEditWnd->GetClientRect( &m_editRect );
 //  图元坐标编辑区的DC
 m_pEditDC=m_pEditWnd->GetDC();
   m_editRect.left-=3;
   m_editRect.top-=3;
   m_editRect.bottom+=3;
   m_editRect.right+=3;
   //GetDC()->DrawEdge(&m_editRect,EDGE_SUNKEN, BF_RECT);//DrawEdge函数只能用要绘制的空间的CDC。此处用的整个对话框的CDC达不到预期效果。
   m_pEditDC->DrawEdge(&m_editRect,EDGE_SUNKEN, BF_RECT);

。。。。

}

下面是转的函数说明

CDC::DrawEdge函数

CDC::DrawEdge

BOOL DrawEdge( LPRECT lpRect, UINT nEdge, UINT nFlags );

DrawEdge函数自动调用系统相关颜色绘制!无法自行设置颜色!!

返回值

Nonzero if successful; otherwise 0.

如果成功,则返回非零值,否则为0。

参数说明

lpRect

A pointer to a RECT structure that contains the logical coordinates of the rectangle.

指向包含有逻辑坐标矩形的RECT结构的指针。

nEdge

Specifies the type of inner and outer edge to draw. This parameter must be a combination of one inner-border flag and one outer-border flag. See the Remarks section for a table of the parameter’s types.

指定矩形内外边界的类型。该参数是内边界标志和外边界标志的集合。请参阅说明中该参数的类型。

nFlags

The flags that specify the type of border to be drawn. See the Remarks section for a table of the parameter’s values:

指定绘制边界的类型,请参阅说明中该参数的类型。

备注

Call this member function to draw the edges of a rectangle of the specified type and style.

调用该成员函数,绘制指定风格和类型的矩形。

The inner and outer border flags are as follows:

内外边界标志如下:

  • Inner-border flags 内边界标志

    • BDR_RAISEDINNER   Raised inner edge.
      内边界凸出。
    • BDR_SUNKENINNER   Sunken inner edge.

    内边界凹下。

  • Outer-border flags外边界标志
    • BDR_RAISEDOUTER   Raised outer edge. 外边界凸出。
    • BDR_SUNKENOUTER   Sunken outer edge.

    外边界凹下

The nEdge parameter must be a combination of one inner and one outer border flag. The nEdge parameter can specify one of the following flags:

参数必须是内边界标志和外边界标志的组合。可以为以下值之一:

  • EDGE_BUMP   Combination of BDR_RAISEDOUTER and BDR_SUNKENINNER.
  • EDGE_ETCHED   Combination of BDR_SUNKENOUTER and BDR_RAISEDINNER.
  • EDGE_RAISED   Combination of BDR_RAISEDOUTER and BDR_RAISEDINNER.
  • EDGE_SUNKEN   Combination of BDR_SUNKENOUTER and BDR_SUNKENINNER.

The nFlags parameter types are as follows:

NFlags参数的类型如下:

  • BF_RECT   Entire border rectangle.
    矩形的四周边界。
  • BF_LEFT   Left side of border rectangle.
    矩形的左边界。
  • BF_BOTTOM   Bottom of border rectangle.
    矩形的底部边界
  • BF_RIGHT   Right side of border rectangle.
    矩形的右边界。
  • BF_TOP   Top of border rectangle.
    矩形的顶部边界。
  • BF_TOPLEFT   Top and left side of border rectangle.
    矩形的左、底部边界。
  • BF_TOPRIGHT   Top and right side of border rectangle.
    矩形的右、顶部边界。
  • BF_BOTTOMLEFT   Bottom and left side of border rectangle.
    矩形的左、底部边界。
  • BF_BOTTOMRIGHT   Bottom and right side of border rectangle.

矩形的右、底部边界。

For diagonal lines, the BF_RECT flags specify the end point of the vector bounded by the rectangle parameter.

对于对角线,BF_RECT标志指定了矢量终点:

  • BF_DIAGONAL_ENDBOTTOMLEFT   Diagonal border. The end point is the bottom-left corner of the rectangle; the origin is top-right corner.
    BF_DIAGONAL_ENDBOTTOMLEFT 对角线边界。终点为矩形的左下角,始点为右上角。
  • BF_DIAGONAL_ENDBOTTOMRIGHT   Diagonal border. The end point is the bottom-right corner of the rectangle; the origin is top-left corner.
    BF_DIAGONAL_ENDBOTTOMRIGHT 对角线边界。终点为矩形的右下角,始点为左下角。
  • BF_DIAGONAL_ENDTOPLEFT   Diagonal border. The end point is the top-left corner of the rectangle; the origin is bottom-right corner.
    BF_DIAGONAL_ENDTOPLEFT 对角线边界。终点为矩形的左上角,始点为右下角。
  • BF_DIAGONAL_ENDTOPRIGHT   Diagonal border. The end point is the top-right corner of the rectangle; the origin is bottom-left corner.
    BF_DIAGONAL_ENDTOPRIGHT 对角线边界。终点为矩形的右上角,始点为左下角。

For more information about the Windows API DrawEdge, see ::DrawEdge in the Win32 SDK Programmer’s Reference.

MFC 常见问题的更多相关文章

  1. MFC常见问题解惑

    MFC类的分类 1 Root: CObject : CObject2 Application Architecture Classes: CWinApp/CFrameWnd/... 3 Window, ...

  2. MFC常见问题以及解决方法(2)_Cstring和string互相转换

    MFC默认编码是unicode(自己改成多字符集是不行的),对话框中对字符串的处理都是宽字符,而且添加变量会默认是CString类型,当你代码中想用string但又遇到必须转为CString的情况,就 ...

  3. MFC常见问题以及解决方法(1)_MFC下文本编辑框按下回车后窗口退出

    这里主要介绍遇到这种方法的解决方案,解决方法可能有多种,但这里只给出有效的一种,这里不会详细说明出现问题的原因以及为什么这样解决,想了解更多可以百度,写这个主要是防止以后忘记,做个简单的笔记. 问题: ...

  4. MFC常见问题总结

    1. c++中的函数前面加个LRESULT是什么意思啊?在微软vc提供的头文件中有定义在winnt.h中typedef long LONG;在windef.h中typedef LONG LRESULT ...

  5. VC++学习之VC中常见问题

    VC++学习之VC中常见问题 (1)为什么某个类突然在工作区间里面突然看不见了? 只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了 ( ...

  6. MFC控件CTabCtrl关联变量

    1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上. 再在对话框类中,将该控件绑定一个变量 用两种方法: 1 ) 自己定义成员变量 CTabCtr ...

  7. 【MFC】MFC绘图不闪烁——双缓冲技术

    MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33|  分类: VC|举报|字号 订阅 [转自:http://blog.163.com/yuanlong_zheng@126/ ...

  8. 非MFC工程中使用MFC库

    目录(?)[-] 需求说明 常见问题 问题分析 参考解决方法 我的解决方案 Stdafxh的原理   需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console A ...

  9. MFC中的双缓冲技术(解决绘图闪烁问题)

    转自 MFC绘图不闪烁——双缓冲技术[转] 在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃. 所谓双缓冲技术,下面是百度百科的 ...

随机推荐

  1. vegan 包进行 Bioenv 分析

    Bioenv 分析通过 计算样本群落结构的距离矩阵和 环境因子的距离矩阵,计算两个距离之间的相关系数,挑选出最佳的环境因子组合: 默认情况下,计算 群落结构的距离矩阵时, 使用 Bray-Curtis ...

  2. 使用 resizableImageWithCapInsets 方法实现可伸缩图片

    之前介绍过通过 stretchableImageWithLeftCapWidth:topCapHeight: 方法来实现可伸缩图片: 可看这篇随笔:使用 stretchableImageWithLef ...

  3. java http post上传文件

    1.上传接口 @IgnoreToken @RequestMapping(value = "/upload/cpicFile", method = RequestMethod.POS ...

  4. 2014-07-08 hibernate tenancy

    http://en.wikipedia.org/wiki/Multitenancy http://www.infoq.com/news/2012/01/hibernate-4-released htt ...

  5. servlet3.0 新特性和springboot Listener和filter案例

    1.filter package com.newtouch.zxf.filter; import java.io.IOException; import javax.servlet.Filter; i ...

  6. docker开启api端口,docker启用加速

    此篇是针对centos6的docker,注意ubantu和centos7的会有区别. 需要在docker配置文件中修改信息 centos中是这个文件 /etc/sysconfig/docker,Ubu ...

  7. highcharts图表中级入门:非histock图表的highcharts图表如何让图表产生滚动条

    最近highcharts图表讨论群里面很多朋友都在问如何让highcharts图表在X轴数据多的情况下产生滚动条的问题,其实之前有一个解决办法是将装载图表的div容器用css样式表弄一个滚动条出来.这 ...

  8. 实战c++中的string系列--不要使用memset初始化string(一定别这么干)

    參考链接: http://www.cppblog.com/qinqing1984/archive/2009/08/07/92479.html 百度百科第一次这么给力: void *memset(voi ...

  9. Go之单元测试

    go单元测试需要按照gotest的规范来编写: 1.文件名必须以xx_test.go命名 2.方法必须是Test[^a-z]开头 3.方法参数必须 t *testing.T   在运行gotest的时 ...

  10. Go面向对象(三)

    go语言中的大多数类型都是值予以,并且都可以包含对应的操作方法,在需要的时候你可以给任意类型增加新方法.二在实现某个接口时,无需从该接口集成,只需要实现该接口要求的所有方法即可.任何类型都可以被any ...