180 lines
3.5 KiB
C
180 lines
3.5 KiB
C
/****************************************************************************
|
|
|
|
ABOUT MICROSOFT DIALOG DLL
|
|
|
|
by RobD
|
|
|
|
****************************************************************************/
|
|
|
|
#define _WINDOWS
|
|
#include <windows.h>
|
|
#include <port1632.h>
|
|
#include <basetsd.h>
|
|
#include "res.h"
|
|
|
|
|
|
/* Local Variables */
|
|
|
|
BOOL fEGA; /* TRUE if working with EGA */
|
|
BOOL fColor; /* TRUE if working with a color display */
|
|
INT cUsers = 0; /* Count of users of the bitmap */
|
|
|
|
HANDLE hInstDll;
|
|
HDC hdcMSFT;
|
|
HBITMAP hbmpMSFT;
|
|
|
|
HICON hiconApp;
|
|
LPSTR lpstrApp;
|
|
LPSTR lpstrCredit;
|
|
|
|
#define cchMax 80
|
|
#define cchMaxTitle 73
|
|
CHAR szAbout[cchMax] = "About ";
|
|
LPSTR lpszTitle = &szAbout[6];
|
|
|
|
|
|
VOID APIENTRY AboutWEP(HWND, HICON, LPSTR, LPSTR);
|
|
|
|
|
|
|
|
/****** L I B M A I N ******/
|
|
|
|
/* Called once to initialize data */
|
|
/* Determines if display is color and remembers the hInstance for the DLL */
|
|
|
|
INT APIENTRY LibMain(HANDLE hInst, ULONG ul_reason_being_called, LPVOID lpReserved)
|
|
{
|
|
|
|
if (fEGA = GetSystemMetrics(SM_CYSCREEN) < 351)
|
|
fColor = FALSE;
|
|
else
|
|
{
|
|
HDC hDC = GetDC(GetDesktopWindow());
|
|
fColor = (GetDeviceCaps(hDC, NUMCOLORS) != 2);
|
|
ReleaseDC(GetDesktopWindow(),hDC);
|
|
}
|
|
|
|
hInstDll = hInst;
|
|
|
|
return 1;
|
|
|
|
UNREFERENCED_PARAMETER(ul_reason_being_called);
|
|
UNREFERENCED_PARAMETER(lpReserved);
|
|
}
|
|
|
|
|
|
/****** W E P ******/
|
|
|
|
/* Called upon exit/last use */
|
|
|
|
VOID APIENTRY WEP(INT nParm)
|
|
{
|
|
return;
|
|
(nParm);
|
|
}
|
|
|
|
|
|
|
|
/*** A B O U T D L G P R O C ***/
|
|
|
|
/* Main Dialog Procedure */
|
|
|
|
INT_PTR APIENTRY AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
RECT rect;
|
|
|
|
SetWindowText(hDlg, (LPSTR) szAbout);
|
|
|
|
if (hiconApp != NULL)
|
|
SendDlgItemMessage(hDlg, ID_ICON_APP, STM_SETICON, (LONG_PTR)hiconApp, 0);
|
|
if (lpstrApp != NULL)
|
|
SetDlgItemText(hDlg, ID_NAME_APP, lpstrApp);
|
|
if (lpstrCredit != NULL)
|
|
SetDlgItemText(hDlg, ID_NAME_CREDIT, lpstrCredit);
|
|
|
|
CreateWindow("button", "",
|
|
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
|
|
10, 10, dxpMSFT, dypMSFT, hDlg, (HMENU)ID_USER_MSFT, hInstDll, NULL);
|
|
|
|
GetWindowRect(hDlg,&rect);
|
|
SetWindowPos(hDlg,NULL,
|
|
(GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) >> 1,
|
|
(GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 3,
|
|
0, 0, SWP_NOSIZE | SWP_NOACTIVATE);
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
|
|
case WM_COMMAND:
|
|
switch(GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
{
|
|
EndDialog(hDlg, TRUE);
|
|
return (TRUE);
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
case WM_DRAWITEM:
|
|
{
|
|
#define lpDI ((LPDRAWITEMSTRUCT) lParam)
|
|
|
|
if ((lpDI->CtlID == ID_USER_MSFT) && (hdcMSFT != NULL))
|
|
BitBlt(lpDI->hDC, 0, 0, dxpMSFT, dypMSFT, hdcMSFT, 0, 0, SRCCOPY);
|
|
|
|
#undef lpDI
|
|
}
|
|
break;
|
|
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return (FALSE);
|
|
}
|
|
|
|
|
|
|
|
/****** A B O U T W E P ******/
|
|
|
|
VOID APIENTRY AboutWEP(HWND hwnd, HICON hicon, LPSTR lpTitle, LPSTR lpCredit)
|
|
{
|
|
hiconApp = hicon;
|
|
lpstrApp = lpTitle;
|
|
lpstrCredit = lpCredit;
|
|
|
|
GetWindowText(hwnd, lpszTitle, cchMaxTitle);
|
|
|
|
if (cUsers++ == 0)
|
|
{
|
|
hdcMSFT = CreateCompatibleDC(NULL);
|
|
hbmpMSFT = LoadBitmap(hInstDll,
|
|
fColor ? MAKEINTRESOURCE(ID_BMP_CLR) : MAKEINTRESOURCE(ID_BMP_BAW) );
|
|
if ((hdcMSFT != NULL) && (hbmpMSFT != NULL))
|
|
SelectObject(hdcMSFT, hbmpMSFT);
|
|
}
|
|
|
|
DialogBox(hInstDll,
|
|
fEGA ? MAKEINTRESOURCE(ID_DLG_ABOUT_EGA) : MAKEINTRESOURCE(ID_DLG_ABOUT),
|
|
hwnd, AboutDlgProc);
|
|
|
|
if ((--cUsers == 0) && (hdcMSFT != NULL))
|
|
{
|
|
DeleteDC(hdcMSFT);
|
|
DeleteObject(hbmpMSFT);
|
|
}
|
|
}
|