lnhv013710 2019-06-01 11:25 采纳率: 96.7%
浏览 521
已采纳

VS2010 MFC 对话框程序中的控件IDC_STATIC_DRAW1(Picture Control)图层问题2--死循环

谁帮我看看,我想在图片控件上画图,把绘图函数放进onpaint ,结果死循环了。为啥?咋处理?
以下代码死循环了

void CMyCKTXDlg::OnPaint()
{
    DrawArc();//(&dc);
    //Invalidate();

    return;
    }
void CMyCKTXDlg::DrawArc() 
{
    CRect ViewRect;
    CWnd *pWin = GetDlgItem(IDC_STATIC);//获取该控件的指针,就可以对该控件直接操作了
    pWin->GetClientRect(ViewRect);//把控件的长宽、坐标等信息保存在rect里
    //int width=ViewRect.Width();//可以获取宽和高
    //int height=ViewRect.Height();
    CDC *pDC = pWin->GetDC();//获取该控件的画布
    //有了画布,下面可以自由的画图了,想怎么画就怎么话
        CBrush brush;
    brush.CreateSolidBrush(RGB(255,255,255)/*::GetSysColor(COLOR_3DSHADOW)*/);
    pDC->SelectObject(&brush);
    pDC->Rectangle(10,10,ViewEndX,ViewEndY);
    }

同样的代码放在其他地方,比如:OnBnClickedButton1,就没事,可以在图片控件上绘图

void Ctest11Dlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    CRect rect;
    CWnd *pWin = GetDlgItem(IDC_STATIC);//获取该控件的指针,就可以对该控件直接操作了
    pWin->GetClientRect(rect);//把控件的长宽、坐标等信息保存在rect里
    int width=rect.Width();//可以获取宽和高
    int height=rect.Height();
    CDC *pDc = pWin->GetDC();//获取该控件的画布
    //有了画布,下面可以自由的画图了,想怎么画就怎么话,
    CBrush Brush;
    Brush.CreateSolidBrush(RGB(192,250,233));
    pDc->SelectObject(&Brush);
    pDc->Rectangle(0,0,width,height);
}
  • 写回答

3条回答

  • 白色一大坨 2019-06-02 15:37
    关注

    既然题主不肯发代码,那么我自己试了一下,由于ViewEndX,ViewEndY这两个变量出处不明,我暂且改为获取控件的宽高,我想这块应该不是重点,代码如下:

    void CMFCApplication1Dlg::DrawArc()
    {
        CRect ViewRect;
        CWnd *pWin = GetDlgItem(IDC_STATIC);//获取该控件的指针,就可以对该控件直接操作了
        pWin->GetClientRect(ViewRect);//把控件的长宽、坐标等信息保存在rect里
        int width=ViewRect.Width();//可以获取宽和高
        int height=ViewRect.Height();
        CDC *pDC = pWin->GetDC();//获取该控件的画布
        //有了画布,下面可以自由的画图了,想怎么画就怎么话
        CBrush brush;
        brush.CreateSolidBrush(RGB(255, 255, 255)/*::GetSysColor(COLOR_3DSHADOW)*/);
        pDC->SelectObject(&brush);
        pDC->Rectangle(10, 10, width, height);
    }
    
    
    void CMFCApplication1Dlg::OnPaint()
    {
        DrawArc();
        OutputDebugString("OnPaint\n");
    }
    
    
    

    而效果就是程序不停的在界面上画矩形,OnPaint不停运行绘图:
    图片说明

    不知题主说的死循环是什么意思,但我这块的确也实现了实时绘图,并没有什么问题,代码区别出了那两个未设置变量,其他地方都是一致的,那么请题主看一下,指出具体问题,我也好继续协助排查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决