返回列表 发帖

[原创]重置屏幕分辨率

[这个贴子最后由x86在 2006/03/25 02:40pm 第 2 次编辑]

    用自己的程序修改屏幕分辨率的感觉是不一样的。特别是在有些情况下程序必须在1024×768环境下才可以运行,那么就需要在程序执行前先改分辨率,执行后恢复原来的分辨率。修改分辨率可以用API函数来实现,下面给出程序源码:
  1. void OnChagne(int i,int j)
  2. {
  3. DEVMODE lpDevMode;
  4. lpDevMode.dmBitsPerPel = 16;
  5. lpDevMode.dmPelsWidth=i;
  6. lpDevMode.dmPelsHeight=j;
  7. lpDevMode.dmSize = sizeof(lpDevMode);
  8. lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
  9. LONG result = ChangeDisplaySettings(&lpDevMode,0);
  10. if(result == DISP_CHANGE_SUCCESSFUL)
  11. {
  12. MessageBox(NULL,"\n恭喜,修改成功!本程序已经出色的完成任务,厉害不?","→无条件●程序设计!联系QQ:335342",MB_OK);
  13. ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
  14. }
  15. else
  16. {
  17. MessageBox(NULL,"\n对不起,本程序已经尽力了,但还是修改失败了!","→无条件●程序设计!联系QQ:335342",MB_OK);
  18. ChangeDisplaySettings(NULL,0);
  19. }
  20. }
复制代码
调用这个子函数就可以修改屏幕分辨率了,传递的两个参数就是欲设置的屏幕分辨率。如果您不想要提示,只需要把MessageBox()这句去掉。主程序大家可以自由发挥,调用这个子函数就可以了。
为了便于学习和交流,我这里随意给出一个主程序:
  1. char m[200];
  2. int i=GetSystemMetrics(0),j=GetSystemMetrics(1);
  3. sprintf(m,"\n\t  您的当前分辨率为:%d×%d\n\n",i,j);
  4. if (i==1024)
  5. {
  6. lstrcat(m,"  本程序将尝试将它改为“800×600”,你是否愿意?\t");
  7. if (MessageBox(NULL,m,"→无条件●程序设计!联系QQ:335342",MB_YESNO|MB_ICONQUESTION)==IDYES)
  8. OnChagne(800,600);
  9. }
  10. else if(i==800)
  11. {
  12. lstrcat(m,"  本程序将尝试将它改为“1024×768”,你是否愿意?\t");
  13. if (MessageBox(NULL,m,"→无条件●程序设计!联系QQ:335342",MB_YESNO|MB_ICONQUESTION)==IDYES)
  14. OnChagne(1024,768);
  15. }
  16. else if(i==1152)
  17. {
  18. lstrcat(m,"  本程序将尝试将它改为“1024×768”,你是否愿意?\t");
  19. if (MessageBox(NULL,m,"→无条件●程序设计!联系QQ:335342",MB_YESNO|MB_ICONQUESTION)==IDYES)
  20. OnChagne(1024,768);
  21. }
  22. else
  23. {
  24. lstrcat(m,"  真的很对不起,本程序暂时不支持此分辨率的修改!\t");
  25. MessageBox(NULL,m,"→无条件●程序设计!联系QQ:335342",MB_OK);
  26. }
复制代码

[原创]重置屏幕分辨率

这个程序在修改屏幕分辨率一般不会失败。在所有操作系统下都支持。

TOP

[原创]重置屏幕分辨率

ChangeDisplaySettings,
关键就是这个函数了,如果大家看得有些迷糊,比如参数不了解,偶这里把msdn上的详细说明帖出来:
//////////////////////////////////////////////////////////////////////
The ChangeDisplaySettings function changes the settings of the default display device to the specified graphics mode.
To change the settings of a specified display device, use the ChangeDisplaySettingsEx function.
LONG The ChangeDisplaySettings function changes the settings of the default display device to the specified graphics mode.
To change the settings of a specified display device, use the ChangeDisplaySettingsEx function.
LONG ChangeDisplaySettings(
  LPDEVMODE lpDevMode,  // graphics mode
  DWORD dwflags         // graphics mode options
);
The ChangeDisplaySettings function changes the settings of the default display device to the specified graphics mode.
To change the settings of a specified display device, use the ChangeDisplaySettingsEx function.
LONG ChangeDisplaySettings(
  LPDEVMODE lpDevMode,  // graphics mode
  DWORD dwflags         // graphics mode options
);
ChangeDisplaySettings函数是一个功能强大的用来修改一个指定的显示设备的设置的.
其中第一个参数LPDEVMODE是一个指向一个DEVMODE结构体的指针.可以在此结构体中设置你要修改的显示选项,包括分辨率,
第二个参数dwflags 表明了你要修改设置的模式,比如是动态的,还是立即修改或者先保存等...
        

TOP

[原创]重置屏幕分辨率

我也来补充下,嘿嘿,调用这个函数就可以得到当前屏幕的显示参数了。。。
     cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
     cyScreen = GetSystemMetrics (SM_CYSCREEN) ;

TOP

[原创]重置屏幕分辨率

详细点
#include "windows.h"
#include "tchar.h"
#include "stdio.h"
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
     TCHAR   szBuffer [1024] ;
     va_list pArgList ;
          // The va_start macro (defined in STDARG.H) is usually equivalent to:
          // pArgList = (char *) &szFormat + sizeof (szFormat) ;
     va_start (pArgList, szFormat) ;
          // The last argument to wvsprintf points to the arguments
     _vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
                  szFormat, pArgList) ;
          // The va_end macro just zeroes out pArgList for no good reason
     va_end (pArgList) ;
     return MessageBox (NULL, szBuffer, szCaption, 0) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
int cxScreen,cyScreen;
cxScreen = GetSystemMetrics (SM_CXSCREEN);
    cyScreen = GetSystemMetrics (SM_CYSCREEN);
     MessageBoxPrintf (TEXT ("ScrnSize"),TEXT ("The screen is %i pixels wide by %i pixels high."),cxScreen, cyScreen);
return 0;
}

TOP

[原创]重置屏幕分辨率

cxScreen = GetSystemMetrics (SM_CXSCREEN) ; cyScreen = GetSystemMetrics (SM_CYSCREEN) ; 这两个用着有点烦琐。得到当前分辨率的最简单方法是: #include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdLine,int nCmdShow) { char m[200]; int i=GetSystemMetrics(0),j=GetSystemMetrics(1); sprintf(m,"\n\t 您的当前分辨率为:%d×%d",i,j); MessageBox(NULL,m,"→无条件●程序设计!联系QQ:335342",MB_OK); }

TOP

返回列表 回复 发帖