Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.0 KiB

  1. /*******************************************************************************
  2. *
  3. * (C) COPYRIGHT MICROSOFT CORPORATION, 1998, 1999, 2000
  4. *
  5. * TITLE: SSUTIL.CPP
  6. *
  7. * VERSION: 1.0
  8. *
  9. * AUTHOR: ShaunIv
  10. *
  11. * DATE: 1/13/1999
  12. *
  13. * DESCRIPTION: Useful functions that are used more than once
  14. *
  15. *******************************************************************************/
  16. #include "precomp.h"
  17. #pragma hdrstop
  18. #include "ssutil.h"
  19. #include <shlobj.h>
  20. bool ScreenSaverUtil::SetIcons( HWND hWnd, HINSTANCE hInstance, int nResId )
  21. {
  22. HICON hIconSmall = (HICON)LoadImage( hInstance, MAKEINTRESOURCE(nResId), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0 );
  23. HICON hIconLarge = (HICON)LoadImage( hInstance, MAKEINTRESOURCE(nResId), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), 0 );
  24. if (hIconSmall)
  25. {
  26. SendMessage( hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall );
  27. }
  28. if (hIconLarge)
  29. {
  30. SendMessage( hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge );
  31. }
  32. return(hIconSmall && hIconLarge);
  33. }
  34. bool ScreenSaverUtil::IsValidRect( RECT &rc )
  35. {
  36. return(rc.left < rc.right && rc.top < rc.bottom);
  37. }
  38. void ScreenSaverUtil::NormalizeRect( RECT &rc )
  39. {
  40. if (rc.left > rc.right)
  41. Swap(rc.left,rc.right);
  42. if (rc.top > rc.bottom)
  43. Swap(rc.top,rc.bottom);
  44. }
  45. void ScreenSaverUtil::EraseDiffRect( HDC hDC, const RECT &oldRect, const RECT &newRect, HBRUSH hBrush )
  46. {
  47. RECT rc;
  48. // Top
  49. rc.left = oldRect.left;
  50. rc.top = oldRect.top;
  51. rc.bottom = newRect.top;
  52. rc.right = oldRect.right;
  53. if (IsValidRect(rc))
  54. {
  55. FillRect( hDC, &rc, hBrush );
  56. }
  57. // Left
  58. rc.left = oldRect.left;
  59. rc.top = newRect.top;
  60. rc.right = newRect.left;
  61. rc.bottom = newRect.bottom;
  62. if (IsValidRect(rc))
  63. {
  64. FillRect( hDC, &rc, hBrush );
  65. }
  66. // Right
  67. rc.left = newRect.right;
  68. rc.top = newRect.top;
  69. rc.right = oldRect.right;
  70. rc.bottom = newRect.bottom;
  71. if (IsValidRect(rc))
  72. {
  73. FillRect( hDC, &rc, hBrush );
  74. }
  75. // Bottom
  76. rc.left = oldRect.left;
  77. rc.top = newRect.bottom;
  78. rc.right = oldRect.right;
  79. rc.bottom = oldRect.bottom;
  80. if (IsValidRect(rc))
  81. {
  82. FillRect( hDC, &rc, hBrush );
  83. }
  84. }
  85. static int CALLBACK ChangeDirectoryCallback( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData )
  86. {
  87. if (uMsg == BFFM_INITIALIZED)
  88. {
  89. SendMessage( hWnd, BFFM_SETSELECTION, 1, (LPARAM)lpData );
  90. }
  91. return 0;
  92. }
  93. bool ScreenSaverUtil::SelectDirectory( HWND hWnd, LPCTSTR pszPrompt, TCHAR szDirectory[] )
  94. {
  95. bool bResult = false;
  96. LPMALLOC pMalloc;
  97. HRESULT hr = SHGetMalloc(&pMalloc);
  98. if (SUCCEEDED(hr))
  99. {
  100. TCHAR szDisplayName[MAX_PATH];
  101. BROWSEINFO BrowseInfo;
  102. ::ZeroMemory( &BrowseInfo, sizeof(BrowseInfo) );
  103. BrowseInfo.hwndOwner = hWnd;
  104. BrowseInfo.pszDisplayName = szDisplayName;
  105. BrowseInfo.lpszTitle = pszPrompt;
  106. BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS;
  107. BrowseInfo.lpfn = ChangeDirectoryCallback;
  108. BrowseInfo.lParam = (LPARAM)szDirectory;
  109. BrowseInfo.iImage = 0;
  110. LPITEMIDLIST pidl = SHBrowseForFolder(&BrowseInfo);
  111. if (pidl != NULL)
  112. {
  113. TCHAR szResult[MAX_PATH];
  114. if (SHGetPathFromIDList(pidl,szResult))
  115. {
  116. lstrcpy( szDirectory, szResult );
  117. bResult = true;
  118. }
  119. pMalloc->Free(pidl);
  120. }
  121. pMalloc->Release();
  122. }
  123. return bResult;
  124. }
  125. HPALETTE ScreenSaverUtil::SelectPalette( HDC hDC, HPALETTE hPalette, BOOL bForceBackground )
  126. {
  127. HPALETTE hOldPalette = NULL;
  128. if (hDC && hPalette)
  129. {
  130. hOldPalette = ::SelectPalette( hDC, hPalette, bForceBackground );
  131. RealizePalette( hDC );
  132. SetBrushOrgEx( hDC, 0,0, NULL );
  133. }
  134. return hOldPalette;
  135. }