MFC 分辨率的问题!

秀小川 2012-09-03 09:02:48
我现在在1366*768的机器上开发的程序, 但是现在我的程序有一张背景图,如果按照不同分辨率的机器去做拉伸的话,就会出现图片变形的问题. 我就想在我的程序里面调整程序运行的分辨率,我看很多游戏里面都可以进行分辨率的调整,而且这个调节仅仅影响的是运行的这个游戏,而不影响外面整个系统.我想这个是怎么实现的?
...全文
359 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
秀小川 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:

引用 7 楼 的回复:
上面那个问题解决了,对话框本身没有标题栏的时候,全屏就会没有标题栏,没有任务栏!
现在的问题是"假如我的程序转为非活动状态(也就是被遮蔽,或者是最小化之类的),要响应哪个函数?转为活动转态又是哪个消息?"

设置为始终在前SetWindowPos可以帮你解决这个问题,设置活动可以用SetActiveWindow

我现在是响应……
[/Quote]
还是响应WM_ACTIVETAPP
秀小川 2012-09-03
  • 打赏
  • 举报
回复
上面那个问题解决了,对话框本身没有标题栏的时候,全屏就会没有标题栏,没有任务栏!
现在的问题是"假如我的程序转为非活动状态(也就是被遮蔽,或者是最小化之类的),要响应哪个函数?转为活动转态又是哪个消息?"
秀小川 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
1、程序开始时

C/C++ code
DEVMODE devmode;
ZeroMemory(&devmode, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode))
……
[/Quote]
这个方法可行.我看有的游戏,改变分辨率,貌似是改分辨率的同时改的窗口大小!
还有一个问题,如何让程序像全屏游戏那样全屏运行,没有上面的窗口栏,没有下面的任务栏!
秀小川 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用楼主 的回复:
我现在在1366*768的机器上开发的程序, 但是现在我的程序有一张背景图,如果按照不同分辨率的机器去做拉伸的话,就会出现图片变形的问题. 我就想在我的程序里面调整程序运行的分辨率,我看很多游戏里面都可以进行分辨率的调整,而且这个调节仅仅影响的是运行的这个游戏,而不影响外面整个系统.我想这个是怎么实现的?

你的背景图可以按照比例缩放嘛~StretchBlt()
[/Quote]
图片按比例收缩的话,长宽的伸缩比例不一样就导致图片变形!
例如现在我的图片有个圆,到1440*900的机器上就拉伸就变成椭圆了...
dickbarry 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用楼主 的回复:
我现在在1366*768的机器上开发的程序, 但是现在我的程序有一张背景图,如果按照不同分辨率的机器去做拉伸的话,就会出现图片变形的问题. 我就想在我的程序里面调整程序运行的分辨率,我看很多游戏里面都可以进行分辨率的调整,而且这个调节仅仅影响的是运行的这个游戏,而不影响外面整个系统.我想这个是怎么实现的?

你的背景图可以按照比例缩放嘛~StretchBlt()
[/Quote]
我想的也是这个方法,可以根据分辨率调自己的图片
Eleven 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我现在在1366*768的机器上开发的程序, 但是现在我的程序有一张背景图,如果按照不同分辨率的机器去做拉伸的话,就会出现图片变形的问题. 我就想在我的程序里面调整程序运行的分辨率,我看很多游戏里面都可以进行分辨率的调整,而且这个调节仅仅影响的是运行的这个游戏,而不影响外面整个系统.我想这个是怎么实现的?
[/Quote]
你的背景图可以按照比例缩放嘛~StretchBlt()
w_xei 2012-09-03
  • 打赏
  • 举报
回复
1、程序开始时

DEVMODE devmode;
ZeroMemory(&devmode, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode))
{
dwOldX = devmode.dmPelsWidth;
dwOldY = devmode.dmPelsHeight;

//设置指定分辨率
ZeroMemory(&devmode, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
devmode.dmPelsWidth = dwX;
devmode.dmPelsHeight = dwY;
ChangeDisplaySettings(&devmode, 0) ;
}
2、程序退出设置恢复原来的分辨率
DEVMODE devmode;
ZeroMemory(&devmode, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
devmode.dmPelsWidth = dwOldX;
devmode.dmPelsHeight = dwOldY;
ChangeDisplaySettings(&devmode, 0);

这样就可以了
yq_m 2012-09-03
  • 打赏
  • 举报
回复
call ChangeDisplaySettings。程序启动之后,保存一下当前的分辨率。然后改成你需要的大小。程序退出或者切换到外面时,将分辨率设置到之前保存的。。。。。。。
秀小川 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
上面那个问题解决了,对话框本身没有标题栏的时候,全屏就会没有标题栏,没有任务栏!
现在的问题是"假如我的程序转为非活动状态(也就是被遮蔽,或者是最小化之类的),要响应哪个函数?转为活动转态又是哪个消息?"

设置为始终在前SetWindowPos可以帮你解决这个问题,设置活动可以用SetActiveWindow
[/Quote]
我现在是响应WM_ACTIVE消息,判断state,设置分辨率!
dickbarry 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
上面那个问题解决了,对话框本身没有标题栏的时候,全屏就会没有标题栏,没有任务栏!
现在的问题是"假如我的程序转为非活动状态(也就是被遮蔽,或者是最小化之类的),要响应哪个函数?转为活动转态又是哪个消息?"
[/Quote]
设置为始终在前SetWindowPos可以帮你解决这个问题,设置活动可以用SetActiveWindow

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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