MFC-BeginPaint和EndPaint
只能用在消息处理函数WindowProc的WM_PAINT消息中
在WM_PAINT消息中必须使用BeginPaint和EndPaint,否则会不断的调用WM_PAINT,处于死循环
WM_PAINT消息用来绘制背景
LRESULT CGDIDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: 在此添加专用代码和/或调用基类 PAINTSTRUCT ps = {0}; HDC hdc; switch (message) { case WM_PAINT: hdc = ::BeginPaint(m_hWnd, &ps); /* 参数1:HWND hwnd 窗口的句柄 参数2:LPPAINTSTRUCT lpPaint 绘制信息 返回值:如果函数成功,返回值是指定窗口的“显示设备描述表”句柄 如果函数失败,返回值是NULL 注意:这个DC也叫目标DC */ HBITMAP hbmp = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tu\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE| LR_DEFAULTSIZE| LR_CREATEDIBSECTION); HDC hdcmen= ::CreateCompatibleDC(hdc);//创建内存DC //这个也叫源DC HBITMAP holdbmp= (HBITMAP)::SelectObject(hdcmen, hbmp);//把位图放到内存DC BITMAP bmp; int n = ::GetObject(hbmp, sizeof(BITMAP), &bmp);//获取位图信息 BOOL b = BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight, hdcmen,0,0, SRCCOPY);//把源DC拷贝到目标DC /*这条指令一般都是原大小拷贝,不缩放 参数1:HDC hdcDest 目标DC 参数2:int nXDest 指定目标矩形区域左上角的X轴逻辑坐标 参数3:int nYDest 指定目标矩形区域左上角的Y轴逻辑坐标 参数4:int nWidth 指定源在目标矩形区域的逻辑宽度 参数5:int nHeight 指定源在目标矩形区域的逻辑高度 参数6:HDC hdcSrc 内存DC句柄 参数7:int nXSrc 指定源矩形区域左上角的X轴逻辑坐标 参数8:int nYSrc 指定源矩形区域左上角的Y轴逻辑坐标 参数9:DWORD dwRop 指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色 SRCCOPY:将源矩形区域直接拷贝到目标矩形区域 其它看:https://baike.baidu.com/item/BitBlt/6377137?fr=aladdin 返回值:如果函数成功,那么返回值非零;如果函数失败,则返回值为零 */ ::SelectObject(hdcmen, holdbmp); DeleteObject(hdcmen); ::EndPaint(m_hWnd, &ps); break; } return CDialogEx::WindowProc(message, wParam, lParam); }