关于系统修改的小问题,请问如何更改windows的分辨率呢? 问题是这样的: 为了更好的运行我所编写的程序,我需要在程序运行的时候 更改windows的分辨率为1024*768,当该程序退出时,在修改为原来的分辨率,请问各位大侠,我该如何实现,请 给出用vc解决的详细办法,因为我用的是vc,不胜感激,谢了先。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int nFullWidth=GetSystemMetrics(SM_CXSCREEN);int nFullHeight=GetSystemMetrics(SM_CYSCREEN);bool bChanged=0;if(nFullWidth!=800 || nFullHeight!=600)//change from && to ¦¦{DEVMODE lpDevMode;lpDevMode.dmBitsPerPel=16;//Change from 24 to 16lpDevMode.dmPelsWidth=800;lpDevMode.dmPelsHeight=600;lpDevMode.dmDisplayFrequency=85;lpDevMode.dmSize=sizeof(DEVMODE);lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL|DM_DISPLAYFREQUENCY;LONG result;//EnumDisplaySettings(NULL,ENUM_REGISTRY_SETTINGS,&lpDevMode);result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);if (result==DISP_CHANGE_SUCCESSFUL){result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,CDS_UPDATEREGISTRY,NULL);bChanged=1;}else{result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);}} 有关分辨率的解决都在这里了:列出所有分辨率模式为了列出所有可用的分辨率模式,要使用函数EnumDisplaySettings,我们调用这个函数,直到返回FALSE:BOOL bRetVal;CString sDevMode;iMode = 0;do{bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);iMode++;if (bRetVal){sDevMode.Format("%d x %d, %d bits %dhtz",devmode.dmPelsWidth, devmode.dmPelsHeight,devmode.dmBitsPerPel, devmode.dmDisplayFrequency);// list box for all modes (see demo) if (m_lb1.AddString(sDevMode)==LB_ERR)AfxMessageBox("An error occurred!!!");}}while (bRetVal);得到当前分辨率设置EnumDisplaySettings的参数iModeNum为ENUM_CURRENT_SETTINGS.。if (::EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode)){sDevMode.Format("%i x %i, %i bits %dhtz",devmode.dmPelsWidth, devmode.dmPelsHeight,devmode.dmBitsPerPel, devmode.dmDisplayFrequency);m_lb1.SelectString(0, sDevMode);}改变当前分辨率如果要改变当前分辨率,需要用到函数ChangeDisplaySettings。BOOL bRetVal;iMode = m_lb1.GetCurSel();bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);if (bRetVal){devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;::ChangeDisplaySettings(&devmode, 0);} DEVMODE dm; dm.dmSize = sizeof(DEVMODE) ; EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm); LONG result; dm.dmBitsPerPel = 16; dm.dmPelsHeight = 768; dm.dmPelsWidth = 1024; dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; result = ChangeDisplaySettings(&dm,0); 人体交互设备 IE编程,如何让一个已经存在的网页执行自定义的Javascript脚本? 问一个弱智的问题,http协议与socket的 vs2010下,pop3接收邮件的程序设计,stat发出后无响应 做一个mis系统,应该收多少钱? 问高手??线程和进程的经典书籍有那些?? 谁有短信收发的源代码,500分送上. 求VC下三次B样条曲线的算法原代码 十万火急求 请问.ps文件如何打开? 请教:如何修改一应用软件中的双击事件,使其对应 pagedown ? 共享文件如何防止被COPY到远程计算机 在程序中如何控制任务栏,屏蔽它,使我的程序以满屏显示???在线等待
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
bool bChanged=0;
if(nFullWidth!=800 || nFullHeight!=600)//change from && to ¦¦
{
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel=16;//Change from 24 to 16
lpDevMode.dmPelsWidth=800;
lpDevMode.dmPelsHeight=600;
lpDevMode.dmDisplayFrequency=85;
lpDevMode.dmSize=sizeof(DEVMODE);
lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL|DM_DISPLAYFREQUENCY;
LONG result;
//EnumDisplaySettings(NULL,ENUM_REGISTRY_SETTINGS,&lpDevMode);
result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);
if (result==DISP_CHANGE_SUCCESSFUL)
{
result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,CDS_UPDATEREGISTRY,NULL);bChanged=1;
}
else
{
result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);
}
}
BOOL bRetVal;
CString sDevMode;iMode = 0;do
{
bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);
iMode++;
if (bRetVal)
{
sDevMode.Format("%d x %d, %d bits %dhtz",
devmode.dmPelsWidth, devmode.dmPelsHeight,
devmode.dmBitsPerPel, devmode.dmDisplayFrequency);// list box for all modes (see demo)
if (m_lb1.AddString(sDevMode)==LB_ERR)
AfxMessageBox("An error occurred!!!");
}
}
while (bRetVal);得到当前分辨率设置EnumDisplaySettings的参数iModeNum为ENUM_CURRENT_SETTINGS.。
if (::EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode))
{
sDevMode.Format("%i x %i, %i bits %dhtz",
devmode.dmPelsWidth, devmode.dmPelsHeight,
devmode.dmBitsPerPel, devmode.dmDisplayFrequency);m_lb1.SelectString(0, sDevMode);
}改变当前分辨率如果要改变当前分辨率,需要用到函数ChangeDisplaySettings。
BOOL bRetVal;iMode = m_lb1.GetCurSel();
bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);
if (bRetVal)
{
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT |
DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
::ChangeDisplaySettings(&devmode, 0);
}
dm.dmSize = sizeof(DEVMODE) ;
EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm);
LONG result;
dm.dmBitsPerPel = 16;
dm.dmPelsHeight = 768;
dm.dmPelsWidth = 1024;
dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
result = ChangeDisplaySettings(&dm,0);