556 lines
19 KiB
C
556 lines
19 KiB
C
//************************************************************************//
|
|
//
|
|
// Filename : eudc.c
|
|
//
|
|
// Description: Code for testing various EUDC APIs. Some of the APIs
|
|
// need user input hence the dialog-box callbacks are
|
|
// used.
|
|
//
|
|
// Program Model: Just calls the APIs with the input and prints out
|
|
// the output
|
|
//
|
|
// Created by: Rajesh Munshi
|
|
//
|
|
// History: Created on 08/14/97
|
|
//
|
|
//************************************************************************//
|
|
#include <windows.h>
|
|
#include <commdlg.h>
|
|
#include <wingdi.h>
|
|
|
|
#include "fonttest.h"
|
|
#include "dialogs.h"
|
|
#include "eudc.h"
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowEnableEudc
|
|
//
|
|
// Parameters: pointer to the application window handle
|
|
//
|
|
// Return Value: none
|
|
//
|
|
// Task performed: This function calls EnableEUDC() API,
|
|
// to "enable or disable" EUDC depending
|
|
// on the User selection.
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
VOID ShowEnableEudc( HANDLE hwnd )
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
HMENU hMenu;
|
|
INT bPrevState;
|
|
|
|
|
|
hMenu = GetMenu( hwnd );
|
|
|
|
// If it's already checked, then disable EUDC
|
|
if ( GetMenuState(hMenu, IDM_ENABLEEUDC, MF_BYCOMMAND) & MF_CHECKED)
|
|
{
|
|
CheckMenuItem( hMenu, IDM_ENABLEEUDC, MF_UNCHECKED );
|
|
bPrevState = EnableEUDC(FALSE);
|
|
dprintf("Disabled system wide and per-user Eudc information");
|
|
dprintf("Earlier EUDC state was: %d", bPrevState);
|
|
}
|
|
// Else enable EUDC
|
|
else
|
|
{
|
|
CheckMenuItem( hMenu, IDM_ENABLEEUDC, MF_CHECKED );
|
|
bPrevState = EnableEUDC(TRUE);
|
|
dprintf("Enabled system wide and per-user Eudc information");
|
|
dprintf("Earlier EUDC state was: %d", bPrevState);
|
|
}
|
|
|
|
#endif
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : EudcLoadLinkWDlgProc
|
|
//
|
|
// Parameters: for the dialog box callback procedures.
|
|
//
|
|
// Return Value: TRUE/FALSE.
|
|
//
|
|
// Task performed: This function displays and handles the dialog box
|
|
// for EudcLoadLinkW API(). It processes the user input
|
|
// and calls EudcLoadLinkW().
|
|
//
|
|
//************************************************************************//
|
|
|
|
INT_PTR CALLBACK EudcLoadLinkWDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
static char szFile[MAX_PATH+1];
|
|
static char szFaceName[MAX_PATH+1];
|
|
WCHAR wszFile[MAX_PATH+1];
|
|
WCHAR wszFaceName[MAX_PATH+1];
|
|
INT iPriority;
|
|
INT iFontLinkType;
|
|
ULONG uRet;
|
|
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
SetDlgItemText( hdlg, IDD_LPSZFILE, szFile );
|
|
SendDlgItemMessage( hdlg, IDD_LPSZFILE, EM_LIMITTEXT, sizeof(szFile), 0);
|
|
SetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName );
|
|
SendDlgItemMessage( hdlg, IDD_LPSZFACENAME, EM_LIMITTEXT, sizeof(szFaceName), 0);
|
|
CheckRadioButton(hdlg, IDD_SYSTEM, IDD_USER, IDD_SYSTEM);
|
|
|
|
return TRUE;
|
|
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDOK:
|
|
|
|
szFile[0] = 0;
|
|
szFaceName[0] = 0;
|
|
|
|
GetDlgItemText( hdlg, IDD_LPSZFILE, szFile, sizeof(szFile) );
|
|
GetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName, sizeof(szFaceName) );
|
|
|
|
if (MultiByteToWideChar(GetACP(), 0, szFile, -1, wszFile, MAX_PATH) == 0)
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar(%s)", szFile);
|
|
return TRUE;
|
|
}
|
|
|
|
if (MultiByteToWideChar(GetACP(), 0, szFaceName, -1, wszFaceName, MAX_PATH) == 0)
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar(%s)", szFaceName);
|
|
return TRUE;
|
|
}
|
|
|
|
iPriority = GetDlgItemInt(hdlg, IDD_PRIORITY, NULL, TRUE );
|
|
|
|
if (IsDlgButtonChecked(hdlg, IDD_SYSTEM) == BST_CHECKED)
|
|
{
|
|
iFontLinkType = FONTLINK_SYSTEM;
|
|
}
|
|
else
|
|
{
|
|
iFontLinkType = FONTLINK_USER;
|
|
}
|
|
|
|
dprintf("Calling EudcLoadLinkW(%s, %s, %d, %d)", szFaceName, szFile, iPriority, iFontLinkType);
|
|
uRet = EudcLoadLinkW(wszFaceName, wszFile, iPriority, iFontLinkType);
|
|
dprintf("EudcLoadLinkW returned: %d", uRet);
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : EudcUnLoadLinkWDlgProc
|
|
//
|
|
// Parameters: for the dialog box callback procedures.
|
|
//
|
|
// Return Value: TRUE/FALSE.
|
|
//
|
|
// Task performed: This function displays and handles the dialog box
|
|
// for EudcUnLoadLinkW API(). It processes the user input
|
|
// and calls EudcUnLoadLinkW().
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
INT_PTR CALLBACK EudcUnLoadLinkWDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
static char szFile[MAX_PATH+1];
|
|
static char szFaceName[MAX_PATH+1];
|
|
WCHAR wszFile[MAX_PATH+1];
|
|
WCHAR wszFaceName[MAX_PATH+1];
|
|
ULONG uRet;
|
|
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
SetDlgItemText( hdlg, IDD_LPSZFILE, szFile );
|
|
SendDlgItemMessage( hdlg, IDD_LPSZFILE, EM_LIMITTEXT, sizeof(szFile), 0);
|
|
SetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName );
|
|
SendDlgItemMessage( hdlg, IDD_LPSZFACENAME, EM_LIMITTEXT, sizeof(szFaceName), 0);
|
|
|
|
return TRUE;
|
|
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDOK:
|
|
|
|
szFile[0] = 0;
|
|
szFaceName[0] = 0;
|
|
|
|
GetDlgItemText( hdlg, IDD_LPSZFILE, szFile, sizeof(szFile) );
|
|
GetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName, sizeof(szFaceName) );
|
|
|
|
if (MultiByteToWideChar(GetACP(), 0, szFile, -1, wszFile, MAX_PATH) == 0)
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar(%s)", szFile);
|
|
return TRUE;
|
|
}
|
|
|
|
if (MultiByteToWideChar(GetACP(), 0, szFaceName, -1, wszFaceName, MAX_PATH) == 0)
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar(%s)", szFaceName);
|
|
return TRUE;
|
|
}
|
|
|
|
dprintf("Calling EudcUnLoadLinkW(%s, %s)", szFaceName, szFile);
|
|
uRet = EudcUnloadLinkW(wszFaceName, wszFile);
|
|
dprintf("EudcUnLoadLinkW returned: %d", uRet);
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowGetEudcTimeStampExW
|
|
//
|
|
// Parameters: pointer to the application window handle
|
|
//
|
|
// Return Value: none
|
|
//
|
|
// Task performed: This function simply calls GetEUDCTimeStamp()
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
VOID ShowGetEudcTimeStamp( HANDLE hwnd )
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
ULONG uRet;
|
|
|
|
uRet = GetEUDCTimeStamp();
|
|
dprintf("GetEUDCTimeStamp() returned: %u", uRet);
|
|
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowGetEudcTimeStampExW
|
|
//
|
|
// Parameters: pointer to the application window handle
|
|
//
|
|
// Return Value: none
|
|
//
|
|
// Task performed: This function creates a DC, selects the current
|
|
// font and calls GetEUDCTimeStampExW() on that font.
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
VOID ShowGetEudcTimeStampExW( HANDLE hwnd )
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
ULONG uRet;
|
|
WCHAR lpwstrFaceName[LF_FACESIZE];
|
|
|
|
|
|
if (!MultiByteToWideChar(GetACP(), 0, elfdvA.elfEnumLogfontEx.elfLogFont.lfFaceName,
|
|
lstrlen(elfdvA.elfEnumLogfontEx.elfLogFont.lfFaceName),
|
|
lpwstrFaceName, LF_FACESIZE))
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar for the string: %s",
|
|
elfdvA.elfEnumLogfontEx.elfLogFont.lfFaceName);
|
|
return;
|
|
}
|
|
|
|
uRet = GetEUDCTimeStampExW(lpwstrFaceName);
|
|
|
|
dprintf("GetEUDCTimeStamp(%s) returned: %u",
|
|
elfdvA.elfEnumLogfontEx.elfLogFont.lfFaceName, uRet);
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowGetStringBitMapAProc
|
|
//
|
|
// Parameters: for the dialog box callback procedures.
|
|
//
|
|
// Return Value: TRUE/FALSE.
|
|
//
|
|
// Task performed: This function displays and handles the dialog box
|
|
// for GetStringBitMapA API(). It processes the user input
|
|
// and calls GetStringBitMapA().
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
INT_PTR CALLBACK ShowGetStringBitMapAProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
HDC hdcTest;
|
|
HFONT hFont, hFontOld;
|
|
UINT uRet;
|
|
static char szString[MAX_PATH+1];
|
|
INT iSize = BITMAP_SIZE;
|
|
INT iLenString;
|
|
PBYTE pByte;
|
|
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
SetDlgItemText( hdlg, IDD_STRING, szString );
|
|
SendDlgItemMessage( hdlg, IDD_STRING, EM_LIMITTEXT, sizeof(szString), 0);
|
|
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDOK:
|
|
|
|
szString[0] = 0;
|
|
|
|
GetDlgItemText( hdlg, IDD_STRING, szString, sizeof(szString) );
|
|
|
|
if ((iLenString = strlen(szString)) > 1)
|
|
{
|
|
MessageBox( hdlg, "You can enter text comprising of only one character",
|
|
"GetStringBitmapA", MB_ICONERROR | MB_OK | MB_APPLMODAL);
|
|
return FALSE;
|
|
}
|
|
|
|
if ((pByte = GlobalAlloc(GPTR, iSize)) == NULL)
|
|
{
|
|
dprintf("Failed in allocating %d bytes", iSize);
|
|
return TRUE;
|
|
}
|
|
|
|
hdcTest = CreateTestIC();
|
|
hFont = CreateFontIndirectWrapperA( &elfdvA );
|
|
hFontOld = SelectObject( hdcTest, hFont );
|
|
|
|
uRet = GetStringBitmapA(hdcTest, szString, iLenString, pByte, iSize);
|
|
dprintf("GetStringBitmapA(%s) returned: %d", szString, uRet);
|
|
|
|
SelectObject( hdcTest, hFontOld );
|
|
DeleteObject( hFont );
|
|
DeleteDC( hdcTest );
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowGetStringBitMapWProc
|
|
//
|
|
// Parameters: for the dialog box callback procedures.
|
|
//
|
|
// Return Value: TRUE/FALSE.
|
|
//
|
|
// Task performed: This function displays and handles the dialog box
|
|
// for GetStringBitMapW API(). It processes the user input
|
|
// and calls GetStringBitMapW().
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
INT_PTR CALLBACK ShowGetStringBitMapWProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
HDC hdcTest;
|
|
HFONT hFont, hFontOld;
|
|
UINT uRet;
|
|
static char szString[MAX_PATH+1];
|
|
WCHAR wszString[2];
|
|
INT iSize = BITMAP_SIZE;
|
|
INT iLenString;
|
|
PBYTE pByte;
|
|
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
SetDlgItemText( hdlg, IDD_STRING, szString );
|
|
SendDlgItemMessage( hdlg, IDD_STRING, EM_LIMITTEXT, sizeof(szString), 0);
|
|
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDOK:
|
|
|
|
szString[0] = 0;
|
|
|
|
GetDlgItemText( hdlg, IDD_STRING, szString, sizeof(szString) );
|
|
|
|
if ((iLenString = strlen(szString)) > 1)
|
|
{
|
|
MessageBox( hdlg, "You can enter text comprising of only one character",
|
|
"GetStringBitmapA", MB_ICONERROR | MB_OK | MB_APPLMODAL);
|
|
return FALSE;
|
|
}
|
|
|
|
if (MultiByteToWideChar(GetACP(), 0, szString, -1, wszString, 2) == 0)
|
|
{
|
|
dprintf("Failed in MultiByteToWideChar(%s)", szString);
|
|
return TRUE;
|
|
}
|
|
|
|
if ((pByte = GlobalAlloc(GPTR, iSize)) == NULL)
|
|
{
|
|
dprintf("Failed in allocating %d bytes", iSize);
|
|
return TRUE;
|
|
}
|
|
|
|
hdcTest = CreateTestIC();
|
|
hFont = CreateFontIndirectWrapperA( &elfdvA );
|
|
hFontOld = SelectObject( hdcTest, hFont );
|
|
|
|
uRet = GetStringBitmapW(hdcTest, wszString, iLenString, pByte, iSize);
|
|
dprintf("GetStringBitmapW(%s) returned: %d", szString, uRet);
|
|
|
|
SelectObject( hdcTest, hFontOld );
|
|
DeleteObject( hFont );
|
|
DeleteDC( hdcTest );
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
//************************************************************************//
|
|
//
|
|
// Function : ShowGetFontAssocStatus
|
|
//
|
|
// Parameters: pointer to the application window handle
|
|
//
|
|
// Return Value: none
|
|
//
|
|
// Task performed: This function creates a DC, selects the current
|
|
// font and calls GetFontAssocStatus() on that font.
|
|
//
|
|
//************************************************************************//
|
|
|
|
|
|
VOID ShowGetFontAssocStatus( HANDLE hwnd )
|
|
{
|
|
#ifdef EUDC_API
|
|
|
|
HDC hdcTest;
|
|
HFONT hFont, hFontOld;
|
|
UINT uRet;
|
|
|
|
|
|
hdcTest = CreateTestIC();
|
|
|
|
hFont = CreateFontIndirectWrapperA( &elfdvA );
|
|
hFontOld = SelectObject( hdcTest, hFont );
|
|
|
|
uRet = GetFontAssocStatus(hdcTest);
|
|
dprintf("GetFontAssocStatus(hdc) returned: %u", uRet);
|
|
|
|
SelectObject( hdcTest, hFontOld );
|
|
DeleteObject( hFont );
|
|
|
|
DeleteDC( hdcTest );
|
|
|
|
#endif
|
|
}
|
|
|