Added welcome/autorun application

svn path=/trunk/; revision=3384
This commit is contained in:
Eric Kohl 2002-08-23 16:17:12 +00:00
parent e8d3ef310d
commit 4abbed187f
6 changed files with 1093 additions and 0 deletions

View file

@ -36,6 +36,7 @@ APPS = calc \
regedit \ regedit \
regedt32 \ regedt32 \
taskmgr \ taskmgr \
welcome \
winfile winfile
all: $(APPS) all: $(APPS)

View file

@ -0,0 +1,92 @@
#include "resource.h"
/* Bitmaps */
IDB_TITLEBITMAP BITMAP DISCARDABLE "res/title.bmp"
IDB_DEFAULTTOPICBITMAP BITMAP DISCARDABLE "res/default.bmp"
IDB_TOPICBITMAP0 BITMAP DISCARDABLE "res/topic0.bmp"
IDB_TOPICBITMAP1 BITMAP DISCARDABLE "res/topic1.bmp"
IDB_TOPICBITMAP2 BITMAP DISCARDABLE "res/topic2.bmp"
//IDB_TOPICBITMAP3 BITMAP DISCARDABLE "res/topic3.bmp"
//IDB_TOPICBITMAP4 BITMAP DISCARDABLE "res/topic4.bmp"
//IDB_TOPICBITMAP5 BITMAP DISCARDABLE "res/topic5.bmp"
//IDB_TOPICBITMAP6 BITMAP DISCARDABLE "res/topic6.bmp"
//IDB_TOPICBITMAP7 BITMAP DISCARDABLE "res/topic7.bmp"
//IDB_TOPICBITMAP8 BITMAP DISCARDABLE "res/topic8.bmp"
//IDB_TOPICBITMAP9 BITMAP DISCARDABLE "res/topic9.bmp"
/* String Tables */
/* Default settings */
STRINGTABLE DISCARDABLE
BEGIN
IDS_APPTITLE "ReactOS 0.0.20 - Installation CD"
IDS_DEFAULTTOPICTITLE "ReactOS"
IDS_DEFAULTTOPICDESC "The new Operating System for computer users who do not want to obey to the Monopoly.\n\nClick a topic on the left."
// IDS_CHECKTEXT "&Show this dialog again"
// IDS_CLOSETEXT "E&xit"
END
/* Topic buttons */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICBUTTON0 "&Install ReactOS"
IDS_TOPICBUTTON1 "Install ReactOS &Components"
IDS_TOPICBUTTON2 "Online &Registration"
IDS_TOPICBUTTON3 "&Browse this CD"
IDS_TOPICBUTTON4 "E&xit"
// IDS_TOPICBUTTON5 "Empty Topic 5"
// IDS_TOPICBUTTON6 "Empty Topic 6"
// IDS_TOPICBUTTON7 "Empty Topic 7"
// IDS_TOPICBUTTON8 "Empty Topic 8"
// IDS_TOPICBUTTON9 "Empty Topic 9"
END
/* Topic titles */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICTITLE0 "Install ReactOS"
IDS_TOPICTITLE1 "Install ReactOS Components"
IDS_TOPICTITLE2 "Online Registration"
IDS_TOPICTITLE3 "Browse this CD"
IDS_TOPICTITLE4 "Exit"
// IDS_TOPICTITLE5 "Empty Topic Title 5"
// IDS_TOPICTITLE6 "Empty Topic Title 6"
// IDS_TOPICTITLE7 "Empty Topic Title 7"
// IDS_TOPICTITLE8 "Empty Topic Title 8"
// IDS_TOPICTITLE9 "Empty Topic Title 9"
END
/* Topic descriptions */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICDESC0 "Install ReactOS on this computer.\nYou can either update an existing installation or create a new one."
IDS_TOPICDESC1 "Customize ReactOS by installing optional applications and components."
IDS_TOPICDESC2 "Register ReactOS now!\n\nBy registering ReactOS you will gain a lot of additional benefits, like unsolicited product information, incompetent hotline services and huge amounts of third-party junk mail."
IDS_TOPICDESC3 "Browse the CD to find only a few files, no applications, incomplete documentation and no readme files."
IDS_TOPICDESC4 "Click to exit this application."
// IDS_TOPICDESC5 "Topic description 5.\n\nDescribe topic 5 here."
// IDS_TOPICDESC6 "Topic description 6.\n\nDescribe topic 6 here."
// IDS_TOPICDESC7 "Topic description 7.\n\nDescribe topic 7 here."
// IDS_TOPICDESC8 "Topic description 8.\n\nDescribe topic 8 here."
// IDS_TOPICDESC9 "Topic description 9.\n\nDescribe topic 9 here."
END
/* Topic actions */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICACTION0 "setup32.exe"
IDS_TOPICACTION1 "sysocmgr.exe"
IDS_TOPICACTION2 "signup.exe"
IDS_TOPICACTION3 "explorer.exe"
// IDS_TOPICACTION4 "..."
// IDS_TOPICACTION5 "..."
// IDS_TOPICACTION6 "..."
// IDS_TOPICACTION7 "..."
// IDS_TOPICACTION8 "..."
// IDS_TOPICACTION9 "..."
END

