写了个小程序,改变显示器的分辨率,使用了ChangeDisplaySettings()。
在2000/xp系统下正常,可切到win98下,分辨率可以改变,可是却无法改变显示器的刷新频率
在2000/xp系统下正常,可切到win98下,分辨率可以改变,可是却无法改变显示器的刷新频率
解决方案 »
- 请教高手,SOCKET接收阻塞和发送非阻塞
- 客户端和服务端的套节字socket值是不是一样的 在线等~~~~~~
- 在VS2008上创建一个简单窗口却总是出错,高手解答
- 如何给程序中创建的CButton控件增加单击事件
- 求例子:用表格显示图片,要求支持拖动等位置编辑VC
- 如何在Access中输入长的字符串,请求各位,谢谢。
- ===请各位大大帮我仔细解释一下SHFILEOPSTRUCT是什么东西?(up有分)===
- 简单,请问这些代码是啥意思?
- 求最简单的SMTP发信源代码(100分)
- 在Win98下编译开发的程序为什么不能在NT/2000下正常运行?
- debug assertion failed是什么错误?
- 关于Tcp/IP的问题
DEVMODE devMode;
::ZeroMemory(&devMode, sizeof(devMode));
devMode.dmDisplayFrequency = 70;
devMode.dmFields = DM_DISPLAYFREQUENCY;
devMode.dmSize = sizeof(devMode);
ChangeDisplaySettings(&devMode, 0);
但常用以下方法:
关键的API函数是EnumDisplaySettings和ChangeDisplaySettings。前者用来获得当前显示驱动所支持的所有显示模式,而后者用来改变显示模式。如果有个程序改变了显示模式, 则Windows会向所有正在运行的程序发送WM_DISPLAYCHANGE消息。获得当前显示模式可以使用下面的函数,它比访问注册表可靠。
Bool CVideoModes :: GetCurrentVideoSettings(DEVMODE *devmode)
{
HWND hwndDesktop=GetDesktopWindow();
HDC hdc=GetDC(hwndDesktop);
devmode -> dmSize =sizeof(DEVMODE);
devmode -> dmBitsPerPel=GetDeviceCaps(hdc,BITSPIXEL);
devmode -> dmPelsWidth=GetSystemMetrics(SM_CXSCREEN);
devmode -> dmPelsHeight=GetSystemMetrics(SM_CYSCREEN);
devmode -> dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
return TRUE;
}
下面的代码展示了如何使用EnumDisplaySettings获得当前支持的所有显示模式:
int modenum,done;
DEVMODE devmode;
done=0;
modenum=0;
do
{
done=!EnumDisplaySettings(NULL,modenum,&devmode);
AddToList(&devmode);
modenum++;
}while (!done);
另:有哪位知道如何用VC在桌面显示32灰阶画面,就象一些显示器测试软(比如Nokia Test软件一样)能给我思路或相关资料么?我在MSDN中不知道该找哪方面做参考