https://git.reactos.org/?p=reactos.git;a=commitdiff;h=623dd26ccea5e79001aee…
commit 623dd26ccea5e79001aee769c230fb4f8e304fc8
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Tue Feb 18 14:35:44 2020 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Feb 18 14:35:44 2020 +0900
[MSGINA] Make DLG_DATA object-oriented (#2353)
- Rename hBitmap as hLogoBitmap of DLG_DATA structure.
- Add DlgData_Create. DlgData_LoadBitmaps, and DlgData_Destroy functions.
CORE-16697
---
dll/win32/msgina/gui.c | 135 ++++++++++++++++++++++++++++---------------------
1 file changed, 77 insertions(+), 58 deletions(-)
diff --git a/dll/win32/msgina/gui.c b/dll/win32/msgina/gui.c
index c542d864026..dd195d3fb62 100644
--- a/dll/win32/msgina/gui.c
+++ b/dll/win32/msgina/gui.c
@@ -2,7 +2,8 @@
* PROJECT: ReactOS msgina.dll
* FILE: dll/win32/msgina/gui.c
* PURPOSE: ReactOS Logon GINA DLL
- * PROGRAMMER: Herv� Poussineau (hpoussin(a)reactos.org)
+ * PROGRAMMERS: Herv� Poussineau (hpoussin(a)reactos.org)
+ * Katayama Hirofumi MZ (katayama.hirofumi.mz(a)gmail.com)
*/
#include "msgina.h"
@@ -30,14 +31,62 @@ typedef struct _LEGALNOTICEDATA
typedef struct _DLG_DATA
{
PGINA_CONTEXT pgContext;
- HBITMAP hBitmap;
+ HBITMAP hLogoBitmap;
HBITMAP hBarBitmap;
UINT_PTR TimerID;
DWORD BarCounter;
+ DWORD LogoWidth;
+ DWORD LogoHeight;
DWORD BarWidth;
DWORD BarHeight;
} DLG_DATA, *PDLG_DATA;
+static PDLG_DATA
+DlgData_Create(HWND hwndDlg)
+{
+ PDLG_DATA pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(*pDlgData));
+ if (pDlgData)
+ {
+ SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
+ }
+ return pDlgData;
+}
+
+static BOOL
+DlgData_LoadBitmaps(PDLG_DATA pDlgData)
+{
+ BITMAP bm;
+
+ if (!pDlgData)
+ return FALSE;
+
+ pDlgData->hLogoBitmap = LoadImageW(pDlgData->pgContext->hDllInstance,
+ MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP,
+ 0, 0, LR_DEFAULTCOLOR);
+ GetObject(pDlgData->hLogoBitmap, sizeof(bm), &bm);
+ pDlgData->LogoWidth = bm.bmWidth;
+ pDlgData->LogoHeight = bm.bmHeight;
+
+ pDlgData->hBarBitmap = LoadImageW(hDllInstance, MAKEINTRESOURCEW(IDI_BAR),
+ IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ GetObject(pDlgData->hBarBitmap, sizeof(bm), &bm);
+ pDlgData->BarWidth = bm.bmWidth;
+ pDlgData->BarHeight = bm.bmHeight;
+
+ return (pDlgData->hLogoBitmap != NULL && pDlgData->hBarBitmap !=
NULL);
+}
+
+static void
+DlgData_Destroy(PDLG_DATA pDlgData)
+{
+ if (!pDlgData)
+ return;
+
+ DeleteObject(pDlgData->hLogoBitmap);
+ DeleteObject(pDlgData->hBarBitmap);
+ HeapFree(GetProcessHeap(), 0, pDlgData);
+}
+
static BOOL
GUIInitialize(
IN OUT PGINA_CONTEXT pgContext)
@@ -46,7 +95,6 @@ GUIInitialize(
return TRUE;
}
-
static
VOID
SetWelcomeText(HWND hWnd)
@@ -136,21 +184,12 @@ StatusDialogProc(
SetDlgItemTextW(hwndDlg, IDC_STATUS_MESSAGE, msg->pMessage);
SetEvent(msg->StartupEvent);
- pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
- SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
-
+ pDlgData = DlgData_Create(hwndDlg);
if (pDlgData == NULL)
return FALSE;
- /* Load the bar bitmap */
- pDlgData->hBarBitmap = LoadImageW(hDllInstance, MAKEINTRESOURCEW(IDI_BAR),
IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
- if (pDlgData->hBarBitmap)
+ if (DlgData_LoadBitmaps(pDlgData))
{
- BITMAP bm;
-
- GetObject(pDlgData->hBarBitmap, sizeof(BITMAP), &bm);
- pDlgData->BarWidth = bm.bmWidth;
- pDlgData->BarHeight = bm.bmHeight;
pDlgData->TimerID = SetTimer(hwndDlg, -1, 20, NULL);
}
return TRUE;
@@ -158,7 +197,7 @@ StatusDialogProc(
case WM_TIMER:
{
- if (pDlgData)
+ if (pDlgData && pDlgData->hBarBitmap)
{
/*
* Default rotation bar image width is 413 (same as logo)
@@ -202,15 +241,11 @@ StatusDialogProc(
case WM_DESTROY:
{
- if (pDlgData)
+ if (pDlgData && pDlgData->hBarBitmap)
{
- if (pDlgData->hBarBitmap)
- {
- KillTimer(hwndDlg, pDlgData->TimerID);
- DeleteObject(pDlgData->hBarBitmap);
- }
- HeapFree(GetProcessHeap(), 0, pDlgData);
+ KillTimer(hwndDlg, pDlgData->TimerID);
}
+ DlgData_Destroy(pDlgData);
return TRUE;
}
}
@@ -359,34 +394,30 @@ WelcomeDialogProc(
{
case WM_INITDIALOG:
{
- pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
+ pDlgData = DlgData_Create(hwndDlg);
if (pDlgData == NULL)
return FALSE;
- SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
-
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
- /* Load the logo bitmap */
- pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance,
MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ DlgData_LoadBitmaps(pDlgData);
return TRUE;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
- if (pDlgData->hBitmap)
+ if (pDlgData && pDlgData->hLogoBitmap)
{
BeginPaint(hwndDlg, &ps);
- DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hBitmap, (WPARAM)0,
0, 0, 0, 0, DST_BITMAP);
+ DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hLogoBitmap,
(WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
EndPaint(hwndDlg, &ps);
}
return TRUE;
}
case WM_DESTROY:
{
- DeleteObject(pDlgData->hBitmap);
- HeapFree(GetProcessHeap(), 0, pDlgData);
+ DlgData_Destroy(pDlgData);
return TRUE;
}
}
@@ -1137,17 +1168,14 @@ LogonDialogProc(
{
case WM_INITDIALOG:
{
- pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
+ pDlgData = DlgData_Create(hwndDlg);
if (pDlgData == NULL)
return FALSE;
- SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
-
/* FIXME: take care of NoDomainUI */
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
- /* Draw the logo bitmap */
- pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance,
MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ DlgData_LoadBitmaps(pDlgData);
SetWelcomeText(hwndDlg);
@@ -1177,18 +1205,17 @@ LogonDialogProc(
case WM_PAINT:
{
PAINTSTRUCT ps;
- if (pDlgData->hBitmap)
+ if (pDlgData && pDlgData->hLogoBitmap)
{
BeginPaint(hwndDlg, &ps);
- DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hBitmap, (WPARAM)0,
0, 0, 0, 0, DST_BITMAP);
+ DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hLogoBitmap,
(WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
EndPaint(hwndDlg, &ps);
}
return TRUE;
}
case WM_DESTROY:
- DeleteObject(pDlgData->hBitmap);
- HeapFree(GetProcessHeap(), 0, pDlgData);
+ DlgData_Destroy(pDlgData);
return TRUE;
case WM_COMMAND:
@@ -1417,12 +1444,10 @@ UnlockDialogProc(
{
case WM_INITDIALOG:
{
- pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
+ pDlgData = DlgData_Create(hwndDlg);
if (pDlgData == NULL)
return FALSE;
- SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
-
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
SetWelcomeText(hwndDlg);
@@ -1435,25 +1460,23 @@ UnlockDialogProc(
if (pDlgData->pgContext->bDisableCAD)
EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
- /* Load the logo bitmap */
- pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance,
MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ DlgData_LoadBitmaps(pDlgData);
return TRUE;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
- if (pDlgData->hBitmap)
+ if (pDlgData && pDlgData->hLogoBitmap)
{
BeginPaint(hwndDlg, &ps);
- DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hBitmap, (WPARAM)0,
0, 0, 0, 0, DST_BITMAP);
+ DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hLogoBitmap,
(WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
EndPaint(hwndDlg, &ps);
}
return TRUE;
}
case WM_DESTROY:
- DeleteObject(pDlgData->hBitmap);
- HeapFree(GetProcessHeap(), 0, pDlgData);
+ DlgData_Destroy(pDlgData);
return TRUE;
case WM_COMMAND:
@@ -1517,16 +1540,13 @@ LockedDialogProc(
{
case WM_INITDIALOG:
{
- pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
+ pDlgData = DlgData_Create(hwndDlg);
if (pDlgData == NULL)
return FALSE;
- SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
-
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
- /* Load the logo bitmap */
- pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance,
MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
+ DlgData_LoadBitmaps(pDlgData);
SetWelcomeText(hwndDlg);
@@ -1536,18 +1556,17 @@ LockedDialogProc(
case WM_PAINT:
{
PAINTSTRUCT ps;
- if (pDlgData->hBitmap)
+ if (pDlgData && pDlgData->hLogoBitmap)
{
BeginPaint(hwndDlg, &ps);
- DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hBitmap, (WPARAM)0,
0, 0, 0, 0, DST_BITMAP);
+ DrawStateW(ps.hdc, NULL, NULL, (LPARAM)pDlgData->hLogoBitmap,
(WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
EndPaint(hwndDlg, &ps);
}
return TRUE;
}
case WM_DESTROY:
{
- DeleteObject(pDlgData->hBitmap);
- HeapFree(GetProcessHeap(), 0, pDlgData);
+ DlgData_Destroy(pDlgData);
return TRUE;
}
}