关于在tab中显示控件大小问题

时间:2022-03-24 17:36:07
特别奇怪,同一段代码,一段放在独立的对话框程序中执行,一段方在tab中的对话框中执行。

同时设置长宽像素为512,放在独立的对话框程序中执行的程序就没问题(用微信截图时,会显示区域大小,实际大小为512)),而放在tab中的对话框中的明显要大出很多(用微信截图时,会显示区域大小,实际大小为700多)

机器也是同一台,没有做任何改变。用了getWindowRect测试后,发现放在tab中的rect和用微信截图时显示的区域大小是存在误差的,随后获取其父窗口(主对话框)的大小,也是和微信截图存在偏差。而另外一个独立的对话框程序就不会存在偏差。

谁能帮忙解答一下?多谢。

附图一张,在资源管理器显示有偏差,实际运行后像素是一样的。
关于在tab中显示控件大小问题

代码如下:

    CImage img;
CBitmap bitmap;
img.Load(_T("d:\\101.jpg"));

int iWithd = img.GetWidth();
int iHeight = img.GetHeight();

HBITMAP hBitMap = img.Detach();
bitmap.Attach(hBitMap);

CDC memDC;
CDC * pDC = GetDlgItem(IDC_STATIC_MAP)->GetDC();
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(bitmap);

CBrush brush;
brush.CreateSolidBrush(RGB(255, 0, 0));

CRect rect;
rect.left = x - 6;
rect.top = y - 6;
rect.right = x + 6;
rect.bottom = y + 6;

memDC.SelectObject(&brush);
memDC.Ellipse(&rect);

// StretchBlt可自行设置大小进行伸缩
pDC->StretchBlt(2, 2, iWithd, iHeight, &memDC,
0, 0, iWithd, iHeight, SRCCOPY);

DeleteObject(hBitMap);
bitmap.DeleteObject();
memDC.DeleteDC();
ReleaseDC(pDC);

4 个解决方案

#1


pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 

#2


引用 1 楼 zgl7903 的回复:
pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 


我也想不缩放显示,但是不缩放显示的话,实际展示时像素远远大于设定的像素值。
而且两个程序对话框的字体我都设置的是一致的。

#3


引用 1 楼 zgl7903 的回复:
pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 


而且,我设置的也并非是缩放显示,我是按照图片的实际大小进行展示的。

#4


找到解决思路了:MapDialogRect(&rc);

#1


pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 

#2


引用 1 楼 zgl7903 的回复:
pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 


我也想不缩放显示,但是不缩放显示的话,实际展示时像素远远大于设定的像素值。
而且两个程序对话框的字体我都设置的是一致的。

#3


引用 1 楼 zgl7903 的回复:
pDC->StretchBlt 替换成 BitBlt, 就是不缩放显示

对话框大小和字体有关 


而且,我设置的也并非是缩放显示,我是按照图片的实际大小进行展示的。

#4


找到解决思路了:MapDialogRect(&rc);