34
rosapps/welcome/makefile Normal file
View file

@ -0,0 +1,34 @@
#
# ReactOS welcome/autorun
#
# Makefile
#
# Copyright (C) 2002 The ReactOS Project
PATH_TO_TOP = ..
OBJS = welcome.o
LIBS = -lkernel32 -lgdi32 -luser32
all: welcome.exe autorun.exe
autorun.exe: welcome.o autorun.coff
$(CC) welcome.o autorun.coff \
-Wl,--subsystem,windows \
-lkernel32 -lgdi32 -luser32 -o autorun.exe
welcome.exe: welcome.o welcome.coff
$(CC) welcome.o welcome.coff \
-Wl,--subsystem,windows \
-lkernel32 -lgdi32 -luser32 -o welcome.exe
clean:
$(RM) *.o
$(RM) *.coff
$(RM) *.exe
include $(PATH_TO_TOP)/rules.mak
# EOF

View file

@ -0,0 +1,83 @@
#define IDS_APPTITLE 1000
#define IDS_DEFAULTTOPICTITLE 1001
#define IDS_DEFAULTTOPICDESC 1002
#define IDS_FONTNAME 1003
#define IDS_CHECKTEXT 1004
#define IDS_CLOSETEXT 1005
#define IDS_TOPICBUTTON0 1010
#define IDS_TOPICBUTTON1 1011
#define IDS_TOPICBUTTON2 1012
#define IDS_TOPICBUTTON3 1013
#define IDS_TOPICBUTTON4 1014
#define IDS_TOPICBUTTON5 1015
#define IDS_TOPICBUTTON6 1016
#define IDS_TOPICBUTTON7 1017
#define IDS_TOPICBUTTON8 1018
#define IDS_TOPICBUTTON9 1019
#define IDS_TOPICTITLE0 1020
#define IDS_TOPICTITLE1 1021
#define IDS_TOPICTITLE2 1022
#define IDS_TOPICTITLE3 1023
#define IDS_TOPICTITLE4 1024
#define IDS_TOPICTITLE5 1025
#define IDS_TOPICTITLE6 1026
#define IDS_TOPICTITLE7 1027
#define IDS_TOPICTITLE8 1028
#define IDS_TOPICTITLE9 1029
#define IDS_TOPICDESC0 1030
#define IDS_TOPICDESC1 1031
#define IDS_TOPICDESC2 1032
#define IDS_TOPICDESC3 1033
#define IDS_TOPICDESC4 1034
#define IDS_TOPICDESC5 1035
#define IDS_TOPICDESC6 1036
#define IDS_TOPICDESC7 1037
#define IDS_TOPICDESC8 1038
#define IDS_TOPICDESC9 1039
#define IDS_TOPICACTION0 1040
#define IDS_TOPICACTION1 1041
#define IDS_TOPICACTION2 1042
#define IDS_TOPICACTION3 1043
#define IDS_TOPICACTION4 1044
#define IDS_TOPICACTION5 1045
#define IDS_TOPICACTION6 1046
#define IDS_TOPICACTION7 1047
#define IDS_TOPICACTION8 1048
#define IDS_TOPICACTION9 1049
#define IDS_TOPICOPTION0 1050
#define IDS_TOPICOPTION1 1051
#define IDS_TOPICOPTION2 1052
#define IDS_TOPICOPTION3 1053
#define IDS_TOPICOPTION4 1054
#define IDS_TOPICOPTION5 1055
#define IDS_TOPICOPTION6 1056
#define IDS_TOPICOPTION7 1057
#define IDS_TOPICOPTION8 1058
#define IDS_TOPICOPTION9 1059
/* Bitmaps */
#define IDB_TITLEBITMAP 101
#define IDB_DEFAULTTOPICBITMAP 102
#define IDB_TOPICBITMAP0 110
#define IDB_TOPICBITMAP1 111
#define IDB_TOPICBITMAP2 112
#define IDB_TOPICBITMAP3 113
#define IDB_TOPICBITMAP4 114
#define IDB_TOPICBITMAP5 115
#define IDB_TOPICBITMAP6 116
#define IDB_TOPICBITMAP7 117
#define IDB_TOPICBITMAP8 118
#define IDB_TOPICBITMAP9 119
#define IDC_CLOSEBUTTON 2000
#define IDC_CHECKBUTTON 2001

