Added logo in start menu.

svn path=/trunk/; revision=5826
This commit is contained in:
Martin Fuchs 2003-08-24 13:53:40 +00:00
parent eed9914cd8
commit becf23850d
12 changed files with 105 additions and 36 deletions

View file

@ -44,7 +44,7 @@ static BOOL (WINAPI*SetShellWindowEx)(HWND, HWND);
BOOL IsAnyDesktopRunning() BOOL IsAnyDesktopRunning()
{ {
HINSTANCE shell32 = GetModuleHandle(TEXT("user32")); HINSTANCE shell32 = GetModuleHandle(_T("user32"));
SetShellWindow = (BOOL(WINAPI*)(HWND)) GetProcAddress(shell32, "SetShellWindow"); SetShellWindow = (BOOL(WINAPI*)(HWND)) GetProcAddress(shell32, "SetShellWindow");
SetShellWindowEx = (BOOL(WINAPI*)(HWND,HWND)) GetProcAddress(shell32, "SetShellWindowEx"); SetShellWindowEx = (BOOL(WINAPI*)(HWND,HWND)) GetProcAddress(shell32, "SetShellWindowEx");
@ -55,13 +55,6 @@ BOOL IsAnyDesktopRunning()
static void draw_desktop_background(HWND hwnd, HDC hdc) static void draw_desktop_background(HWND hwnd, HDC hdc)
{ {
// We'd want to draw the desktop wallpaper here. Need to
// maintain a copy of the wallpaper in an off-screen DC and then
// bitblt (or stretchblt?) it to the screen appropriately. For
// now, though, we'll just draw some text.
static const TCHAR BkgndText[] = TEXT("ReactOS 0.1.2 Desktop Example\nby Silver Blade, Martin Fuchs");
ClientRect rect(hwnd); ClientRect rect(hwnd);
PaintDesktop(hdc); PaintDesktop(hdc);
@ -70,14 +63,14 @@ static void draw_desktop_background(HWND hwnd, HDC hdc)
FillRect(hdc, &rect, bkgndBrush); FillRect(hdc, &rect, bkgndBrush);
DeleteBrush(bkgndBrush); DeleteBrush(bkgndBrush);
*/ */
// This next part could be improved by working out how much
// space the text actually needs...
rect.left = rect.right - 280; rect.left = rect.right - 280;
rect.top = rect.bottom - 56 - DESKTOPBARBAR_HEIGHT; rect.top = rect.bottom - 56 - DESKTOPBARBAR_HEIGHT;
rect.right = rect.left + 250; rect.right = rect.left + 250;
rect.bottom = rect.top + 40; rect.bottom = rect.top + 40;
static const LPCTSTR BkgndText = _T("ReactOS 0.1.2 Explorer\nby Martin Fuchs");
BkMode bkMode(hdc, TRANSPARENT); BkMode bkMode(hdc, TRANSPARENT);
TextColor textColor(hdc, RGB(128,128,192)); TextColor textColor(hdc, RGB(128,128,192));
@ -94,7 +87,7 @@ LRESULT BackgroundWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{ {
switch(nmsg) { switch(nmsg) {
case WM_ERASEBKGND: case WM_ERASEBKGND:
draw_desktop_background(_hwnd, (HDC)wparam); PaintDesktop((HDC)wparam);
return TRUE; return TRUE;
case WM_MBUTTONDBLCLK: case WM_MBUTTONDBLCLK:
@ -218,10 +211,9 @@ LRESULT DesktopWindow::Init(LPCREATESTRUCT pcs)
LRESULT DesktopWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) LRESULT DesktopWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{ {
switch(nmsg) { switch(nmsg) {
case WM_PAINT: { case WM_PAINT:
PaintCanvas canvas(_hwnd); draw_desktop_background(_hwnd, PaintCanvas(_hwnd));
draw_desktop_background(_hwnd, canvas); break;
break;}
case WM_LBUTTONDBLCLK: case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK: case WM_RBUTTONDBLCLK:

View file

@ -74,6 +74,12 @@ SmallIcon::SmallIcon(UINT nid)
} }
ResBitmap::ResBitmap(UINT nid)
{
_hBmp = LoadBitmap(g_Globals._hInstance, MAKEINTRESOURCE(nid));
}
void explorer_show_frame(HWND hwndDesktop, int cmdshow) void explorer_show_frame(HWND hwndDesktop, int cmdshow)
{ {
if (g_Globals._hMainWnd) if (g_Globals._hMainWnd)

View file

@ -346,6 +346,10 @@ SOURCE=.\res\logoff.ico
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\res\logov.bmp
# End Source File
# Begin Source File
SOURCE=.\res\reactos.ico SOURCE=.\res\reactos.ico
# End Source File # End Source File
# Begin Source File # Begin Source File

View file

@ -19,7 +19,7 @@
#define IDS_ADMIN 15 #define IDS_ADMIN 15
#define IDS_NETWORK 16 #define IDS_NETWORK 16
#define IDS_CONNECTIONS 17 #define IDS_CONNECTIONS 17
#define IDS_DRIVES 18 #define IDS_DRIVES 18
#define IDI_REACTOS 100 #define IDI_REACTOS 100
#define IDI_EXPLORER 101 #define IDI_EXPLORER 101
#define IDI_STARTMENU 102 #define IDI_STARTMENU 102
@ -37,6 +37,7 @@
#define IDI_FOLDERARROW 125 #define IDI_FOLDERARROW 125
#define IDI_ARROW 125 #define IDI_ARROW 125
#define IDI_ARROW_SELECTED 126 #define IDI_ARROW_SELECTED 126
#define IDB_LOGOV 129
#define ID_VIEW_NAME 401 #define ID_VIEW_NAME 401
#define ID_VIEW_ALL_ATTRIBUTES 402 #define ID_VIEW_ALL_ATTRIBUTES 402
#define ID_VIEW_SELECTED_ATTRIBUTES 403 #define ID_VIEW_SELECTED_ATTRIBUTES 403
@ -68,7 +69,7 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129 #define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101

View file

@ -30,6 +30,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDB_IMAGES BITMAP DISCARDABLE "res/images.bmp" IDB_IMAGES BITMAP DISCARDABLE "res/images.bmp"
IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp" IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp"
IDB_DRIVEBAR BITMAP DISCARDABLE "res/drivebar.bmp" IDB_DRIVEBAR BITMAP DISCARDABLE "res/drivebar.bmp"
IDB_LOGOV BITMAP DISCARDABLE "res/logov.bmp"
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //

View file

@ -63,3 +63,14 @@ struct SmallIcon
protected: protected:
HICON _hIcon; HICON _hIcon;
}; };
struct ResBitmap
{
ResBitmap(UINT nid);
~ResBitmap() {DeleteObject(_hBmp);}
operator HBITMAP() const {return _hBmp;}
protected:
HBITMAP _hBmp;
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -324,7 +324,6 @@ void Pane::draw_item(LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
int visible_cols = _visible_cols; int visible_cols = _visible_cols;
COLORREF bkcolor, textcolor; COLORREF bkcolor, textcolor;
RECT focusRect = dis->rcItem; RECT focusRect = dis->rcItem;
HBRUSH hbrush;
enum IMAGE img; enum IMAGE img;
int img_pos, cx; int img_pos, cx;
int col = 0; int col = 0;
@ -459,7 +458,7 @@ void Pane::draw_item(LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
bkcolor = RGB(255,255,255); bkcolor = RGB(255,255,255);
} }
hbrush = CreateSolidBrush(bkcolor); HBRUSH hbrush = CreateSolidBrush(bkcolor);
FillRect(dis->hDC, &focusRect, hbrush); FillRect(dis->hDC, &focusRect, hbrush);
DeleteObject(hbrush); DeleteObject(hbrush);

View file

@ -46,6 +46,7 @@ StartMenu::StartMenu(HWND hwnd)
{ {
_next_id = IDC_FIRST_MENU; _next_id = IDC_FIRST_MENU;
_submenu_id = 0; _submenu_id = 0;
_border_left = 0;
} }
StartMenu::StartMenu(HWND hwnd, const StartMenuFolders& info) StartMenu::StartMenu(HWND hwnd, const StartMenuFolders& info)
@ -57,6 +58,7 @@ StartMenu::StartMenu(HWND hwnd, const StartMenuFolders& info)
_next_id = IDC_FIRST_MENU; _next_id = IDC_FIRST_MENU;
_submenu_id = 0; _submenu_id = 0;
_border_left = 0;
} }
StartMenu::~StartMenu() StartMenu::~StartMenu()
@ -153,7 +155,7 @@ LRESULT StartMenu::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{ {
switch(nmsg) { switch(nmsg) {
case WM_SIZE: case WM_SIZE:
ResizeButtons(LOWORD(lparam)); ResizeButtons(LOWORD(lparam)-_border_left);
break; break;
case WM_NCHITTEST: { case WM_NCHITTEST: {
@ -306,15 +308,17 @@ void StartMenu::AddButton(LPCTSTR title, HICON hIcon, bool hasSubmenu, UINT id,
} }
// widen window, if it is too small // widen window, if it is too small
int width = StartMenuButton::GetTextWidth(title,_hwnd) + 16/*icon*/ + 10/*placeholder*/ + 16/*arrow*/; int text_width = StartMenuButton::GetTextWidth(title,_hwnd) + 16/*icon*/ + 10/*placeholder*/ + 16/*arrow*/;
ClientRect clnt(_hwnd); ClientRect clnt(_hwnd);
if (width > clnt.right) int cx = clnt.right - _border_left;
rect.right += width-clnt.right; if (text_width > cx)
rect.right += text_width-cx;
MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE);
StartMenuCtrl(_hwnd, rect.bottom-rect.top-STARTMENU_LINE_HEIGHT-6, title, id, hIcon, hasSubmenu, style); StartMenuCtrl(_hwnd, _border_left, rect.bottom-rect.top-STARTMENU_LINE_HEIGHT-6, rect.right-rect.left-_border_left,
title, id, hIcon, hasSubmenu, style);
} }
void StartMenu::AddSeparator() void StartMenu::AddSeparator()
@ -330,7 +334,7 @@ void StartMenu::AddSeparator()
MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE);
StartMenuSeparator(_hwnd, rect.bottom-rect.top-STARTMENU_SEP_HEIGHT-6); StartMenuSeparator(_hwnd, _border_left, rect.bottom-rect.top-STARTMENU_SEP_HEIGHT-6, rect.right-rect.left-_border_left);
} }
@ -538,6 +542,14 @@ StartMenuRoot::StartMenuRoot(HWND hwnd)
// insert directory "<user name>\Start Menu" // insert directory "<user name>\Start Menu"
ShellDirectory usr_startmenu(Desktop(), SpecialFolderPath(CSIDL_STARTMENU, _hwnd), _hwnd); ShellDirectory usr_startmenu(Desktop(), SpecialFolderPath(CSIDL_STARTMENU, _hwnd), _hwnd);
_dirs.push_back(StartMenuDirectory(usr_startmenu, false)); // don't add subfolders _dirs.push_back(StartMenuDirectory(usr_startmenu, false)); // don't add subfolders
// read size of logo bitmap
BITMAP bmp_hdr;
GetObject(ResBitmap(IDB_LOGOV), sizeof(BITMAP), &bmp_hdr);
_logo_size.cx = bmp_hdr.bmWidth;
_logo_size.cy = bmp_hdr.bmHeight;
_border_left = _logo_size.cx;
} }
@ -583,6 +595,35 @@ LRESULT StartMenuRoot::Init(LPCREATESTRUCT pcs)
} }
LRESULT StartMenuRoot::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{
switch(nmsg) {
case WM_PAINT: {
PaintCanvas canvas(_hwnd);
MemCanvas mem_dc;
ResBitmap bmp(IDB_LOGOV);
BitmapSelection sel(mem_dc, bmp);
ClientRect clnt(_hwnd);
int h = min(_logo_size.cy, clnt.bottom);
RECT rect = {0, 0, _logo_size.cx-1, clnt.bottom-h};
HBRUSH hbr = CreateSolidBrush(RGB(166,202,240)); // same color as the background color in the logo bitmap
FillRect(canvas, &rect, hbr);
PatBlt(canvas, _logo_size.cx-1, 0, 1, clnt.bottom-h, WHITENESS);
DeleteObject(hbr);
BitBlt(canvas, 0, clnt.bottom-h, _logo_size.cx, h, mem_dc, 0, 0, SRCCOPY);
break;}
default:
return super::WndProc(nmsg, wparam, lparam);
}
return 0;
}
int StartMenuRoot::Command(int id, int code) int StartMenuRoot::Command(int id, int code)
{ {
switch(id) { switch(id) {

View file

@ -95,9 +95,9 @@ protected:
*/ */
struct StartMenuCtrl : public Button struct StartMenuCtrl : public Button
{ {
StartMenuCtrl(HWND parent, int y, LPCTSTR title, StartMenuCtrl(HWND parent, int x, int y, int w, LPCTSTR title,
UINT id, HICON hIcon=0, bool hasSubmenu=false, DWORD style=WS_VISIBLE|WS_CHILD|BS_OWNERDRAW, DWORD exStyle=0) UINT id, HICON hIcon=0, bool hasSubmenu=false, DWORD style=WS_VISIBLE|WS_CHILD|BS_OWNERDRAW, DWORD exStyle=0)
: Button(parent, title, 0, y, ClientRect(parent).right, STARTMENU_LINE_HEIGHT, id, style, exStyle) : Button(parent, title, x, y, w, STARTMENU_LINE_HEIGHT, id, style, exStyle)
{ {
*new StartMenuButton(_hwnd, hIcon, hasSubmenu); *new StartMenuButton(_hwnd, hIcon, hasSubmenu);
@ -108,8 +108,8 @@ struct StartMenuCtrl : public Button
struct StartMenuSeparator : public Static struct StartMenuSeparator : public Static
{ {
StartMenuSeparator(HWND parent, int y, DWORD style=WS_VISIBLE|WS_CHILD|WS_DISABLED|SS_ETCHEDHORZ, DWORD exStyle=0) StartMenuSeparator(HWND parent, int x, int y, int w, DWORD style=WS_VISIBLE|WS_CHILD|WS_DISABLED|SS_ETCHEDHORZ, DWORD exStyle=0)
: Static(parent, NULL, 0, y+STARTMENU_SEP_HEIGHT/2-1, ClientRect(parent).right, 2, -1, style, exStyle) : Static(parent, NULL, x, y+STARTMENU_SEP_HEIGHT/2-1, w, 2, -1, style, exStyle)
{ {
} }
}; };
@ -153,6 +153,8 @@ protected:
UINT _submenu_id; UINT _submenu_id;
WindowHandle _submenu; WindowHandle _submenu;
int _border_left; // left border in pixels
// member functions // member functions
void ResizeButtons(int cx); void ResizeButtons(int cx);
@ -200,9 +202,12 @@ struct StartMenuRoot : public StartMenu
protected: protected:
LRESULT Init(LPCREATESTRUCT pcs); LRESULT Init(LPCREATESTRUCT pcs);
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
int Command(int id, int code); int Command(int id, int code);
void ShowLaunchDialog(HWND hwndDesktopBar); void ShowLaunchDialog(HWND hwndDesktopBar);
SIZE _logo_size;
}; };

View file

@ -246,16 +246,13 @@ HBITMAP create_bitmap_from_icon(HICON hIcon, HBRUSH hbrush_bkgnd, HDC hdc_wnd)
{ {
HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, 16, 16); HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, 16, 16);
HDC hdc = CreateCompatibleDC(0); MemCanvas canvas;
HBITMAP hbmp_org = SelectBitmap(hdc, hbmp); BitmapSelection sel(canvas, hbmp);
RECT rect = {0, 0, 16, 16}; RECT rect = {0, 0, 16, 16};
FillRect(hdc, &rect, hbrush_bkgnd); FillRect(canvas, &rect, hbrush_bkgnd);
DrawIconEx(hdc, 0, 0, hIcon, 16, 16, 0, hbrush_bkgnd, DI_NORMAL); DrawIconEx(canvas, 0, 0, hIcon, 16, 16, 0, hbrush_bkgnd, DI_NORMAL);
SelectBitmap(hdc, hbmp_org);
DeleteDC(hdc);
return hbmp; return hbmp;
} }

View file

@ -322,6 +322,18 @@ protected:
HFONT _old_hFont; HFONT _old_hFont;
}; };
struct BitmapSelection
{
BitmapSelection(HDC hdc, HBITMAP hBmp)
: _hdc(hdc), _old_hBmp(SelectBitmap(hdc, hBmp)) {}
~BitmapSelection() {SelectBitmap(_hdc, _old_hBmp);}
protected:
HDC _hdc;
HBITMAP _old_hBmp;
};
struct String struct String
#ifdef UNICODE #ifdef UNICODE