关于在Onpaint中画图一闪而过的问题 :
void CScreenDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint() //::MessageBox(NULL, "我在重绘", "" ,MB_OK); //双缓存防止闪烁 CWnd* hwnd = GetDlgItem(IDC_PIC); HDC hDesDC = hwnd->GetDC()->m_hDC; HDC hSrcDC = CreateCompatibleDC(hDesDC); HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), strFilePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); BITMAP bm; GetObject(hBitmap, sizeof(BITMAP), &bm); SelectObject(hSrcDC, hBitmap); CRect rect; hwnd->GetClientRect(&rect); BitBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, SRCCOPY); }
搞了一下午发现是由于
CWnd* hwnd = GetDlgItem(IDC_PIC);这句话中的IDC_PIC 这个是静态文本框的控件ID, 不应该使用静态文本框!!!(某个教程中说用静态文本框 害死我了) 应该使用Picture Control 即图像控件!!!
坑爹!