790
rosapps/welcome/welcome.c Normal file
View file

@ -0,0 +1,790 @@
/*
* ReactOS applications
* Copyright (C) 2001, 2002 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: welcome.c,v 1.1 2002/08/23 16:15:09 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS welcome/autorun application
* FILE: welcome/welcome.c
* PROGRAMMERS: Eric Kohl (ekohl@rz-online.de)
*/
#include <windows.h>
#include <string.h>
#include <tchar.h>
#include "resource.h"
#define LIGHT_BLUE 0x00F0CAA6
#define DARK_BLUE 0x00996633
/* GLOBALS ******************************************************************/
TCHAR szFrameClass [] = "WelcomeWindowClass";
TCHAR szAppTitle [80];
HINSTANCE hInstance;
HWND hwndMain = 0;
HWND hwndDefaultTopic = 0;
HBITMAP hTitleBitmap = 0;
HDC hdcDisplay=0;
HDC hdcMem = 0;
int nTopic = -1;
int nDefaultTopic = -1;
ULONG ulInnerWidth = 480;
ULONG ulInnerHeight = 360;
HBITMAP hDefaultTopicBitmap;
HBITMAP hTopicBitmap[10];
HWND hwndTopicButton[10];
HWND hwndCloseButton;
HWND hwndCheckButton;
HFONT hfontTopicButton;
HFONT hfontTopicTitle;
HFONT hfontTopicDescription;
HFONT hfontCheckButton;
HFONT hfontBannerTitle;
HBRUSH hbrLightBlue;
HBRUSH hbrDarkBlue;
HBRUSH hbrRightPanel;
RECT rcTitlePanel;
RECT rcLeftPanel;
RECT rcRightPanel;
WNDPROC fnOldBtn;
LRESULT CALLBACK
MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
/* FUNCTIONS ****************************************************************/
int WINAPI
WinMain(HINSTANCE hInst,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
WNDCLASSEX wndclass;
MSG msg;
int xPos;
int yPos;
int xWidth;
int yHeight;
RECT rcWindow;
DWORD dwStyle = WS_OVERLAPPED | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU | WS_VISIBLE;
hInstance = hInst;
/* Register the window class */
wndclass.style = CS_OWNDC;
wndclass.lpfnWndProc = (WNDPROC)MainWndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = 0;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = 0;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szFrameClass;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.hIconSm = 0;
RegisterClassEx(&wndclass);
rcWindow.top = 0;
rcWindow.bottom = ulInnerHeight - 1;
rcWindow.left = 0;
rcWindow.right = ulInnerWidth - 1;
AdjustWindowRect(&rcWindow,
dwStyle,
FALSE);
xWidth = rcWindow.right - rcWindow.left;
yHeight = rcWindow.bottom - rcWindow.top;
xPos = (GetSystemMetrics(SM_CXSCREEN) - xWidth) / 2;
yPos = (GetSystemMetrics(SM_CYSCREEN) - yHeight) / 2;
rcTitlePanel.top = 0;
rcTitlePanel.bottom = 93;
rcTitlePanel.left = 0;
rcTitlePanel.right = ulInnerWidth - 1;
rcLeftPanel.top = rcTitlePanel.bottom;
rcLeftPanel.bottom = ulInnerHeight - 1;
rcLeftPanel.left = 0;
rcLeftPanel.right = ulInnerWidth / 3;
rcRightPanel.top = rcLeftPanel.top;
rcRightPanel.bottom = rcLeftPanel.bottom;
rcRightPanel.left = rcLeftPanel.right;
rcRightPanel.right = ulInnerWidth - 1;
if (!LoadString(hInstance, (UINT)MAKEINTRESOURCE(IDS_APPTITLE), szAppTitle, 80))
_tcscpy(szAppTitle, TEXT("ReactOS Welcome"));
/* Create main window */
hwndMain = CreateWindow(szFrameClass,
szAppTitle,
dwStyle,
xPos,
yPos,
xWidth,
yHeight,
0,
0,
hInstance,
NULL);
ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);
while (GetMessage(&msg, NULL, 0, 0) != FALSE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}
LRESULT CALLBACK
ButtonSubclassWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LONG i;
if (uMsg == WM_MOUSEMOVE)
{
i = GetWindowLong(hWnd, GWL_ID);
if (nTopic != i)
{
nTopic = i;
SetFocus(hWnd);
InvalidateRect(hwndMain, NULL, TRUE);
}
}
return(CallWindowProc(fnOldBtn, hWnd, uMsg, wParam, lParam));
}
static BOOL
RunApplication(int nTopic)
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
CHAR AppName[256];
CHAR CurrentDir[256];
int nLength;
InvalidateRect(hwndMain, NULL, TRUE);
GetCurrentDirectory(256, CurrentDir);
nLength = LoadString(hInstance, IDS_TOPICACTION0 + nTopic, AppName, 256);
if (nLength == 0)
return(FALSE);
if (stricmp(AppName, "explorer.exe") == 0)
{
strcat(AppName, " ");
strcat(AppName, CurrentDir);
}
memset(&StartupInfo, 0, sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.lpTitle = "Test";
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_SHOWNORMAL;
CreateProcess(NULL, AppName, NULL, NULL, FALSE, CREATE_NEW_CONSOLE,NULL,
CurrentDir,
&StartupInfo,
&ProcessInfo);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
return(TRUE);
}
static VOID
SubclassButton(HWND hWnd)
{
fnOldBtn = (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LPARAM)ButtonSubclassWndProc);
}
static DWORD
GetButtonHeight(HDC hDC,
HFONT hFont,
PSZ szText,
DWORD dwWidth)
{
HFONT hOldFont;
RECT rect;
rect.left = 0;
rect.right = dwWidth - 20;
rect.top = 0;
rect.bottom = 25;
hOldFont = SelectObject(hDC, hFont);
DrawText(hDC, szText, -1, &rect, DT_TOP | DT_CALCRECT | DT_WORDBREAK);
SelectObject(hDC, hOldFont);
return(rect.bottom-rect.top + 14);
}
static LRESULT
OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
char szText[80];
int i,nLength;
DWORD dwTop;
DWORD dwHeight = 0;
hbrLightBlue = CreateSolidBrush (LIGHT_BLUE);
hbrDarkBlue = CreateSolidBrush(DARK_BLUE);
hbrRightPanel = CreateSolidBrush (0x00FFFFFF);
/* Banner fonts */
hfontBannerTitle = CreateFont(-30,0,0,0,FW_BOLD,
FALSE,FALSE,FALSE,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Arial");
hfontTopicTitle = CreateFont(-18,0,0,0,FW_NORMAL,
FALSE,FALSE,FALSE,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Arial");
hfontTopicDescription = CreateFont(-11,0,0,0,FW_THIN,
FALSE,FALSE,FALSE,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Arial");
hfontTopicButton = CreateFont(-11,0,0,0,FW_BOLD,
FALSE,FALSE,FALSE,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Arial");
/* Load bitmaps */
hTitleBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_TITLEBITMAP));
hDefaultTopicBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_DEFAULTTOPICBITMAP));
for (i=0;i < 10; i++)
{
hTopicBitmap[i] = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_TOPICBITMAP0+i));
}
hdcDisplay = CreateDC ("DISPLAY", NULL, NULL, NULL);
hdcMem = CreateCompatibleDC (hdcDisplay);
/* load and create buttons */
dwTop = rcLeftPanel.top;
for (i=0;i < 10; i++)
{
nLength = LoadString(hInstance, IDS_TOPICBUTTON0+i,szText,80);
if (nLength > 0)
{
dwHeight = GetButtonHeight(hdcMem,
hfontTopicButton,
szText,
rcLeftPanel.right - rcLeftPanel.left);
hwndTopicButton[i] = CreateWindow("BUTTON",
szText,
WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | BS_MULTILINE | BS_OWNERDRAW,
rcLeftPanel.left,
dwTop,
rcLeftPanel.right - rcLeftPanel.left,
dwHeight,
hWnd,
(HMENU)i,
hInstance,
NULL);
hwndDefaultTopic = hwndTopicButton[i];
nDefaultTopic = i;
SubclassButton(hwndTopicButton[i]);
SendMessage(hwndTopicButton[i], WM_SETFONT, (WPARAM)hfontTopicButton, MAKELPARAM(TRUE,0));
}
else
{
hwndTopicButton[i] = 0;
}
dwTop += dwHeight;
}
/* Create exit button */
nLength = LoadString(hInstance, IDS_CLOSETEXT, szText, 80);
if (nLength > 0)
{
hwndCloseButton = CreateWindow("BUTTON",
szText,
WS_VISIBLE | WS_CHILD | BS_FLAT,
rcRightPanel.right - 10 - 57,
rcRightPanel.bottom - 10 - 21,
57,
21,
hWnd,
(HMENU)IDC_CLOSEBUTTON,
hInstance,
NULL);
hwndDefaultTopic = 0;
nDefaultTopic = -1;
SendMessage(hwndCloseButton, WM_SETFONT, (WPARAM)hfontTopicButton, MAKELPARAM(TRUE,0));
}
else
{
hwndCloseButton = 0;
}
/* Create checkbox */
nLength = LoadString(hInstance, IDS_CHECKTEXT,szText,80);
if (nLength > 0)
{
hfontCheckButton = CreateFont(-10,0,0,0,FW_THIN,FALSE,FALSE,FALSE,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Tahoma");
hwndCheckButton = CreateWindow("BUTTON",
szText,
WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
rcLeftPanel.left + 8,
rcLeftPanel.bottom - 8 - 13,
rcLeftPanel.right - rcLeftPanel.left - 16,
13,
hWnd,
(HMENU)IDC_CHECKBUTTON,
hInstance,
NULL);
SendMessage(hwndCheckButton, WM_SETFONT, (WPARAM)hfontCheckButton, MAKELPARAM(TRUE,0));
}
else
{
hwndCheckButton = 0;
hfontCheckButton = 0;
}
return 0;
}
static LRESULT
OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
if (LOWORD(wParam) == IDC_CLOSEBUTTON)
{
DestroyWindow(hWnd);
}
else if ((LOWORD(wParam) < 10))
{
if (RunApplication(LOWORD(wParam)) == FALSE)
{
DestroyWindow(hWnd);
}
}
return 0;
}
static VOID
PaintBanner(HDC hdc, LPRECT rcPanel)
{
HBRUSH hOldBrush;
HFONT hOldFont;
RECT rcTitle;
#if 0
/* banner bitmap */
hOldBitmap = SelectObject(hdcMem, hTitleBitmap);
BitBlt(hdc,
rcPanel->left,
rcPanel->top,
rcPanel->right,
rcPanel->bottom - 3,
hdcMem, 0, 0, SRCCOPY);
SelectObject(hdc, hOldBitmap);
#endif
/* white background */
hOldBrush = SelectObject(hdc, hbrRightPanel);
PatBlt(hdc,
rcPanel->left,
rcPanel->top,
rcPanel->right - rcPanel->left,
rcPanel->bottom - 3,
PATCOPY);
hOldFont = SelectObject (hdc, hfontBannerTitle);
SetTextColor(hdc, 0x00000000);
rcTitle.top = 5;
rcTitle.left = 15;
DrawText(hdc, "ReactOS 0.0.20", -1,
&rcTitle, DT_TOP | DT_CALCRECT);
DrawText(hdc, "ReactOS 0.0.20", -1,
&rcTitle, DT_TOP);
SelectObject(hdc, hOldFont);
/* dark blue line */
hOldBrush = SelectObject(hdc, hbrDarkBlue);
PatBlt(hdc,
rcPanel->left,
rcPanel->bottom - 3,
rcPanel->right - rcPanel->left,
3,
PATCOPY);
SelectObject(hdc, hOldBrush);
}
static LRESULT
OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HBITMAP hOldBitmap = 0;
HBRUSH hOldBrush;
HFONT hOldFont;
RECT rcTitle, rcDescription;
TCHAR szTopicTitle[80];
TCHAR szTopicDesc[256];
int nLength;
BITMAP bmpInfo;
hdc = BeginPaint(hWnd, &ps);
/* Banner panel */
PaintBanner(hdc, &rcTitlePanel);
/* Left panel */
hOldBrush = SelectObject (hdc, hbrLightBlue);
PatBlt(hdc,
rcLeftPanel.left,
rcLeftPanel.top,
rcLeftPanel.right - rcLeftPanel.left,
rcLeftPanel.bottom - rcLeftPanel.top,
PATCOPY);
/* Right panel */
SelectObject (hdc, hbrRightPanel);
PatBlt(hdc,
rcRightPanel.left,
rcRightPanel.top,
rcRightPanel.right - rcRightPanel.left,
rcRightPanel.bottom - rcRightPanel.top,
PATCOPY);
/* Draw topic bitmap */
if ((nTopic == -1) && (hDefaultTopicBitmap != 0))
{
GetObject(hDefaultTopicBitmap, sizeof(BITMAP), &bmpInfo);
hOldBitmap = SelectObject (hdcMem, hDefaultTopicBitmap);
BitBlt(hdc,
rcRightPanel.right - bmpInfo.bmWidth,
rcRightPanel.bottom - bmpInfo.bmHeight,
bmpInfo.bmWidth,
bmpInfo.bmHeight,
hdcMem,
0,
0,
SRCCOPY);
}
else if (hTopicBitmap[nTopic] != 0)
{
GetObject(hTopicBitmap[nTopic], sizeof(BITMAP), &bmpInfo);
hOldBitmap = SelectObject (hdcMem, hTopicBitmap[nTopic]);
BitBlt(hdc,
rcRightPanel.right - bmpInfo.bmWidth,
rcRightPanel.bottom - bmpInfo.bmHeight,
bmpInfo.bmWidth,
bmpInfo.bmHeight,
hdcMem,
0,
0,
SRCCOPY);
}
if (nTopic == -1)
{
nLength = LoadString(hInstance, IDS_DEFAULTTOPICTITLE, szTopicTitle, 80);
}
else
{
nLength = LoadString(hInstance, IDS_TOPICTITLE0 + nTopic, szTopicTitle, 80);
if (nLength == 0)
nLength = LoadString(hInstance, IDS_DEFAULTTOPICTITLE, szTopicTitle, 80);
}
if (nTopic == -1)
{
nLength = LoadString(hInstance, IDS_DEFAULTTOPICDESC, szTopicDesc, 256);
}
else
{
nLength = LoadString(hInstance, IDS_TOPICDESC0 + nTopic, szTopicDesc, 256);
if (nLength == 0)
nLength = LoadString(hInstance, IDS_DEFAULTTOPICDESC, szTopicDesc, 256);
}
SetBkMode(hdc, TRANSPARENT);
/* Draw topic title */
rcTitle.left = rcRightPanel.left + 12;
rcTitle.right = rcRightPanel.right - 8;
rcTitle.top = rcRightPanel.top + 8;
rcTitle.bottom = rcTitle.top + 57;
hOldFont = SelectObject(hdc, hfontTopicTitle);
DrawText(hdc, szTopicTitle, -1, &rcTitle, DT_TOP | DT_CALCRECT);
SetTextColor(hdc, DARK_BLUE);
DrawText(hdc, szTopicTitle, -1, &rcTitle, DT_TOP);
/* Draw topic description */
rcDescription.left = rcRightPanel.left + 12;
rcDescription.right = rcRightPanel.right - 8;
rcDescription.top = rcTitle.bottom + 8;
rcDescription.bottom = rcRightPanel.bottom - 20;
SelectObject(hdc, hfontTopicDescription);
SetTextColor(hdc, 0x00000000);
DrawText(hdc, szTopicDesc, -1, &rcDescription, DT_TOP | DT_WORDBREAK);
SetBkMode(hdc, OPAQUE);
SelectObject(hdc, hOldFont);
SelectObject (hdcMem, hOldBrush);
SelectObject (hdcMem, hOldBitmap);
EndPaint(hWnd, &ps);
return 0;
}
static LRESULT
OnDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
LPDRAWITEMSTRUCT lpDis = (LPDRAWITEMSTRUCT)lParam;
HPEN hPen, hOldPen;
HBRUSH hOldBrush;
CHAR szText[80];
int iBkMode;
if (lpDis->hwndItem == hwndCloseButton)
{
DrawFrameControl(lpDis->hDC,
&lpDis->rcItem,
DFC_BUTTON,
DFCS_BUTTONPUSH | DFCS_FLAT);
}
else
{
if (lpDis->CtlID == (ULONG)nTopic)
hOldBrush = SelectObject(lpDis->hDC, hbrRightPanel);
else
hOldBrush = SelectObject(lpDis->hDC, hbrLightBlue);
PatBlt(lpDis->hDC,
lpDis->rcItem.left,
lpDis->rcItem.top,
lpDis->rcItem.right,
lpDis->rcItem.bottom,
PATCOPY);
SelectObject(lpDis->hDC, hOldBrush);
hPen = CreatePen(PS_SOLID, 0, DARK_BLUE);
hOldPen = SelectObject(lpDis->hDC, hPen);
MoveToEx(lpDis->hDC, lpDis->rcItem.left, lpDis->rcItem.bottom-1, NULL);
LineTo(lpDis->hDC, lpDis->rcItem.right, lpDis->rcItem.bottom-1);
SelectObject(lpDis->hDC, hOldPen);
DeleteObject(hPen);
InflateRect(&lpDis->rcItem, -10, -4);
OffsetRect(&lpDis->rcItem, 0, 1);
GetWindowText(lpDis->hwndItem, szText, 80);
SetTextColor(lpDis->hDC, 0x00000000);
iBkMode = SetBkMode(lpDis->hDC, TRANSPARENT);
DrawText(lpDis->hDC, szText, -1, &lpDis->rcItem, DT_TOP | DT_LEFT | DT_WORDBREAK);
SetBkMode(lpDis->hDC, iBkMode);
}
return 0;
}
static LRESULT
OnMouseMove(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
if (nTopic != -1)
{
nTopic = -1;
SetFocus(hWnd);
InvalidateRect(hwndMain, NULL, TRUE);
}
return 0;
}
static LRESULT
OnCtlColorStatic(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
if ((HWND)lParam == hwndCheckButton)
{
SetBkColor((HDC)wParam, LIGHT_BLUE);
return((LRESULT)hbrLightBlue);
}
return 0;
}
static LRESULT
OnActivate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
nTopic = -1;
InvalidateRect(hwndMain, NULL, TRUE);
return(0);
}
static LRESULT
OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
int i;
for (i=0;i<10;i++)
{
if (hwndTopicButton[i] != 0)
DestroyWindow(hwndTopicButton[i]);
}
if (hwndCloseButton != 0)
DestroyWindow(hwndCloseButton);
if (hwndCheckButton != 0)
DestroyWindow(hwndCheckButton);
DeleteDC(hdcMem);
DeleteDC(hdcDisplay);
/* delete bitmaps */
DeleteObject(hDefaultTopicBitmap);
DeleteObject(hTitleBitmap);
for (i=0;i<10;i++)
{
if (hTopicBitmap[i] != 0)
DeleteObject(hTopicBitmap[i]);
}
DeleteObject(hfontTopicTitle);
DeleteObject(hfontTopicDescription);
DeleteObject(hfontTopicButton);
DeleteObject(hfontBannerTitle);
if (hfontCheckButton != 0)
DeleteObject(hfontCheckButton);
DeleteObject(hbrLightBlue);
DeleteObject(hbrDarkBlue);
DeleteObject(hbrRightPanel);
return 0;
}
LRESULT CALLBACK
MainWndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
return(OnCreate(hWnd, wParam, lParam));
case WM_COMMAND:
return(OnCommand(hWnd, wParam, lParam));
case WM_ACTIVATE:
return(OnActivate(hWnd, wParam, lParam));
case WM_PAINT:
return(OnPaint(hWnd, wParam, lParam));
case WM_DRAWITEM:
return(OnDrawItem(hWnd, wParam, lParam));
case WM_CTLCOLORSTATIC:
return(OnCtlColorStatic(hWnd, wParam, lParam));
case WM_MOUSEMOVE:
return(OnMouseMove(hWnd, wParam, lParam));
case WM_DESTROY:
OnDestroy(hWnd, wParam, lParam);
PostQuitMessage(0);
return(0);
}
return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}
/* EOF */

