mirror of
https://github.com/reactos/reactos.git
synced 2024-07-05 12:15:46 +00:00
- initialize display class with "Ms Shell Dlg"
- don't show display window until font is set - use negative value for font size (patch by roytam1) See issue #2260 for more details. svn path=/trunk/; revision=26883
This commit is contained in:
parent
86ca0a4eba
commit
2b0336eaf8
|
@ -91,14 +91,7 @@ Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos)
|
||||||
hOldFont = SelectObject(hDC, pData->hCaptionFont);
|
hOldFont = SelectObject(hDC, pData->hCaptionFont);
|
||||||
GetTextMetrics(hDC, &tm);
|
GetTextMetrics(hDC, &tm);
|
||||||
|
|
||||||
if (*pData->szFormat == 0)
|
swprintf(szCaption, L"%s%s", pData->szTypeFaceName, pData->szFormat);
|
||||||
{
|
|
||||||
swprintf(szCaption, pData->szTypeFaceName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
swprintf(szCaption, L"%s (%s)", pData->szTypeFaceName, pData->szFormat);
|
|
||||||
}
|
|
||||||
TextOutW(hDC, 0, y, szCaption, wcslen(szCaption));
|
TextOutW(hDC, 0, y, szCaption, wcslen(szCaption));
|
||||||
y += tm.tmHeight + SPACING1;
|
y += tm.tmHeight + SPACING1;
|
||||||
|
|
||||||
|
@ -147,6 +140,79 @@ Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos)
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LRESULT
|
||||||
|
Display_SetTypeFace(HWND hwnd, LPARAM lParam)
|
||||||
|
{
|
||||||
|
DISPLAYDATA* pData;
|
||||||
|
TEXTMETRIC tm;
|
||||||
|
HDC hDC;
|
||||||
|
RECT rect;
|
||||||
|
SCROLLINFO si;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Set the new type face name */
|
||||||
|
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||||
|
snwprintf(pData->szTypeFaceName, MAX_TYPEFACENAME, (WCHAR*)lParam);
|
||||||
|
|
||||||
|
/* Create the new fonts */
|
||||||
|
hDC = GetDC(hwnd);
|
||||||
|
DeleteObject(pData->hCharSetFont);
|
||||||
|
pData->hCharSetFont = CreateFontW(-MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72),
|
||||||
|
0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||||
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
||||||
|
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
||||||
|
DEFAULT_PITCH , pData->szTypeFaceName);
|
||||||
|
|
||||||
|
/* Get font format */
|
||||||
|
// FIXME: Get the real font format (OpenType?)
|
||||||
|
SelectObject(hDC, pData->hCharSetFont);
|
||||||
|
GetTextMetrics(hDC, &tm);
|
||||||
|
if ((tm.tmPitchAndFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE)
|
||||||
|
{
|
||||||
|
swprintf(pData->szFormat, L" (TrueType)");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_SIZES; i++)
|
||||||
|
{
|
||||||
|
DeleteObject(pData->hFonts[i]);
|
||||||
|
pData->hFonts[i] = CreateFontW(-MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY), 72),
|
||||||
|
0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||||
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
||||||
|
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
||||||
|
DEFAULT_PITCH , pData->szTypeFaceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate new page dimensions */
|
||||||
|
pData->nPageHeight = Display_DrawText(hDC, pData, 0);
|
||||||
|
ReleaseDC(hwnd, hDC);
|
||||||
|
|
||||||
|
/* Set the vertical scrolling range and page size */
|
||||||
|
GetClientRect(hwnd, &rect);
|
||||||
|
si.cbSize = sizeof(si);
|
||||||
|
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
|
||||||
|
si.nMin = 0;
|
||||||
|
si.nMax = pData->nPageHeight;
|
||||||
|
si.nPage = rect.bottom;
|
||||||
|
si.nPos = 0;
|
||||||
|
si.nTrackPos = 0;
|
||||||
|
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static LRESULT
|
||||||
|
Display_SetString(HWND hwnd, LPARAM lParam)
|
||||||
|
{
|
||||||
|
DISPLAYDATA* pData;
|
||||||
|
|
||||||
|
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
||||||
|
snwprintf(pData->szString, MAX_STRING, (WCHAR*)lParam);
|
||||||
|
|
||||||
|
// FIXME: redraw the window
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static LRESULT
|
static LRESULT
|
||||||
Display_OnCreate(HWND hwnd)
|
Display_OnCreate(HWND hwnd)
|
||||||
{
|
{
|
||||||
|
@ -154,12 +220,12 @@ Display_OnCreate(HWND hwnd)
|
||||||
const int nSizes[7] = {12, 18, 24, 36, 48, 60, 72};
|
const int nSizes[7] = {12, 18, 24, 36, 48, 60, 72};
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Initialize data structure */
|
/* Create data structure */
|
||||||
pData = malloc(sizeof(DISPLAYDATA));
|
pData = malloc(sizeof(DISPLAYDATA));
|
||||||
pData->nPageHeight = 0;
|
ZeroMemory(pData, sizeof(DISPLAYDATA));
|
||||||
swprintf(pData->szTypeFaceName, L"");
|
|
||||||
swprintf(pData->szFormat, L"");
|
/* Set the window's GWLP_USERDATA to our data structure */
|
||||||
swprintf(pData->szString, L"");
|
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
|
||||||
|
|
||||||
for (i = 0; i < MAX_SIZES; i++)
|
for (i = 0; i < MAX_SIZES; i++)
|
||||||
{
|
{
|
||||||
|
@ -167,15 +233,17 @@ Display_OnCreate(HWND hwnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
pData->hCaptionFont = CreateFontW(50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
pData->hCaptionFont = CreateFontW(50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
||||||
DEFAULT_PITCH , L"Ms Shell Dlg");
|
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
||||||
|
DEFAULT_PITCH , L"Ms Shell Dlg");
|
||||||
|
|
||||||
pData->hSizeFont = CreateFontW(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
pData->hSizeFont = CreateFontW(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
||||||
DEFAULT_PITCH , L"Ms Shell Dlg");
|
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
||||||
|
DEFAULT_PITCH , L"Ms Shell Dlg");
|
||||||
|
|
||||||
/* Set the window's GWLP_USERDATA to our data structure */
|
Display_SetString(hwnd, (LPARAM)L"Jackdaws love my big sphinx of quartz. 1234567890");
|
||||||
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
|
Display_SetTypeFace(hwnd, (LPARAM)L"Ms Shell Dlg");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +264,7 @@ Display_OnPaint(HWND hwnd)
|
||||||
|
|
||||||
BeginPaint(hwnd, &ps);
|
BeginPaint(hwnd, &ps);
|
||||||
|
|
||||||
/* Fill with white */
|
/* Erase background */
|
||||||
FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
|
FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
|
||||||
|
|
||||||
/* Draw the text */
|
/* Draw the text */
|
||||||
|
@ -216,7 +284,7 @@ Display_OnSize(HWND hwnd)
|
||||||
|
|
||||||
GetClientRect(hwnd, &rect);
|
GetClientRect(hwnd, &rect);
|
||||||
|
|
||||||
/* Get the old pos */
|
/* Get the old scroll pos */
|
||||||
si.cbSize = sizeof(si);
|
si.cbSize = sizeof(si);
|
||||||
si.fMask = SIF_POS;
|
si.fMask = SIF_POS;
|
||||||
GetScrollInfo(hwnd, SB_VERT, &si);
|
GetScrollInfo(hwnd, SB_VERT, &si);
|
||||||
|
@ -227,15 +295,15 @@ Display_OnSize(HWND hwnd)
|
||||||
si.nPage = rect.bottom;
|
si.nPage = rect.bottom;
|
||||||
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
|
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
|
||||||
|
|
||||||
/* Get the new pos */
|
/* Get the new scroll pos */
|
||||||
si.fMask = SIF_POS;
|
si.fMask = SIF_POS;
|
||||||
GetScrollInfo(hwnd, SB_VERT, &si);
|
GetScrollInfo(hwnd, SB_VERT, &si);
|
||||||
|
|
||||||
/* If the don't match ... */
|
/* If they don't match ... */
|
||||||
if (nOldPos != si.nPos)
|
if (nOldPos != si.nPos)
|
||||||
{
|
{
|
||||||
/* ... scroll the window */
|
/* ... scroll the window */
|
||||||
ScrollWindowEx(hwnd, 0, -(si.nPos - nOldPos), NULL, NULL, NULL, NULL, SW_INVALIDATE);
|
ScrollWindowEx(hwnd, 0, nOldPos - si.nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +346,7 @@ Display_OnVScroll(HWND hwnd, WPARAM wParam)
|
||||||
nPos = min(nPos, si.nMax);
|
nPos = min(nPos, si.nMax);
|
||||||
if (nPos != si.nPos)
|
if (nPos != si.nPos)
|
||||||
{
|
{
|
||||||
ScrollWindowEx(hwnd, 0, -(nPos - si.nPos), NULL, NULL, NULL, NULL, SW_INVALIDATE);
|
ScrollWindowEx(hwnd, 0, si.nPos - nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
|
||||||
si.cbSize = sizeof(si);
|
si.cbSize = sizeof(si);
|
||||||
si.nPos = nPos;
|
si.nPos = nPos;
|
||||||
si.fMask = SIF_POS;
|
si.fMask = SIF_POS;
|
||||||
|
@ -289,75 +357,6 @@ Display_OnVScroll(HWND hwnd, WPARAM wParam)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LRESULT
|
|
||||||
Display_SetTypeFace(HWND hwnd, LPARAM lParam)
|
|
||||||
{
|
|
||||||
DISPLAYDATA* pData;
|
|
||||||
TEXTMETRIC tm;
|
|
||||||
HDC hDC;
|
|
||||||
RECT rect;
|
|
||||||
SCROLLINFO si;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Set the new type face name */
|
|
||||||
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
|
||||||
snwprintf(pData->szTypeFaceName, MAX_TYPEFACENAME, (WCHAR*)lParam);
|
|
||||||
|
|
||||||
/* Create the new fonts */
|
|
||||||
hDC = GetDC(hwnd);
|
|
||||||
pData->hCharSetFont = CreateFontW(-MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
|
||||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
|
||||||
DEFAULT_PITCH , pData->szTypeFaceName);
|
|
||||||
|
|
||||||
/* Get font format */
|
|
||||||
SelectObject(hDC, pData->hCharSetFont);
|
|
||||||
GetTextMetrics(hDC, &tm);
|
|
||||||
if ((tm.tmPitchAndFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE)
|
|
||||||
{
|
|
||||||
swprintf(pData->szFormat, L"TrueType");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_SIZES; i++)
|
|
||||||
{
|
|
||||||
pData->hFonts[i] = CreateFontW(MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY), 72),
|
|
||||||
0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
|
||||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
|
|
||||||
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
|
|
||||||
DEFAULT_PITCH , pData->szTypeFaceName);
|
|
||||||
SelectObject(hDC, pData->hFonts[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calculate new page dimensions */
|
|
||||||
pData->nPageHeight = Display_DrawText(hDC, pData, 0);
|
|
||||||
ReleaseDC(hwnd, hDC);
|
|
||||||
|
|
||||||
/* Set the vertical scrolling range and page size */
|
|
||||||
GetClientRect(hwnd, &rect);
|
|
||||||
si.cbSize = sizeof(si);
|
|
||||||
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
|
|
||||||
si.nMin = 0;
|
|
||||||
si.nMax = pData->nPageHeight;
|
|
||||||
si.nPage = rect.bottom;
|
|
||||||
si.nPos = 0;
|
|
||||||
si.nTrackPos = 0;
|
|
||||||
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT
|
|
||||||
Display_SetString(HWND hwnd, LPARAM lParam)
|
|
||||||
{
|
|
||||||
DISPLAYDATA* pData;
|
|
||||||
|
|
||||||
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
|
||||||
snwprintf(pData->szString, MAX_STRING, (WCHAR*)lParam);
|
|
||||||
|
|
||||||
// FIXME: redraw the window
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT
|
static LRESULT
|
||||||
Display_OnDestroy(HWND hwnd)
|
Display_OnDestroy(HWND hwnd)
|
||||||
{
|
{
|
||||||
|
@ -385,8 +384,8 @@ Display_OnDestroy(HWND hwnd)
|
||||||
LRESULT CALLBACK
|
LRESULT CALLBACK
|
||||||
DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
return Display_OnCreate(hwnd);
|
return Display_OnCreate(hwnd);
|
||||||
|
|
||||||
|
@ -405,13 +404,13 @@ DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
case FVM_SETSTRING:
|
case FVM_SETSTRING:
|
||||||
return Display_SetString(hwnd, lParam);
|
return Display_SetString(hwnd, lParam);
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
return Display_OnDestroy(hwnd);
|
return Display_OnDestroy(hwnd);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProcW(hwnd, message, wParam, lParam);
|
return DefWindowProcW(hwnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ MainWnd_OnCreate(HWND hwnd)
|
||||||
0, /* Extended style */
|
0, /* Extended style */
|
||||||
g_szFontDisplayClassName, /* Classname */
|
g_szFontDisplayClassName, /* Classname */
|
||||||
L"", /* Title text */
|
L"", /* Title text */
|
||||||
WS_CHILD | WS_VSCROLL| WS_VISIBLE, /* Window style */
|
WS_CHILD | WS_VSCROLL, /* Window style */
|
||||||
0, /* X-pos */
|
0, /* X-pos */
|
||||||
HEADER_SIZE, /* Y-Pos */
|
HEADER_SIZE, /* Y-Pos */
|
||||||
550, /* Width */
|
550, /* Width */
|
||||||
|
@ -202,10 +202,12 @@ MainWnd_OnCreate(HWND hwnd)
|
||||||
NULL /* Window Creation data */
|
NULL /* Window Creation data */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Init the display window with the font name */
|
|
||||||
LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
|
LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
|
||||||
SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
|
SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
|
||||||
|
|
||||||
|
/* Init the display window with the font name */
|
||||||
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)g_szTypeFaceName);
|
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)g_szTypeFaceName);
|
||||||
|
ShowWindow(hDisplay, SW_SHOWNORMAL);
|
||||||
|
|
||||||
/* Create the quit button */
|
/* Create the quit button */
|
||||||
LoadStringW(g_hInstance, IDS_QUIT, szQuit, MAX_BUTTONNAME);
|
LoadStringW(g_hInstance, IDS_QUIT, szQuit, MAX_BUTTONNAME);
|
||||||
|
|
Loading…
Reference in a new issue