VC++6开发的程序在XP下界面元素错乱

名人堂再聚首 2019-12-19 03:36:26
大家好!
最近在Win7专业版上用VC++6开发了一个应用程序,安装在Win7及以上系统都工作正常,但是安装在XP系统上时,程序功能是正常的,但是发现界面完全乱了,主要各个界面元素位置都变了,我在程序中使用了一个背景图片,背景图片的尺寸和窗体一样大,并使用Paint方法画背景图片,在XP系统中明显看到背景图片被重复绘制,而Win7及以上系统就没有这个现象,因为图片尺寸和窗体一样大,所以只看到一个背景图,应该不会出现画多个背景的情况,即使是PatternBrush:


void HID5000PSoundCardDlg::OnPaint()
{
//添加主界面背景图片
CRect InterfaceRect;
CPaintDC Interfacedc(this);
CBitmap Interfacebitmap;
CBrush Interfacebrush;
CBrush* pOldInterfaceBrush;

Interfacebitmap.LoadBitmap(IDB_BITMAP_BACKGROUND); //这个IDB_BITMAP1要自己添加,文件被定义在resource.h文件中,可以通过Easy USB 51 Programer Test1.rc这个文件来进行资源管理
Interfacebrush.CreatePatternBrush(&Interfacebitmap);//用于绘制背景图的画笔,使用上面的背景图片
pOldInterfaceBrush=Interfacedc.SelectObject(&Interfacebrush);
GetWindowRect(&InterfaceRect);//得到要绘图的区域,如果需要获得窗体在屏幕上的位置,使用GetWindowRect
//InterfaceRect.Width();//宽度
//InterfaceRect.Height();//高度
Interfacedc.Rectangle(0,0,InterfaceRect.Width(),InterfaceRect.Height()); // 这些参数可以调整图片添加位置和大小
//Interfacedc.Rectangle(50,50,InterfaceRect.Width(),InterfaceRect.Height()); // 这些参数可以调整图片添加位置和大小
Interfacedc.SelectObject(pOldInterfaceBrush);
if (IsIconic())//窗口是否处于最小化状态
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);//获取屏幕的像素大小,参数是图标
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);// 得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else//否则直接执行OnPaint函数,这个是父类CDialog的静态方法
{
CDialog::OnPaint();
}
}



我开始以为是屏幕分辨率的问题,后来在XP系统中调整了分辨率,还是一样的,在Win7及以上系统调整分辨率则没有任何影响,请问下这是什么原因,是我程序没写好还是其他原因?这个跟显示器有关吗?我看到那些XP系统的电脑用的都是些接近正方形的显示器,比较旧款的,不知是什么问题,望高手帮忙解答下,非常感谢!
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
名人堂再聚首 2019-12-19
  • 打赏
  • 举报
回复
第一张是背景图片,第二张是在Win7及以上系统中出现的正常界面,后面三张是在XP系统下产生的图片,严重错位,我用手机拍的,效果不是特殊好,麻烦各位帮忙看看是什么问题,是我的程序问题还是系统兼容问题,在此先谢谢了!
名人堂再聚首 2019-12-19
  • 打赏
  • 举报
回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