View file

@ -0,0 +1,93 @@
#include "resource.h"
/* Bitmaps */
IDB_TITLEBITMAP BITMAP DISCARDABLE "res/title.bmp"
IDB_DEFAULTTOPICBITMAP BITMAP DISCARDABLE "res/default.bmp"
IDB_TOPICBITMAP0 BITMAP DISCARDABLE "res/topic0.bmp"
IDB_TOPICBITMAP1 BITMAP DISCARDABLE "res/topic1.bmp"
IDB_TOPICBITMAP2 BITMAP DISCARDABLE "res/topic2.bmp"
//IDB_TOPICBITMAP3 BITMAP DISCARDABLE "res/topic3.bmp"
//IDB_TOPICBITMAP4 BITMAP DISCARDABLE "res/topic4.bmp"
//IDB_TOPICBITMAP5 BITMAP DISCARDABLE "res/topic5.bmp"
//IDB_TOPICBITMAP6 BITMAP DISCARDABLE "res/topic6.bmp"
//IDB_TOPICBITMAP7 BITMAP DISCARDABLE "res/topic7.bmp"
//IDB_TOPICBITMAP8 BITMAP DISCARDABLE "res/topic8.bmp"
//IDB_TOPICBITMAP9 BITMAP DISCARDABLE "res/topic9.bmp"
/* String Tables */
/* Default settings */
STRINGTABLE DISCARDABLE
BEGIN
IDS_APPTITLE "ReactOS 0.0.20 - Welcome"
IDS_DEFAULTTOPICTITLE "ReactOS"
IDS_DEFAULTTOPICDESC "The new Operating System for computer users who do not want to obey to the Monopoly.\n\nClick a topic on the left."
IDS_CHECKTEXT "Show this dialog again"
IDS_CLOSETEXT "Exit"
END
/* Topic buttons */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICBUTTON0 "Online Registration"
IDS_TOPICBUTTON1 "Install ReactOS Components"
IDS_TOPICBUTTON2 "Browse this CD"
// IDS_TOPICBUTTON4 "E&xit"
// IDS_TOPICBUTTON5 "Empty Topic 5"
// IDS_TOPICBUTTON6 "Empty Topic 6"
// IDS_TOPICBUTTON7 "Empty Topic 7"
// IDS_TOPICBUTTON8 "Empty Topic 8"
// IDS_TOPICBUTTON9 "Empty Topic 9"
END
/* Topic titles */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICTITLE0 "Online Registration"
IDS_TOPICTITLE1 "Install ReactOS Components"
IDS_TOPICTITLE2 "Browse this CD"
// IDS_TOPICTITLE3 "Exit"
// IDS_TOPICTITLE4 "Empty Topic Title 4"
// IDS_TOPICTITLE5 "Empty Topic Title 5"
// IDS_TOPICTITLE6 "Empty Topic Title 6"
// IDS_TOPICTITLE7 "Empty Topic Title 7"
// IDS_TOPICTITLE8 "Empty Topic Title 8"
// IDS_TOPICTITLE9 "Empty Topic Title 9"
END
/* Topic descriptions */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICDESC0 "Register your ReactOS now!\n\nWith registering your ReactOS you get a lot of additional benefits, like unsolicited product information, incompetent hotline services and huge amounts of third-party junk mail."
IDS_TOPICDESC1 "Customize your ReactOS by installing optional applications and components."
IDS_TOPICDESC2 "Browse the CD to find only a few files, no applications, incomplete documentation and no readme files."
// IDS_TOPICDESC3 "Click to exit this application."
// IDS_TOPICDESC4 "Topic description 4.\n\nDescribe topic 4 here."
// IDS_TOPICDESC5 "Topic description 5.\n\nDescribe topic 5 here."
// IDS_TOPICDESC6 "Topic description 6.\n\nDescribe topic 6 here."
// IDS_TOPICDESC7 "Topic description 7.\n\nDescribe topic 7 here."
// IDS_TOPICDESC8 "Topic description 8.\n\nDescribe topic 8 here."
// IDS_TOPICDESC9 "Topic description 9.\n\nDescribe topic 9 here."
END
/* Topic actions */
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICACTION0 "signup.exe"
IDS_TOPICACTION1 "sysocmgr.exe"
IDS_TOPICACTION2 "explorer.exe"
// IDS_TOPICACTION3 "..."
// IDS_TOPICACTION4 "..."
// IDS_TOPICACTION5 "..."
// IDS_TOPICACTION6 "..."
// IDS_TOPICACTION7 "..."
// IDS_TOPICACTION8 "..."
// IDS_TOPICACTION9 "..."
END
/* EOF */