mirror of
https://github.com/reactos/reactos.git
synced 2025-07-08 21:47:54 +00:00
[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
This commit is contained in:
parent
b326312d52
commit
623dd26cce
1 changed files with 77 additions and 58 deletions
|
@ -2,7 +2,8 @@
|
||||||
* PROJECT: ReactOS msgina.dll
|
* PROJECT: ReactOS msgina.dll
|
||||||
* FILE: dll/win32/msgina/gui.c
|
* FILE: dll/win32/msgina/gui.c
|
||||||
* PURPOSE: ReactOS Logon GINA DLL
|
* PURPOSE: ReactOS Logon GINA DLL
|
||||||
* PROGRAMMER: Hervé Poussineau (hpoussin@reactos.org)
|
* PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
|
||||||
|
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "msgina.h"
|
#include "msgina.h"
|
||||||
|
@ -30,14 +31,62 @@ typedef struct _LEGALNOTICEDATA
|
||||||
typedef struct _DLG_DATA
|
typedef struct _DLG_DATA
|
||||||
{
|
{
|
||||||
PGINA_CONTEXT pgContext;
|
PGINA_CONTEXT pgContext;
|
||||||
HBITMAP hBitmap;
|
HBITMAP hLogoBitmap;
|
||||||
HBITMAP hBarBitmap;
|
HBITMAP hBarBitmap;
|
||||||
UINT_PTR TimerID;
|
UINT_PTR TimerID;
|
||||||
DWORD BarCounter;
|
DWORD BarCounter;
|
||||||
|
DWORD LogoWidth;
|
||||||
|
DWORD LogoHeight;
|
||||||
DWORD BarWidth;
|
DWORD BarWidth;
|
||||||
DWORD BarHeight;
|
DWORD BarHeight;
|
||||||
} DLG_DATA, *PDLG_DATA;
|
} 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
|
static BOOL
|
||||||
GUIInitialize(
|
GUIInitialize(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
|
@ -46,7 +95,6 @@ GUIInitialize(
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
VOID
|
VOID
|
||||||
SetWelcomeText(HWND hWnd)
|
SetWelcomeText(HWND hWnd)
|
||||||
|
@ -136,21 +184,12 @@ StatusDialogProc(
|
||||||
SetDlgItemTextW(hwndDlg, IDC_STATUS_MESSAGE, msg->pMessage);
|
SetDlgItemTextW(hwndDlg, IDC_STATUS_MESSAGE, msg->pMessage);
|
||||||
SetEvent(msg->StartupEvent);
|
SetEvent(msg->StartupEvent);
|
||||||
|
|
||||||
pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
|
pDlgData = DlgData_Create(hwndDlg);
|
||||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
|
|
||||||
|
|
||||||
if (pDlgData == NULL)
|
if (pDlgData == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Load the bar bitmap */
|
if (DlgData_LoadBitmaps(pDlgData))
|
||||||
pDlgData->hBarBitmap = LoadImageW(hDllInstance, MAKEINTRESOURCEW(IDI_BAR), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
|
||||||
if (pDlgData->hBarBitmap)
|
|
||||||
{
|
{
|
||||||
BITMAP bm;
|
|
||||||
|
|
||||||
GetObject(pDlgData->hBarBitmap, sizeof(BITMAP), &bm);
|
|
||||||
pDlgData->BarWidth = bm.bmWidth;
|
|
||||||
pDlgData->BarHeight = bm.bmHeight;
|
|
||||||
pDlgData->TimerID = SetTimer(hwndDlg, -1, 20, NULL);
|
pDlgData->TimerID = SetTimer(hwndDlg, -1, 20, NULL);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -158,7 +197,7 @@ StatusDialogProc(
|
||||||
|
|
||||||
case WM_TIMER:
|
case WM_TIMER:
|
||||||
{
|
{
|
||||||
if (pDlgData)
|
if (pDlgData && pDlgData->hBarBitmap)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Default rotation bar image width is 413 (same as logo)
|
* Default rotation bar image width is 413 (same as logo)
|
||||||
|
@ -202,15 +241,11 @@ StatusDialogProc(
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
if (pDlgData)
|
if (pDlgData && pDlgData->hBarBitmap)
|
||||||
{
|
{
|
||||||
if (pDlgData->hBarBitmap)
|
KillTimer(hwndDlg, pDlgData->TimerID);
|
||||||
{
|
|
||||||
KillTimer(hwndDlg, pDlgData->TimerID);
|
|
||||||
DeleteObject(pDlgData->hBarBitmap);
|
|
||||||
}
|
|
||||||
HeapFree(GetProcessHeap(), 0, pDlgData);
|
|
||||||
}
|
}
|
||||||
|
DlgData_Destroy(pDlgData);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -359,34 +394,30 @@ WelcomeDialogProc(
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
|
pDlgData = DlgData_Create(hwndDlg);
|
||||||
if (pDlgData == NULL)
|
if (pDlgData == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
|
|
||||||
|
|
||||||
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
||||||
|
|
||||||
/* Load the logo bitmap */
|
DlgData_LoadBitmaps(pDlgData);
|
||||||
pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
if (pDlgData->hBitmap)
|
if (pDlgData && pDlgData->hLogoBitmap)
|
||||||
{
|
{
|
||||||
BeginPaint(hwndDlg, &ps);
|
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);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
DeleteObject(pDlgData->hBitmap);
|
DlgData_Destroy(pDlgData);
|
||||||
HeapFree(GetProcessHeap(), 0, pDlgData);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1137,17 +1168,14 @@ LogonDialogProc(
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
|
pDlgData = DlgData_Create(hwndDlg);
|
||||||
if (pDlgData == NULL)
|
if (pDlgData == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
|
|
||||||
|
|
||||||
/* FIXME: take care of NoDomainUI */
|
/* FIXME: take care of NoDomainUI */
|
||||||
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
||||||
|
|
||||||
/* Draw the logo bitmap */
|
DlgData_LoadBitmaps(pDlgData);
|
||||||
pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
|
||||||
|
|
||||||
SetWelcomeText(hwndDlg);
|
SetWelcomeText(hwndDlg);
|
||||||
|
|
||||||
|
@ -1177,18 +1205,17 @@ LogonDialogProc(
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
if (pDlgData->hBitmap)
|
if (pDlgData && pDlgData->hLogoBitmap)
|
||||||
{
|
{
|
||||||
BeginPaint(hwndDlg, &ps);
|
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);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
DeleteObject(pDlgData->hBitmap);
|
DlgData_Destroy(pDlgData);
|
||||||
HeapFree(GetProcessHeap(), 0, pDlgData);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
@ -1417,12 +1444,10 @@ UnlockDialogProc(
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
|
pDlgData = DlgData_Create(hwndDlg);
|
||||||
if (pDlgData == NULL)
|
if (pDlgData == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
|
|
||||||
|
|
||||||
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
||||||
|
|
||||||
SetWelcomeText(hwndDlg);
|
SetWelcomeText(hwndDlg);
|
||||||
|
@ -1435,25 +1460,23 @@ UnlockDialogProc(
|
||||||
if (pDlgData->pgContext->bDisableCAD)
|
if (pDlgData->pgContext->bDisableCAD)
|
||||||
EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
|
EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
|
||||||
|
|
||||||
/* Load the logo bitmap */
|
DlgData_LoadBitmaps(pDlgData);
|
||||||
pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
if (pDlgData->hBitmap)
|
if (pDlgData && pDlgData->hLogoBitmap)
|
||||||
{
|
{
|
||||||
BeginPaint(hwndDlg, &ps);
|
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);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
DeleteObject(pDlgData->hBitmap);
|
DlgData_Destroy(pDlgData);
|
||||||
HeapFree(GetProcessHeap(), 0, pDlgData);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
@ -1517,16 +1540,13 @@ LockedDialogProc(
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pDlgData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DLG_DATA));
|
pDlgData = DlgData_Create(hwndDlg);
|
||||||
if (pDlgData == NULL)
|
if (pDlgData == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)pDlgData);
|
|
||||||
|
|
||||||
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
pDlgData->pgContext = (PGINA_CONTEXT)lParam;
|
||||||
|
|
||||||
/* Load the logo bitmap */
|
DlgData_LoadBitmaps(pDlgData);
|
||||||
pDlgData->hBitmap = LoadImageW(pDlgData->pgContext->hDllInstance, MAKEINTRESOURCEW(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
|
||||||
|
|
||||||
SetWelcomeText(hwndDlg);
|
SetWelcomeText(hwndDlg);
|
||||||
|
|
||||||
|
@ -1536,18 +1556,17 @@ LockedDialogProc(
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
if (pDlgData->hBitmap)
|
if (pDlgData && pDlgData->hLogoBitmap)
|
||||||
{
|
{
|
||||||
BeginPaint(hwndDlg, &ps);
|
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);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
DeleteObject(pDlgData->hBitmap);
|
DlgData_Destroy(pDlgData);
|
||||||
HeapFree(GetProcessHeap(), 0, pDlgData);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue