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

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

问题描述:

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);

}

绘图部分需要在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, "请将人脸对准识别框");