lnhv013710 2019-06-01 00:03 采纳率: 96.7%
浏览 691
已采纳

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

请教各位,手动在对话框程序窗口中手动添加的控件,如何将控件图形放在最底,这样能够不遮挡我的绘图!!
我的绘图代码如下:

        /////////////////////外框
        CPen penFrm(PS_SOLID, 1, RGB(0,0,0));
        pDC->SelectObject(&penFrm);
        pDC->MoveTo(nDrawStartX,nDrawStartY);
        pDC->LineTo(nDrawStartX+nWidth,nDrawStartY);//上边

        pDC->MoveTo(nDrawStartX+nWidth,nDrawStartY);
        pDC->LineTo(nDrawStartX+nWidth,nDrawStartY+nHeight);//右边

        pDC->MoveTo(nDrawStartX+nWidth,nDrawStartY+nHeight);
        pDC->LineTo(nDrawStartX,nDrawStartY+nHeight);//下边

        pDC->MoveTo(nDrawStartX,nDrawStartY);
        pDC->LineTo(nDrawStartX,nDrawStartY+nHeight);//左边

我想要绘图在图片控件的上面,可视,现在是被图片框挡住的。
试过按下ctrl +D 改变图层,但是不好使。
现在我是 把图片控件隐藏了,只用来定位,然后绘制另外一个白底的框。
/////////////////////////////////////////////////////////////////////
下面运行报错,怎么才能在onpaint内把它传给绘图函数DrawArc()

void CMyCKTXDlg::DrawArc(CDC *pDC);

void CMyCKTXDlg::OnPaint()
{
       //if (GetDlgItem(IDC_STATIC_DRAW)->GetSafeHwnd () != NULL)
        //if (GetDlgItem(IDC_STATIC_DRAW)->GetSafeHwnd () != NULL)
    //{
//return;
    //}
        CWnd *pWnd = GetDlgItem(IDC_STATIC_DRAW);
        CDC *pDC;
        pDC = pWnd->GetDC();
    //CPaintDC pDC(pDC); // device context for painting

    DrawArc(pDC);//(&dc);
    //Invalidate();

    return;

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-01 10:06
    关注

    每个窗口(这里说的窗口是广义的窗口,包括static、button等各种控件)拥有独立的dc和遮挡的关系,而你绘图,只能在dc上绘图。

    窗口好比纸张,你拥有好几张纸张叠放在一起,你最底下那张纸就是主窗口,你在上面无论怎么画图,都画不到上面叠放的控件的纸上去。明白这个意思么?

    变通的办法有,(1)在上面的那张纸上也画出被它遮挡的部分,好像是下面的透过来了。
    (2)让上面那张纸透明
    https://blog.csdn.net/abidepan/article/details/7949759
    (3)不要上面那张纸,也就是不要控件了,直接都自己画,按钮自己画出来,通过坐标和鼠标消息判断点击了"虚拟的按钮"。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?