MFC WM_PAINT消息响应问题
CPaintDCdc(GetDlgItem(IDC_STATIC_PIC));CRectrcclient;GetDlgItem(IDC_STATIC_PIC)->GetC...
CPaintDC dc(GetDlgItem(IDC_STATIC_PIC)); CRect rcclient; GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rcclient); CDC memdc;//内存显示设备对象 memdc.CreateCompatibleDC(&dc);//创建兼容设备dc BITMAP bitmap; m_bmp.GetBitmap(&bitmap); memdc.SelectObject(&m_bmp); int bmHeight = bitmap.bmHeight;//位图高度 int bmWidth = bitmap.bmWidth;//位图宽度 int rcHeight = rcclient.Height();//窗口高度 int rcWidth = rcclient.Width();//窗口宽度 int cx = 0;//位图在窗口中显示的x坐标 int cy = 0;//位图在窗口中显示的y坐标 int targetHeight = rcHeight;//位图要显示的实际高度 int targetWidth = rcWidth;//位图要显示的实际宽度 if (bmHeight <= rcHeight && bmWidth <= rcWidth) { //如果BMP图像大小小于窗口大小,不用伸缩 targetHeight = bmHeight; targetWidth = bmWidth; } else { //否则,判断哪个维度压缩比例大,进行压缩 float rateH = (float)rcHeight / bmHeight; float rateW = (float)rcWidth / bmWidth; if (rateH < rateW) { targetWidth = bmWidth * rateH; } else { targetHeight = bmHeight * rateW; } } cx = (rcWidth - targetWidth) / 2; cy = (rcHeight - targetHeight) / 2; dc.SetStretchBltMode(HALFTONE); dc.StretchBlt(cx, cy, targetWidth, targetHeight, &memdc, 0, 0, bmWidth, bmHeight, SRCCOPY);
这段代码是我用来在控件中显示图片的,写在OnPaint()函数里面,但是会一直调用OnPaint函数,如果加上CPaintDC dc(this)就不会,但是下面的代码就失效了 完全没有重绘的功能
原图
不加CPaintDC dc(this),功能正常,图片被拉伸,但是一直调用OnPaint
增加CPaintDC dc(this),功能完全失效了
发现问题了,就是在窗口拉伸的时候,原窗口的图片覆盖了新窗口的图片,导致只显示出了拉伸部分的内容,左上角的内容还是原窗口的内容,请问如何清除原来窗口的内容来重画 展开
这段代码是我用来在控件中显示图片的,写在OnPaint()函数里面,但是会一直调用OnPaint函数,如果加上CPaintDC dc(this)就不会,但是下面的代码就失效了 完全没有重绘的功能
原图
不加CPaintDC dc(this),功能正常,图片被拉伸,但是一直调用OnPaint
增加CPaintDC dc(this),功能完全失效了
发现问题了,就是在窗口拉伸的时候,原窗口的图片覆盖了新窗口的图片,导致只显示出了拉伸部分的内容,左上角的内容还是原窗口的内容,请问如何清除原来窗口的内容来重画 展开
1个回答
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询