我现在屏幕是16位色,怎样把它改变成32位色?
解决方案 »
- 调试达人来看。
- 如何取得默认的IDocHostUIHandler
- CFileDialog Win98 与 2000的区别
- 钩子函数在dll里面的问题,很奇怪的事!!!
- 谢谢帮个忙!很简单的一个关于onpaint重画的问题
- 关于树形控件的选中问题!!!!急!!!
- 怎么样循环n次?在线等待,马上给分
- 如何实现oicq消息发送时的发送快捷键?ctrl+enter
- 求解 sqlite sqlite3 busy handler 用法
- 怎样得到Pi的值!!!
- 如何编写一个telnet服务端,要求可以直接使用windows自带telnet服务连接,并实现简单功能
- 关于XP系统中用2005编译的程序在VISTA下运行提示side by side 的错误
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);
}
}
可能你的显示器不支持那种显示模式
int m_nBitsPerPixel = 32; //这就是你要的颜色数
int m_nWidthPixels = 1024; //这是横向分辩率,如果不想修改这一项就不要赋值
int m_nHeightPixels = 768; //这是纵向分辩率,如果不想修改这一项就不要赋值
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel = m_nBitsPerPixel;
//lpDevMode.dmPelsWidth = m_nWidthPixels; //这是横向分辩率,如果不想修改这一项就不要赋值
//lpDevMode.dmPelsHeight = m_nHeightPixels; //这是纵向分辩率,如果不想修改这一项就不要赋值
lpDevMode.dmSize = sizeof(lpDevMode);
lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
LONG result = ChangeDisplaySettings(&lpDevMode,0);
if(result == DISP_CHANGE_SUCCESSFUL)
{
AfxMessageBox("修改成功");
ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
//使用CDS_UPDATEREGISTRY表示次修改是持久的,
//并在注册表中写入了相关的数据
}
else
{
AfxMessageBox("修改失败,恢复原有设置");
ChangeDisplaySettings(NULL,0);
} 上面的程序就可以帮助楼主解决问题了,但如果有兴趣可以继续看一下下面的内容.
//补充一些其它说明:
//获得当前显示模式可以使用下面的函数:Bool 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);
设置显示模式的方法如下:rc = ChangeDisplaySettings(&devmode,CDS_FULLSCREEN));
//这里的devmode就是前面使用EnumDisplaySettings获得的。如果设置正常,返回值DISP_CHANGE_SUCCESSFUL。