zoukankan      html  css  js  c++  java
  • 插入符与路径(VC_MFC)

    目录

    插入符
    绘制路径

    (本章节中例子都是用 VS2005 编译调试的)


    插入符

    CWnd 插入符相关函数:

    编写步骤:

    代码示例:

    这里以在对话框里添加插入符为例子,而创建与显示插入符操作相关实现添加在初始化对话框函数中(即 OnInitDialog 函数),代码如下:

    View Code
    //创建插入符
    CreateSolidCaret(5,30);
    
    //显示插入符
    ShowCaret();
    
    //修改插入符位置
    POINT point;
    point.x = 20;
    point.y = 20;
    SetCaretPos(point);

    运行结果:


    绘制路径

    相关函数:

    编写步骤:

    代码示例:

    首先我们在对话框中的重绘函数(即 OnPaint 函数)中进行绘图操作,具体实现代码如下:

    View Code
    void CtestDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作矩形中居中
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            /* 绘图操作 ******************************************/
            //获得资源 DC
            CClientDC pDC(this);
            //输出文本 This is test!
            CString str;
            str="This is test!";
            pDC.TextOut(50,50,str);
            //绘制线条
            for(int i=0;i<150;i+=10)
            {
                pDC.MoveTo(0,i);
                pDC.LineTo(150,i);
                pDC.MoveTo(i,0);
                pDC.LineTo(i,150);
            }
    
            CDialog::OnPaint();
    
        }
    }

    运行结果:

    然后然后在绘制线条前给字符串绘制路径,让线条不会绘制在字符串上面.实现效果还是添加在对话框中的重绘函数(即 OnPaint 函数)中.具体实现如下:

    View Code
    void CtestDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作矩形中居中
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            /* 绘图操作 ******************************************/
            //获得资源 DC
            CClientDC pDC(this);
            //输出文本 This is test!
            CString str;
            str="This is test!";
            pDC.TextOut(50,50,str);
            //绘制字符串矩形路径
            CSize sz=pDC.GetTextExtent(str);
            pDC.BeginPath();
            pDC.Rectangle(50,50,50+sz.cx,50+sz.cy);
            pDC.EndPath();
            pDC.SelectClipPath(RGN_DIFF);
            //绘制线条
            for(int i=0;i<150;i+=10)
            {
                pDC.MoveTo(0,i);
                pDC.LineTo(150,i);
                pDC.MoveTo(i,0);
                pDC.LineTo(i,150);
            }
    
            CDialog::OnPaint();
    
        }
    }

    运行结果:

     在 SelectClipPath 中还可以设置为 RGN_AND / RGN_COPY / RGN_DIFF / RGN_OR / RGN_XOR 样式,具体效果如下:

    注意路径仅对在路径绘制结束后并调用 SelectClipPath 函数后的绘图操作起作用

  • 相关阅读:
    python搭建开发环境
    django初探
    linux下安装Composer
    文件记录追加 file_put_content
    自定义导出表格
    异步处理接口 fsockopen
    appcache checking update
    js pix
    Event Aggregator
    ko list and css gradient
  • 原文地址:https://www.cnblogs.com/kzang/p/2786031.html
Copyright © 2011-2022 走看看