请问怎么在动态创建的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, "请将人脸对准识别框");