weixin_44747156
weixin_44747156
采纳率100%
2019-09-19 11:12

请问怎么在动态创建的CStatic类控件里,用CDC画图?(请问我的代码怎么不能显示)

10
  • c++
已采纳

void CMFCApplication2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码

CStatic* pstaDis = new CStatic;
pstaDis->Create(_T(""), WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE, CRect(50, 50, 300, 300),this, IDC_MYPICTURE); //这里要将GetParent改成this
//HBITMAP hRedBmp1 = (HBITMAP)::LoadImage(NULL, L"C:\\Windows\\picture\\140581199804281918.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
//pstaDis->SetBitmap(hRedBmp1);

CPen pen(PS_SOLID, 4, RGB(255, 0, 0));
HWND hWnd = pstaDis->GetSafeHwnd();
CWnd *pWn  = (CFrameWndEx*)CWnd::FromHandle(hWnd);
CClientDC pDc1(pWn);
CDC MemDC1;
MemDC1.CreateCompatibleDC(&pDc1);
pDc1.SelectStockObject(NULL_BRUSH);

pDc1.SetBkMode(TRANSPARENT);
pDc1.SetTextColor(RGB(255, 255, 0));
/*CBitmap* bmp1;
CBitmap* bmp = MemDC1.SelectObject(bmp1);*/
MemDC1.SetTextColor(RGB(255, 0, 50));//设置字体颜色
MemDC1.SetBkMode(TRANSPARENT);
MemDC1.TextOutW(140, 25, L"请将人脸对准识别框");
pDc1.StretchBlt(50, 50, 200, 200, &MemDC1, 50, 50, 200, 200, SRCCOPY);

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • phenix2009 白色一大坨 2年前

    绘图部分需要在OnPaint里面做才行,不是你这样写在按钮里,因为界面会不断刷新。
    你把创建创建的指针做成类成员,在初始化界面时候创建,然后在OnPaint函数里面,用这个指针,在上面画图,就可以达到目的了。
    绘图部分我之前是这样做的,你的函数的确画不出东西,请参考一下:

        CRect ViewRect;
        CWnd *pWin = GetDlgItem(IDC_MYPICTURE);//获取该控件的指针,就可以对该控件直接操作了
        pWin->GetClientRect(ViewRect);//把控件的长宽、坐标等信息保存在rect里
        CDC *pDC = pWin->GetDC();//获取该控件的画布
        //有了画布,下面可以自由的画图了,想怎么画就怎么话
        pDC->SelectStockObject(NULL_BRUSH);
        pDC->SetTextColor(RGB(255, 0, 50));
        pDC->SetBkMode(TRANSPARENT);
        pDC->TextOut(140, 25, "请将人脸对准识别框");
    
    点赞 2 评论 复制链接分享

相关推荐