pageError.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "./pageError.h"
  2. #include "./loginBox.h"
  3. #include "./common.h"
  4. #include "../resource.h"
  5. static HRESULT CALLBACK LoginPageError_CreateInstance(HWND hwnd, HWND hLoginbox, LoginPage **instance)
  6. {
  7. if (NULL == instance) return E_POINTER;
  8. if (NULL == hwnd || NULL == hLoginbox) return E_INVALIDARG;
  9. *instance = new LoginPageError(hwnd, hLoginbox);
  10. if (NULL == instance) return E_OUTOFMEMORY;
  11. return S_OK;
  12. }
  13. LoginPageError::LoginPageError(HWND hwnd, HWND hLoginbox)
  14. : LoginPage(hwnd, hLoginbox)
  15. {
  16. }
  17. LoginPageError::~LoginPageError()
  18. {
  19. }
  20. HWND LoginPageError::CreatePage(HWND hLoginbox, HWND hParent)
  21. {
  22. return LoginPage::CreatePage(hLoginbox, MAKEINTRESOURCE(IDD_PAGE_ERROR),
  23. hParent, NULL, LoginPageError_CreateInstance);
  24. }
  25. void LoginPageError::UpdateLayout(BOOL fRedraw)
  26. {
  27. LoginPage::UpdateLayout(fRedraw);
  28. RECT clientRect;
  29. GetClientRect(hwnd, &clientRect);
  30. RECT offsetRect;
  31. SetRect(&offsetRect, 2, 4, 4, 22);
  32. MapDialogRect(hwnd, &offsetRect);
  33. clientRect.left += offsetRect.left;
  34. clientRect.top += offsetRect.top;
  35. clientRect.right -= offsetRect.right;
  36. clientRect.bottom -= offsetRect.bottom;
  37. UINT flags = SWP_NOACTIVATE | SWP_NOZORDER;
  38. if (FALSE == fRedraw) flags |= SWP_NOREDRAW;
  39. const INT szControls[] = { IDC_MESSAGE, };
  40. HDWP hdwp = BeginDeferWindowPos(ARRAYSIZE(szControls));
  41. RECT rect;
  42. LONG left, top = clientRect.top;
  43. for (INT i = 0; i < ARRAYSIZE(szControls); i++)
  44. {
  45. HWND hControl = GetDlgItem(hwnd, szControls[i]);
  46. if (NULL == hControl || FALSE == GetWindowRect(hControl, &rect)) continue;
  47. MapWindowPoints(HWND_DESKTOP, hwnd, (POINT*)&rect, 2);
  48. switch(szControls[i])
  49. {
  50. case IDC_MESSAGE:
  51. top = clientRect.top + ((clientRect.bottom - clientRect.top) - (rect.bottom - rect.top))/2;
  52. left = clientRect.left + ((clientRect.right - clientRect.left) - (rect.right - rect.left))/2;
  53. OffsetRect(&rect, left - rect.left, top - rect.top);
  54. break;
  55. }
  56. hdwp = DeferWindowPos(hdwp, hControl, NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, flags);
  57. if (NULL == hdwp) break;
  58. }
  59. if (NULL != hdwp)
  60. EndDeferWindowPos(hdwp);
  61. }
  62. HBRUSH LoginPageError::OnGetStaticColor(HDC hdc, HWND hControl)
  63. {
  64. INT_PTR controlId = (INT_PTR)GetWindowLongPtr(hControl, GWLP_ID);
  65. switch(controlId)
  66. {
  67. case IDC_MESSAGE:
  68. SetTextColor(hdc, rgbSecondaryText);
  69. SetBkColor(hdc, rgbBack);
  70. return hbrBack;
  71. }
  72. return LoginPage::OnGetStaticColor(hdc, hControl);
  73. }
  74. BOOL LoginPageError::OnGetLoginData(LoginData **ppLoginData)
  75. {
  76. return FALSE;
  77. }