这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 调节系统显示亮度cpp代码

共3条 1/1 1 跳转至

调节系统显示亮度cpp代码

高工
2017-12-31 12:20:16     打赏

调节系统显示亮度cpp代码

[cpp] view plain copy
  1. #include   

  2.   

  3. class CGammaRamp  

  4. {  

  5. protected:  

  6.     HMODULE hGDI32;  

  7.     HDC hScreenDC;  

  8.     typedef BOOL (WINAPI *Type_SetDeviceGammaRamp)(HDC hDC, LPVOID lpRamp);  

  9.   

  10.     Type_SetDeviceGammaRamp pGetDeviceGammaRamp;  

  11.     Type_SetDeviceGammaRamp pSetDeviceGammaRamp;  

  12.   

  13. public:  

  14.   

  15.     CGammaRamp();  

  16.     ~CGammaRamp();  

  17.     BOOL LoadLibrary();  

  18.     void FreeLibrary();  

  19.     BOOL LoadLibraryIfNeeded();  

  20.     BOOL SetDeviceGammaRamp(HDC hDC, LPVOID lpRamp);  

  21.     BOOL GetDeviceGammaRamp(HDC hDC, LPVOID lpRamp);  

  22.     BOOL SetBrightness(HDC hDC, WORD wBrightness);  

  23.   

  24. };  

  25.   

  26. CGammaRamp::CGammaRamp()  

  27. {  

  28.     //Initialize all variables.  

  29.     hGDI32 = NULL;  

  30.     hScreenDC = NULL;  

  31.     pGetDeviceGammaRamp = NULL;  

  32.     pSetDeviceGammaRamp = NULL;  

  33. }  

  34.   

  35. CGammaRamp::~CGammaRamp()  

  36. {  

  37.     FreeLibrary();  

  38. }  

  39.   

  40.   

  41. BOOL CGammaRamp::LoadLibrary()  

  42. {  

  43.     BOOL bReturn = FALSE;  

  44.   

  45.     FreeLibrary();  

  46.     //Load the GDI library.  

  47.     hGDI32 = ::LoadLibrary("gdi32.dll");  

  48.     if (hGDI32 != NULL)  

  49.     {  

  50.         //Get the addresses of GetDeviceGammaRamp and SetDeviceGammaRamp API functions.  

  51.         pGetDeviceGammaRamp =   

  52.             (Type_SetDeviceGammaRamp)GetProcAddress(hGDI32, "GetDeviceGammaRamp");  

  53.           

  54.         pSetDeviceGammaRamp =   

  55.             (Type_SetDeviceGammaRamp)GetProcAddress(hGDI32, "SetDeviceGammaRamp");  

  56.           

  57.         //Return TRUE only if these functions exist.  

  58.         if (pGetDeviceGammaRamp == NULL || pSetDeviceGammaRamp == NULL)  

  59.             FreeLibrary();  

  60.         else  

  61.             bReturn = TRUE;  

  62.     }  

  63.   

  64.     return bReturn;  

  65. }  

  66.   

  67.   

  68. void CGammaRamp::FreeLibrary()  

  69. {  

  70.     //Free the GDI library.  

  71.     if (hGDI32 != NULL)   

  72.     {  

  73.         ::FreeLibrary(hGDI32);  

  74.         hGDI32 = NULL;  

  75.     }  

  76. }  

  77.   

  78.   

  79. BOOL CGammaRamp::LoadLibraryIfNeeded()  

  80. {  

  81.     BOOL bReturn = FALSE;  

  82.   

  83.     if (hGDI32 == NULL)  

  84.         LoadLibrary();  

  85.   

  86.     if (pGetDeviceGammaRamp != NULL && pSetDeviceGammaRamp != NULL)  

  87.         bReturn = TRUE;  

  88.   

  89.     return bReturn;  

  90. }  

  91.   

  92.   

  93. BOOL CGammaRamp::SetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)  

  94. {  

  95.     //Call to SetDeviceGammaRamp only if this function is successfully loaded.  

  96.     if (LoadLibraryIfNeeded())  

  97.     {  

  98.         return pSetDeviceGammaRamp(hDC, lpRamp);  

  99.     }  

  100.     else  

  101.         return FALSE;  

  102. }  

  103.   

  104.   

  105. BOOL CGammaRamp::GetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)  

  106. {  

  107.     //Call to GetDeviceGammaRamp only if this function is successfully loaded.  

  108.     if (LoadLibraryIfNeeded())  

  109.     {  

  110.         return pGetDeviceGammaRamp(hDC, lpRamp);  

  111.     }  

  112.     else  

  113.         return FALSE;  

  114.   

  115. }  

  116.   

  117.   

  118. BOOL CGammaRamp::SetBrightness(HDC hDC, WORD wBrightness)  

  119. {  

  120.     /* 

  121.     Changes the brightness of the entire screen. 

  122.     This function may not work properly in some video cards. 

  123.  

  124.     The wBrightness value should be a number between 0 and 255. 

  125.     128 = Regular brightness 

  126.     above 128 = brighter 

  127.     below 128 = darker 

  128.  

  129.     If hDC is NULL, SetBrightness automatically load and release  

  130.     the display device context for you. 

  131.  

  132.     */  

  133.     BOOL bReturn = FALSE;  

  134.     HDC hGammaDC = hDC;  

  135.   

  136.     //Load the display device context of the entire screen if hDC is NULL.  

  137.     if (hDC == NULL)  

  138.         hGammaDC = GetDC(NULL);  

  139.   

  140.     if (hGammaDC != NULL)  

  141.     {  

  142.         //Generate the 256-colors array for the specified wBrightness value.  

  143.         WORD GammaArray[3][256];  

  144.   

  145.         for (int iIndex = 0; iIndex < 256; iIndex++)  

  146.         {  

  147.             int iArrayValue = iIndex * (wBrightness + 128);  

  148.   

  149.             if (iArrayValue > 65535)  

  150.                 iArrayValue = 65535;  

  151.   

  152.             GammaArray[0][iIndex] =   

  153.             GammaArray[1][iIndex] =   

  154.             GammaArray[2][iIndex] = (WORD)iArrayValue;  

  155.               

  156.         }  

  157.   

  158.         //Set the GammaArray values into the display device context.  

  159.         bReturn = SetDeviceGammaRamp(hGammaDC, GammaArray);  

  160.     }  

  161.   

  162.     if (hDC == NULL)  

  163.         ReleaseDC(NULL, hGammaDC);  

  164.   

  165.     return bReturn;  

  166. }  

  167.   

  168.   

  169. int main(int argc, char **argv)  

  170. {  

  171.     //Example for changing the brightness with CGammaRamp class:  

  172.     //Be aware that this exmaple may not work properly in all  

  173.     //Video cards.  

  174.   

  175.     CGammaRamp GammaRamp;  

  176.   

  177.     //Make the screen darker:  

  178.     GammaRamp.SetBrightness(NULL, 64);  

  179.   

  180.     //Wait 3 seconds:  

  181.     Sleep(3000);  

  182.   

  183.     //Return back to normal:  

  184.     GammaRamp.SetBrightness(NULL, 128);  

  185.   

  186.     return 0;  

  187. }  




专家
2018-01-01 07:51:57     打赏
2楼

谢谢楼主分享代码。


高工
2018-01-01 15:59:59     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]