draw startmenu subfolder arrows

svn path=/trunk/; revision=5696
This commit is contained in:
Martin Fuchs 2003-08-20 09:08:00 +00:00
parent 9a3c91b31d
commit 10f0f6628e
16 changed files with 107 additions and 86 deletions

View file

@ -63,12 +63,12 @@ ResString::ResString(UINT nid)
ResIcon::ResIcon(UINT nid) ResIcon::ResIcon(UINT nid)
{ {
_hicon = LoadIcon(g_Globals._hInstance, MAKEINTRESOURCE(nid)); _hIcon = LoadIcon(g_Globals._hInstance, MAKEINTRESOURCE(nid));
} }
SmallIcon::SmallIcon(UINT nid) SmallIcon::SmallIcon(UINT nid)
{ {
_hicon = (HICON)LoadImage(g_Globals._hInstance, MAKEINTRESOURCE(nid), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); _hIcon = (HICON)LoadImage(g_Globals._hInstance, MAKEINTRESOURCE(nid), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
} }

View file

@ -509,6 +509,10 @@ SOURCE=.\shell\winfs.h
# End Group # End Group
# Begin Source File # Begin Source File
SOURCE=.\res\arrow.ico
# End Source File
# Begin Source File
SOURCE=.\explorer.cpp SOURCE=.\explorer.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File

View file

@ -31,6 +31,7 @@
#define ID_EXECUTE 111 #define ID_EXECUTE 111
#define IDM_WINEFILE 112 #define IDM_WINEFILE 112
#define IDI_LOGOFF 124 #define IDI_LOGOFF 124
#define IDI_FOLDERARROW 125
#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
@ -62,7 +63,7 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 126 #define _APS_NEXT_RESOURCE_VALUE 127
#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

@ -94,6 +94,7 @@ IDI_REACTOS ICON DISCARDABLE "res/reactos.ico"
IDI_EXPLORER ICON DISCARDABLE "res/explorer.ico" IDI_EXPLORER ICON DISCARDABLE "res/explorer.ico"
IDI_STARTMENU ICON DISCARDABLE "res/startmenu.ico" IDI_STARTMENU ICON DISCARDABLE "res/startmenu.ico"
IDI_LOGOFF ICON DISCARDABLE "res/logoff.ico" IDI_LOGOFF ICON DISCARDABLE "res/logoff.ico"
IDI_FOLDERARROW ICON DISCARDABLE "res/arrow.ico"
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //

View file

@ -48,18 +48,18 @@ struct ResIcon
{ {
ResIcon(UINT nid); ResIcon(UINT nid);
operator HICON() const {return _hicon;} operator HICON() const {return _hIcon;}
protected: protected:
HICON _hicon; HICON _hIcon;
}; };
struct SmallIcon struct SmallIcon
{ {
SmallIcon(UINT nid); SmallIcon(UINT nid);
operator HICON() const {return _hicon;} operator HICON() const {return _hIcon;}
protected: protected:
HICON _hicon; HICON _hIcon;
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

View file

@ -44,7 +44,7 @@ Entry::Entry(ENTRY_TYPE etype)
_scanned = false; _scanned = false;
_bhfi_valid = false; _bhfi_valid = false;
_level = 0; _level = 0;
_hicon = 0; _hIcon = 0;
} }
Entry::Entry(Entry* parent) Entry::Entry(Entry* parent)
@ -57,14 +57,14 @@ Entry::Entry(Entry* parent)
_scanned = false; _scanned = false;
_bhfi_valid = false; _bhfi_valid = false;
_level = 0; _level = 0;
_hicon = 0; _hIcon = 0;
} }
// free a directory entry // free a directory entry
Entry::~Entry() Entry::~Entry()
{ {
if (_hicon && _hicon!=(HICON)-1) if (_hIcon && _hIcon!=(HICON)-1)
DestroyIcon(_hicon); DestroyIcon(_hIcon);
} }

View file

@ -63,7 +63,7 @@ public:
SFGAOF _shell_attribs; SFGAOF _shell_attribs;
ENTRY_TYPE _etype; ENTRY_TYPE _etype;
HICON _hicon; HICON _hIcon;
BY_HANDLE_FILE_INFORMATION _bhfi; BY_HANDLE_FILE_INFORMATION _bhfi;
bool _bhfi_valid; bool _bhfi_valid;

View file

@ -472,8 +472,8 @@ void Pane::draw_item(LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
if (cx > IMAGE_WIDTH) if (cx > IMAGE_WIDTH)
cx = IMAGE_WIDTH; cx = IMAGE_WIDTH;
if (entry->_hicon && entry->_hicon!=(HICON)-1) if (entry->_hIcon && entry->_hIcon!=(HICON)-1)
DrawIconEx(dis->hDC, img_pos, dis->rcItem.top, entry->_hicon, cx, GetSystemMetrics(SM_CYSMICON), 0, 0, DI_NORMAL); DrawIconEx(dis->hDC, img_pos, dis->rcItem.top, entry->_hIcon, cx, GetSystemMetrics(SM_CYSMICON), 0, 0, DI_NORMAL);
else else
ImageList_DrawEx(_himl, img, dis->hDC, ImageList_DrawEx(_himl, img, dis->hDC,
img_pos, dis->rcItem.top, cx, img_pos, dis->rcItem.top, cx,

View file

@ -175,7 +175,7 @@ static HICON extract_icon(IShellFolder* folder, LPCITEMIDLIST pidl)
if (SUCCEEDED(folder->GetUIObjectOf(0, 1, (LPCITEMIDLIST*)&pidl, IID_IExtractIcon, 0, (LPVOID*)&pExtract))) { if (SUCCEEDED(folder->GetUIObjectOf(0, 1, (LPCITEMIDLIST*)&pidl, IID_IExtractIcon, 0, (LPVOID*)&pExtract))) {
TCHAR path[_MAX_PATH]; TCHAR path[_MAX_PATH];
unsigned flags; unsigned flags;
HICON hicon; HICON hIcon;
int idx; int idx;
if (SUCCEEDED(pExtract->GetIconLocation(GIL_FORSHELL, path, _MAX_PATH, &idx, &flags))) { if (SUCCEEDED(pExtract->GetIconLocation(GIL_FORSHELL, path, _MAX_PATH, &idx, &flags))) {
@ -183,18 +183,18 @@ static HICON extract_icon(IShellFolder* folder, LPCITEMIDLIST pidl)
if (idx == -1) if (idx == -1)
idx = 0; // special case for some control panel applications idx = 0; // special case for some control panel applications
if ((int)ExtractIconEx(path, idx, 0, &hicon, 1) > 0) if ((int)ExtractIconEx(path, idx, 0, &hIcon, 1) > 0)
flags &= ~GIL_DONTCACHE; flags &= ~GIL_DONTCACHE;
} else { } else {
HICON hIconLarge = 0; HICON hIconLarge = 0;
HRESULT hr = pExtract->Extract(path, idx, &hIconLarge, &hicon, MAKELONG(0/*GetSystemMetrics(SM_CXICON)*/,GetSystemMetrics(SM_CXSMICON))); HRESULT hr = pExtract->Extract(path, idx, &hIconLarge, &hIcon, MAKELONG(0/*GetSystemMetrics(SM_CXICON)*/,GetSystemMetrics(SM_CXSMICON)));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
DestroyIcon(hIconLarge); DestroyIcon(hIconLarge);
} }
return hicon; return hIcon;
} }
} }
@ -275,10 +275,10 @@ void ShellDirectory::read_directory()
// get display icons for files and virtual objects // get display icons for files and virtual objects
if (!(entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || if (!(entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
!(attribs & SFGAO_FILESYSTEM)) { !(attribs & SFGAO_FILESYSTEM)) {
entry->_hicon = extract_icon(_folder, pidls[n]); entry->_hIcon = extract_icon(_folder, pidls[n]);
if (!entry->_hicon) if (!entry->_hIcon)
entry->_hicon = (HICON)-1; // don't try again later entry->_hIcon = (HICON)-1; // don't try again later
} }
entry->_down = NULL; entry->_down = NULL;

View file

@ -84,10 +84,19 @@ LRESULT StartMenu::Init(LPCREATESTRUCT pcs)
if (super::Init(pcs)) if (super::Init(pcs))
return 1; return 1;
for(ShellEntryMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) { // create buttons for registered entries in _entries
const StartMenuEntry& sme = it->second; if (_entries.empty()) {
AddButton(ResString(IDS_EMPTY), 0, false, (UINT)-1, WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_OWNERDRAW|WS_DISABLED);
} else {
for(ShellEntryMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) {
const StartMenuEntry& sme = it->second;
bool showArrow = false;
AddButton(sme._title, sme._hIcon, it->first); if (sme._entry && (sme._entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
showArrow = true;
AddButton(sme._title, sme._hIcon, showArrow, it->first);
}
} }
return 0; return 0;
@ -194,7 +203,7 @@ StartMenuEntry& StartMenu::AddEntry(LPCTSTR title, HICON hIcon, UINT id)
StartMenuEntry& StartMenu::AddEntry(const ShellFolder folder, const ShellEntry* entry) StartMenuEntry& StartMenu::AddEntry(const ShellFolder folder, const ShellEntry* entry)
{ {
HICON hIcon = entry->_hicon; HICON hIcon = entry->_hIcon;
if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
hIcon = SmallIcon(IDI_EXPLORER); hIcon = SmallIcon(IDI_EXPLORER);
@ -209,7 +218,7 @@ StartMenuEntry& StartMenu::AddEntry(const ShellFolder folder, const ShellEntry*
} }
void StartMenu::AddButton(LPCTSTR title, HICON hIcon, UINT id) void StartMenu::AddButton(LPCTSTR title, HICON hIcon, bool showArrow, UINT id, DWORD style)
{ {
WindowRect rect(_hwnd); WindowRect rect(_hwnd);
@ -222,7 +231,7 @@ void StartMenu::AddButton(LPCTSTR title, HICON hIcon, UINT id)
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);
StartMenuButton(_hwnd, rect.bottom-rect.top-STARTMENU_LINE_HEIGHT-4, title, id, hIcon); StartMenuButton(_hwnd, rect.bottom-rect.top-STARTMENU_LINE_HEIGHT-4, title, id, hIcon, showArrow, style);
} }
void StartMenu::AddSeparator() void StartMenu::AddSeparator()
@ -250,13 +259,13 @@ void StartMenu::CreateSubmenu(int id, const StartMenuFolders& new_folders, CREAT
if (btn) { if (btn) {
WindowRect pos(btn); WindowRect pos(btn);
x = pos.right; x = pos.right-8; // Submenus should overlap their parent a bit.
y = pos.top+STARTMENU_HEIGHT-4; y = pos.top;
} else { } else {
WindowRect pos(_hwnd); WindowRect pos(_hwnd);
x = pos.right; x = pos.right-8;
y = pos.top+STARTMENU_HEIGHT-4; y = pos.top;
} }
StartMenu::Create(x, y, new_folders, _hwnd, creator); StartMenu::Create(x, y, new_folders, _hwnd, creator);
@ -283,12 +292,10 @@ void StartMenu::CreateSubmenu(int id, int folder_id1, int folder_id2, CREATORFUN
if (folder1) if (folder1)
new_folders.push_back(folder1); new_folders.push_back(folder1);
if (folder_id2 != -1) { SpecialFolder folder2(folder_id2, _hwnd);
SpecialFolder folder2(folder_id2, _hwnd);
if (folder2) if (folder2)
new_folders.push_back(folder2); new_folders.push_back(folder2);
}
CreateSubmenu(id, new_folders, creator); CreateSubmenu(id, new_folders, creator);
} }
@ -335,21 +342,21 @@ LRESULT StartMenuRoot::Init(LPCREATESTRUCT pcs)
AddSeparator(); AddSeparator();
// insert hard coded start entries // insert hard coded start entries
AddButton(ResString(IDS_PROGRAMS), 0, IDC_PROGRAMS); AddButton(ResString(IDS_PROGRAMS), 0, true, IDC_PROGRAMS);
AddButton(ResString(IDS_EXPLORE), SmallIcon(IDI_EXPLORER), IDC_EXPLORE); AddButton(ResString(IDS_EXPLORE), SmallIcon(IDI_EXPLORER), false, IDC_EXPLORE);
AddButton(ResString(IDS_FAVORITES), 0, IDC_FAVORITES); AddButton(ResString(IDS_FAVORITES), 0, true, IDC_FAVORITES);
AddButton(ResString(IDS_DOCUMENTS), 0, IDC_DOCUMENTS); AddButton(ResString(IDS_DOCUMENTS), 0, true, IDC_DOCUMENTS);
AddButton(ResString(IDS_RECENT), 0, IDC_RECENT); AddButton(ResString(IDS_RECENT), 0, true, IDC_RECENT);
AddButton(ResString(IDS_SETTINGS), 0, IDC_SETTINGS); AddButton(ResString(IDS_SETTINGS), 0, true, IDC_SETTINGS);
AddButton(ResString(IDS_ADMIN), 0, IDC_ADMIN); AddButton(ResString(IDS_ADMIN), 0, true, IDC_ADMIN);
AddButton(ResString(IDS_SEARCH), 0, IDC_SEARCH); AddButton(ResString(IDS_SEARCH), 0, false, IDC_SEARCH);
AddButton(ResString(IDS_START_HELP),0, IDC_START_HELP); AddButton(ResString(IDS_START_HELP),0, false, IDC_START_HELP);
AddButton(ResString(IDS_LAUNCH), 0, IDC_LAUNCH); AddButton(ResString(IDS_LAUNCH), 0, false, IDC_LAUNCH);
AddSeparator(); AddSeparator();
AddButton(ResString(IDS_SHUTDOWN), SmallIcon(IDI_LOGOFF), IDC_SHUTDOWN); AddButton(ResString(IDS_SHUTDOWN), SmallIcon(IDI_LOGOFF), false, IDC_SHUTDOWN);
AddButton(ResString(IDS_LOGOFF), SmallIcon(IDI_LOGOFF), IDC_LOGOFF); AddButton(ResString(IDS_LOGOFF), SmallIcon(IDI_LOGOFF), false, IDC_LOGOFF);
return 0; return 0;
} }

View file

@ -33,14 +33,19 @@
#define TITLE_STARTMENU _T("Start Menu") #define TITLE_STARTMENU _T("Start Menu")
#define STARTMENU_WIDTH 150
#define STARTMENU_LINE_HEIGHT 22
#define STARTMENU_SEP_HEIGHT (STARTMENU_LINE_HEIGHT/2)
// Startmenu button // Startmenu button
struct StartMenuButton : public Button struct StartMenuButton : public Button
{ {
StartMenuButton(HWND parent, int y, LPCTSTR title, StartMenuButton(HWND parent, int y, LPCTSTR title,
UINT id, HICON hIcon=0, DWORD style=WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_OWNERDRAW, DWORD exStyle=0) UINT id, HICON hIcon=0, bool showArrow=false, DWORD style=WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_OWNERDRAW, DWORD exStyle=0)
: Button(parent, title, 2, y, STARTMENU_WIDTH-4, STARTMENU_LINE_HEIGHT, id, style, exStyle) : Button(parent, title, 0, y, ClientRect(parent).right, STARTMENU_LINE_HEIGHT, id, style, exStyle)
{ {
*new StartmenuEntry(_hwnd, hIcon); *new StartmenuEntry(_hwnd, hIcon, showArrow);
SetWindowFont(_hwnd, GetStockFont(DEFAULT_GUI_FONT), FALSE); SetWindowFont(_hwnd, GetStockFont(DEFAULT_GUI_FONT), FALSE);
} }
@ -50,7 +55,7 @@ struct StartMenuButton : public Button
struct StartMenuSeparator : public Static struct StartMenuSeparator : public Static
{ {
StartMenuSeparator(HWND parent, int y, DWORD style=WS_VISIBLE|WS_CHILD|SS_ETCHEDHORZ, DWORD exStyle=0) StartMenuSeparator(HWND parent, int y, DWORD style=WS_VISIBLE|WS_CHILD|SS_ETCHEDHORZ, DWORD exStyle=0)
: Static(parent, NULL, 2, y+STARTMENU_SEP_HEIGHT/2-1, STARTMENU_WIDTH-4, 2, -1, style, exStyle) : Static(parent, NULL, 0, y+STARTMENU_SEP_HEIGHT/2-1, ClientRect(parent).right, 2, -1, style, exStyle)
{ {
} }
}; };
@ -114,7 +119,7 @@ protected:
void AddShellEntries(const ShellDirectory& dir, int max=-1, bool subfolders=true); void AddShellEntries(const ShellDirectory& dir, int max=-1, bool subfolders=true);
void AddButton(LPCTSTR title, HICON hIcon=0, UINT id=(UINT)-1); void AddButton(LPCTSTR title, HICON hIcon=0, bool showArrow=false, UINT id=(UINT)-1, DWORD style=WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_OWNERDRAW);
void AddSeparator(); void AddSeparator();
void CreateSubmenu(int id, const StartMenuFolders& new_folders, CREATORFUNC creator=s_def_creator); void CreateSubmenu(int id, const StartMenuFolders& new_folders, CREATORFUNC creator=s_def_creator);

View file

@ -164,32 +164,32 @@ int DesktopBar::Command(int id, int code)
static HICON get_window_icon(HWND hwnd) static HICON get_window_icon(HWND hwnd)
{ {
HICON hicon = 0; HICON hIcon = 0;
SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hicon); SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon);
if (!hicon) if (!hIcon)
SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hicon); SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon);
if (!hicon) if (!hIcon)
SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hicon); SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon);
if (!hicon) if (!hIcon)
hicon = (HICON)GetClassLong(hwnd, GCL_HICONSM); hIcon = (HICON)GetClassLong(hwnd, GCL_HICONSM);
if (!hicon) if (!hIcon)
hicon = (HICON)GetClassLong(hwnd, GCL_HICON); hIcon = (HICON)GetClassLong(hwnd, GCL_HICON);
if (!hicon) if (!hIcon)
SendMessageTimeout(hwnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (LPDWORD)&hicon); SendMessageTimeout(hwnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (LPDWORD)&hIcon);
if (!hicon) if (!hIcon)
hicon = LoadIcon(0, IDI_APPLICATION); hIcon = LoadIcon(0, IDI_APPLICATION);
return hicon; return hIcon;
} }
static HBITMAP create_bitmap_from_icon(HICON hicon, HWND hwnd, HBRUSH hbrush_bkgnd) static HBITMAP create_bitmap_from_icon(HICON hIcon, HWND hwnd, HBRUSH hbrush_bkgnd)
{ {
HDC hdc_wnd = GetDC(hwnd); HDC hdc_wnd = GetDC(hwnd);
HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, 16, 16); HBITMAP hbmp = CreateCompatibleBitmap(hdc_wnd, 16, 16);
@ -197,7 +197,7 @@ static HBITMAP create_bitmap_from_icon(HICON hicon, HWND hwnd, HBRUSH hbrush_bkg
HDC hdc = CreateCompatibleDC(0); HDC hdc = CreateCompatibleDC(0);
HBITMAP hbmp_org = SelectBitmap(hdc, hbmp); HBITMAP hbmp_org = SelectBitmap(hdc, hbmp);
DrawIconEx(hdc, 0, 0, hicon, 16, 16, 0, hbrush_bkgnd, DI_IMAGE); DrawIconEx(hdc, 0, 0, hIcon, 16, 16, 0, hbrush_bkgnd, DI_IMAGE);
SelectBitmap(hdc, hbmp_org); SelectBitmap(hdc, hbmp_org);
DeleteDC(hdc); DeleteDC(hdc);
@ -352,8 +352,8 @@ BOOL CALLBACK TaskBar::EnumWndProc(HWND hwnd, LPARAM lparam)
if (!last_id) if (!last_id)
found->second._id = pThis->_next_id++; found->second._id = pThis->_next_id++;
} else { } else {
HICON hicon = get_window_icon(hwnd); HICON hIcon = get_window_icon(hwnd);
HBITMAP hbmp = create_bitmap_from_icon(hicon, pThis->_htoolbar, GetSysColorBrush(COLOR_BTNFACE)); HBITMAP hbmp = create_bitmap_from_icon(hIcon, pThis->_htoolbar, GetSysColorBrush(COLOR_BTNFACE));
TBADDBITMAP ab = {0, (UINT_PTR)hbmp}; TBADDBITMAP ab = {0, (UINT_PTR)hbmp};
int bmp_idx = SendMessage(pThis->_htoolbar, TB_ADDBITMAP, 1, (LPARAM)&ab); int bmp_idx = SendMessage(pThis->_htoolbar, TB_ADDBITMAP, 1, (LPARAM)&ab);

View file

@ -34,11 +34,6 @@
#define TASKBAR_LEFT 70 #define TASKBAR_LEFT 70
//#define TASKBAR_AT_TOP //#define TASKBAR_AT_TOP
#define STARTMENU_WIDTH 150
#define STARTMENU_HEIGHT 4
#define STARTMENU_LINE_HEIGHT 22
#define STARTMENU_SEP_HEIGHT (STARTMENU_LINE_HEIGHT/2)
#define WM_SHELLHOOK_NOTIFY (WM_APP+0x10) #define WM_SHELLHOOK_NOTIFY (WM_APP+0x10)

View file

@ -31,6 +31,7 @@
#include "window.h" #include "window.h"
#include "../globals.h" #include "../globals.h"
#include "../explorer_intres.h"
WindowClass::WindowClass(LPCTSTR classname, UINT style_, WNDPROC wndproc) WindowClass::WindowClass(LPCTSTR classname, UINT style_, WNDPROC wndproc)
@ -593,7 +594,7 @@ void PictureButton::DrawItem(LPDRAWITEMSTRUCT dis)
} else } else
DrawFrameControl(dis->hDC, &dis->rcItem, DFC_BUTTON, style); DrawFrameControl(dis->hDC, &dis->rcItem, DFC_BUTTON, style);
DrawIconEx(dis->hDC, iconPos.x, iconPos.y, _hicon, 16, 16, 0, GetSysColorBrush(COLOR_BTNFACE), DI_NORMAL); DrawIconEx(dis->hDC, iconPos.x, iconPos.y, _hIcon, 16, 16, 0, GetSysColorBrush(COLOR_BTNFACE), DI_NORMAL);
TCHAR text[BUFFER_LEN]; TCHAR text[BUFFER_LEN];
GetWindowText(_hwnd, text, BUFFER_LEN); GetWindowText(_hwnd, text, BUFFER_LEN);
@ -648,13 +649,19 @@ void StartmenuEntry::DrawItem(LPDRAWITEMSTRUCT dis)
HBRUSH bk_brush = GetSysColorBrush(bk_color); HBRUSH bk_brush = GetSysColorBrush(bk_color);
FillRect(dis->hDC, &dis->rcItem, bk_brush); FillRect(dis->hDC, &dis->rcItem, bk_brush);
DrawIconEx(dis->hDC, iconPos.x, iconPos.y, _hicon, 16, 16, 0, bk_brush, DI_NORMAL); DrawIconEx(dis->hDC, iconPos.x, iconPos.y, _hIcon, 16, 16, 0, bk_brush, DI_NORMAL);
// draw submenu arrow at the right
if (_showArrow) {
SmallIcon arrowIcon(IDI_FOLDERARROW);
DrawIconEx(dis->hDC, dis->rcItem.right-16, iconPos.y, arrowIcon, 16, 16, 0, bk_brush, DI_NORMAL);
}
TCHAR text[BUFFER_LEN]; TCHAR text[BUFFER_LEN];
GetWindowText(_hwnd, text, BUFFER_LEN); GetWindowText(_hwnd, text, BUFFER_LEN);
if (dis->itemState & (ODS_DISABLED|ODS_GRAYED)) if (dis->itemState & (ODS_DISABLED|ODS_GRAYED))
DrawGrayText(dis, &textRect, text, DT_SINGLELINE|DT_VCENTER|DT_CENTER); DrawGrayText(dis, &textRect, text, DT_SINGLELINE|DT_VCENTER);
else { else {
BkMode mode(dis->hDC, TRANSPARENT); BkMode mode(dis->hDC, TRANSPARENT);
TextColor lcColor(dis->hDC, GetSysColor(text_color)); TextColor lcColor(dis->hDC, GetSysColor(text_color));

View file

@ -434,13 +434,13 @@ struct PictureButton : public OwnerdrawnButton
{ {
typedef OwnerdrawnButton super; typedef OwnerdrawnButton super;
PictureButton(HWND hwnd, HICON hicon, bool flat=false) PictureButton(HWND hwnd, HICON hIcon, bool flat=false)
: super(hwnd), _hicon(hicon), _flat(flat) {} : super(hwnd), _hIcon(hIcon), _flat(flat) {}
protected: protected:
virtual void DrawItem(LPDRAWITEMSTRUCT dis); virtual void DrawItem(LPDRAWITEMSTRUCT dis);
HICON _hicon; HICON _hIcon;
bool _flat; bool _flat;
}; };
@ -452,11 +452,12 @@ struct StartmenuEntry : public OwnerdrawnButton
{ {
typedef OwnerdrawnButton super; typedef OwnerdrawnButton super;
StartmenuEntry(HWND hwnd, HICON hicon) StartmenuEntry(HWND hwnd, HICON hIcon, bool showArrow)
: super(hwnd), _hicon(hicon) {} : super(hwnd), _hIcon(hIcon), _showArrow(showArrow) {}
protected: protected:
virtual void DrawItem(LPDRAWITEMSTRUCT dis); virtual void DrawItem(LPDRAWITEMSTRUCT dis);
HICON _hicon; HICON _hIcon;
bool _showArrow;
}; };