mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
draw startmenu subfolder arrows
svn path=/trunk/; revision=5696
This commit is contained in:
parent
9a3c91b31d
commit
10f0f6628e
16 changed files with 107 additions and 86 deletions
|
@ -63,12 +63,12 @@ ResString::ResString(UINT nid)
|
|||
|
||||
ResIcon::ResIcon(UINT nid)
|
||||
{
|
||||
_hicon = LoadIcon(g_Globals._hInstance, MAKEINTRESOURCE(nid));
|
||||
_hIcon = LoadIcon(g_Globals._hInstance, MAKEINTRESOURCE(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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -509,6 +509,10 @@ SOURCE=.\shell\winfs.h
|
|||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\res\arrow.ico
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\explorer.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#define ID_EXECUTE 111
|
||||
#define IDM_WINEFILE 112
|
||||
#define IDI_LOGOFF 124
|
||||
#define IDI_FOLDERARROW 125
|
||||
#define ID_VIEW_NAME 401
|
||||
#define ID_VIEW_ALL_ATTRIBUTES 402
|
||||
#define ID_VIEW_SELECTED_ATTRIBUTES 403
|
||||
|
@ -62,7 +63,7 @@
|
|||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#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_CONTROL_VALUE 1000
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
|
|
|
@ -94,6 +94,7 @@ IDI_REACTOS ICON DISCARDABLE "res/reactos.ico"
|
|||
IDI_EXPLORER ICON DISCARDABLE "res/explorer.ico"
|
||||
IDI_STARTMENU ICON DISCARDABLE "res/startmenu.ico"
|
||||
IDI_LOGOFF ICON DISCARDABLE "res/logoff.ico"
|
||||
IDI_FOLDERARROW ICON DISCARDABLE "res/arrow.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
|
|
@ -48,18 +48,18 @@ struct ResIcon
|
|||
{
|
||||
ResIcon(UINT nid);
|
||||
|
||||
operator HICON() const {return _hicon;}
|
||||
operator HICON() const {return _hIcon;}
|
||||
|
||||
protected:
|
||||
HICON _hicon;
|
||||
HICON _hIcon;
|
||||
};
|
||||
|
||||
struct SmallIcon
|
||||
{
|
||||
SmallIcon(UINT nid);
|
||||
|
||||
operator HICON() const {return _hicon;}
|
||||
operator HICON() const {return _hIcon;}
|
||||
|
||||
protected:
|
||||
HICON _hicon;
|
||||
HICON _hIcon;
|
||||
};
|
||||
|
|
BIN
reactos/subsys/system/explorer/res/arrow.ico
Normal file
BIN
reactos/subsys/system/explorer/res/arrow.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 318 B |
|
@ -44,7 +44,7 @@ Entry::Entry(ENTRY_TYPE etype)
|
|||
_scanned = false;
|
||||
_bhfi_valid = false;
|
||||
_level = 0;
|
||||
_hicon = 0;
|
||||
_hIcon = 0;
|
||||
}
|
||||
|
||||
Entry::Entry(Entry* parent)
|
||||
|
@ -57,14 +57,14 @@ Entry::Entry(Entry* parent)
|
|||
_scanned = false;
|
||||
_bhfi_valid = false;
|
||||
_level = 0;
|
||||
_hicon = 0;
|
||||
_hIcon = 0;
|
||||
}
|
||||
|
||||
// free a directory entry
|
||||
Entry::~Entry()
|
||||
{
|
||||
if (_hicon && _hicon!=(HICON)-1)
|
||||
DestroyIcon(_hicon);
|
||||
if (_hIcon && _hIcon!=(HICON)-1)
|
||||
DestroyIcon(_hIcon);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
SFGAOF _shell_attribs;
|
||||
|
||||
ENTRY_TYPE _etype;
|
||||
HICON _hicon;
|
||||
HICON _hIcon;
|
||||
|
||||
BY_HANDLE_FILE_INFORMATION _bhfi;
|
||||
bool _bhfi_valid;
|
||||
|
|
|
@ -472,8 +472,8 @@ void Pane::draw_item(LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
|
|||
if (cx > IMAGE_WIDTH)
|
||||
cx = IMAGE_WIDTH;
|
||||
|
||||
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);
|
||||
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);
|
||||
else
|
||||
ImageList_DrawEx(_himl, img, dis->hDC,
|
||||
img_pos, dis->rcItem.top, cx,
|
||||
|
|
|
@ -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))) {
|
||||
TCHAR path[_MAX_PATH];
|
||||
unsigned flags;
|
||||
HICON hicon;
|
||||
HICON hIcon;
|
||||
int idx;
|
||||
|
||||
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)
|
||||
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;
|
||||
} else {
|
||||
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))
|
||||
DestroyIcon(hIconLarge);
|
||||
}
|
||||
|
||||
return hicon;
|
||||
return hIcon;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -275,10 +275,10 @@ void ShellDirectory::read_directory()
|
|||
// get display icons for files and virtual objects
|
||||
if (!(entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
|
||||
!(attribs & SFGAO_FILESYSTEM)) {
|
||||
entry->_hicon = extract_icon(_folder, pidls[n]);
|
||||
entry->_hIcon = extract_icon(_folder, pidls[n]);
|
||||
|
||||
if (!entry->_hicon)
|
||||
entry->_hicon = (HICON)-1; // don't try again later
|
||||
if (!entry->_hIcon)
|
||||
entry->_hIcon = (HICON)-1; // don't try again later
|
||||
}
|
||||
|
||||
entry->_down = NULL;
|
||||
|
|
|
@ -84,10 +84,19 @@ LRESULT StartMenu::Init(LPCREATESTRUCT pcs)
|
|||
if (super::Init(pcs))
|
||||
return 1;
|
||||
|
||||
for(ShellEntryMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) {
|
||||
const StartMenuEntry& sme = it->second;
|
||||
// create buttons for registered entries in _entries
|
||||
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;
|
||||
|
@ -194,7 +203,7 @@ StartMenuEntry& StartMenu::AddEntry(LPCTSTR title, HICON hIcon, UINT id)
|
|||
|
||||
StartMenuEntry& StartMenu::AddEntry(const ShellFolder folder, const ShellEntry* entry)
|
||||
{
|
||||
HICON hIcon = entry->_hicon;
|
||||
HICON hIcon = entry->_hIcon;
|
||||
|
||||
if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
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()
|
||||
|
@ -250,13 +259,13 @@ void StartMenu::CreateSubmenu(int id, const StartMenuFolders& new_folders, CREAT
|
|||
if (btn) {
|
||||
WindowRect pos(btn);
|
||||
|
||||
x = pos.right;
|
||||
y = pos.top+STARTMENU_HEIGHT-4;
|
||||
x = pos.right-8; // Submenus should overlap their parent a bit.
|
||||
y = pos.top;
|
||||
} else {
|
||||
WindowRect pos(_hwnd);
|
||||
|
||||
x = pos.right;
|
||||
y = pos.top+STARTMENU_HEIGHT-4;
|
||||
x = pos.right-8;
|
||||
y = pos.top;
|
||||
}
|
||||
|
||||
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)
|
||||
new_folders.push_back(folder1);
|
||||
|
||||
if (folder_id2 != -1) {
|
||||
SpecialFolder folder2(folder_id2, _hwnd);
|
||||
SpecialFolder folder2(folder_id2, _hwnd);
|
||||
|
||||
if (folder2)
|
||||
new_folders.push_back(folder2);
|
||||
}
|
||||
if (folder2)
|
||||
new_folders.push_back(folder2);
|
||||
|
||||
CreateSubmenu(id, new_folders, creator);
|
||||
}
|
||||
|
@ -335,21 +342,21 @@ LRESULT StartMenuRoot::Init(LPCREATESTRUCT pcs)
|
|||
AddSeparator();
|
||||
|
||||
// insert hard coded start entries
|
||||
AddButton(ResString(IDS_PROGRAMS), 0, IDC_PROGRAMS);
|
||||
AddButton(ResString(IDS_EXPLORE), SmallIcon(IDI_EXPLORER), IDC_EXPLORE);
|
||||
AddButton(ResString(IDS_FAVORITES), 0, IDC_FAVORITES);
|
||||
AddButton(ResString(IDS_DOCUMENTS), 0, IDC_DOCUMENTS);
|
||||
AddButton(ResString(IDS_RECENT), 0, IDC_RECENT);
|
||||
AddButton(ResString(IDS_SETTINGS), 0, IDC_SETTINGS);
|
||||
AddButton(ResString(IDS_ADMIN), 0, IDC_ADMIN);
|
||||
AddButton(ResString(IDS_SEARCH), 0, IDC_SEARCH);
|
||||
AddButton(ResString(IDS_START_HELP),0, IDC_START_HELP);
|
||||
AddButton(ResString(IDS_LAUNCH), 0, IDC_LAUNCH);
|
||||
AddButton(ResString(IDS_PROGRAMS), 0, true, IDC_PROGRAMS);
|
||||
AddButton(ResString(IDS_EXPLORE), SmallIcon(IDI_EXPLORER), false, IDC_EXPLORE);
|
||||
AddButton(ResString(IDS_FAVORITES), 0, true, IDC_FAVORITES);
|
||||
AddButton(ResString(IDS_DOCUMENTS), 0, true, IDC_DOCUMENTS);
|
||||
AddButton(ResString(IDS_RECENT), 0, true, IDC_RECENT);
|
||||
AddButton(ResString(IDS_SETTINGS), 0, true, IDC_SETTINGS);
|
||||
AddButton(ResString(IDS_ADMIN), 0, true, IDC_ADMIN);
|
||||
AddButton(ResString(IDS_SEARCH), 0, false, IDC_SEARCH);
|
||||
AddButton(ResString(IDS_START_HELP),0, false, IDC_START_HELP);
|
||||
AddButton(ResString(IDS_LAUNCH), 0, false, IDC_LAUNCH);
|
||||
|
||||
AddSeparator();
|
||||
|
||||
AddButton(ResString(IDS_SHUTDOWN), SmallIcon(IDI_LOGOFF), IDC_SHUTDOWN);
|
||||
AddButton(ResString(IDS_LOGOFF), SmallIcon(IDI_LOGOFF), IDC_LOGOFF);
|
||||
AddButton(ResString(IDS_SHUTDOWN), SmallIcon(IDI_LOGOFF), false, IDC_SHUTDOWN);
|
||||
AddButton(ResString(IDS_LOGOFF), SmallIcon(IDI_LOGOFF), false, IDC_LOGOFF);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -33,14 +33,19 @@
|
|||
#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
|
||||
struct StartMenuButton : public Button
|
||||
{
|
||||
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)
|
||||
: Button(parent, title, 2, y, STARTMENU_WIDTH-4, STARTMENU_LINE_HEIGHT, id, style, exStyle)
|
||||
UINT id, HICON hIcon=0, bool showArrow=false, DWORD style=WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_OWNERDRAW, DWORD exStyle=0)
|
||||
: 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);
|
||||
}
|
||||
|
@ -50,7 +55,7 @@ struct StartMenuButton : public Button
|
|||
struct StartMenuSeparator : public Static
|
||||
{
|
||||
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 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 CreateSubmenu(int id, const StartMenuFolders& new_folders, CREATORFUNC creator=s_def_creator);
|
||||
|
|
|
@ -164,32 +164,32 @@ int DesktopBar::Command(int id, int code)
|
|||
|
||||
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)
|
||||
SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hicon);
|
||||
if (!hIcon)
|
||||
SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon);
|
||||
|
||||
if (!hicon)
|
||||
SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hicon);
|
||||
if (!hIcon)
|
||||
SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon);
|
||||
|
||||
if (!hicon)
|
||||
hicon = (HICON)GetClassLong(hwnd, GCL_HICONSM);
|
||||
if (!hIcon)
|
||||
hIcon = (HICON)GetClassLong(hwnd, GCL_HICONSM);
|
||||
|
||||
if (!hicon)
|
||||
hicon = (HICON)GetClassLong(hwnd, GCL_HICON);
|
||||
if (!hIcon)
|
||||
hIcon = (HICON)GetClassLong(hwnd, GCL_HICON);
|
||||
|
||||
if (!hicon)
|
||||
SendMessageTimeout(hwnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (LPDWORD)&hicon);
|
||||
if (!hIcon)
|
||||
SendMessageTimeout(hwnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (LPDWORD)&hIcon);
|
||||
|
||||
if (!hicon)
|
||||
hicon = LoadIcon(0, IDI_APPLICATION);
|
||||
if (!hIcon)
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
DeleteDC(hdc);
|
||||
|
||||
|
@ -352,8 +352,8 @@ BOOL CALLBACK TaskBar::EnumWndProc(HWND hwnd, LPARAM lparam)
|
|||
if (!last_id)
|
||||
found->second._id = pThis->_next_id++;
|
||||
} else {
|
||||
HICON hicon = get_window_icon(hwnd);
|
||||
HBITMAP hbmp = create_bitmap_from_icon(hicon, pThis->_htoolbar, GetSysColorBrush(COLOR_BTNFACE));
|
||||
HICON hIcon = get_window_icon(hwnd);
|
||||
HBITMAP hbmp = create_bitmap_from_icon(hIcon, pThis->_htoolbar, GetSysColorBrush(COLOR_BTNFACE));
|
||||
|
||||
TBADDBITMAP ab = {0, (UINT_PTR)hbmp};
|
||||
int bmp_idx = SendMessage(pThis->_htoolbar, TB_ADDBITMAP, 1, (LPARAM)&ab);
|
||||
|
|
|
@ -34,11 +34,6 @@
|
|||
#define TASKBAR_LEFT 70
|
||||
//#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)
|
||||
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "window.h"
|
||||
|
||||
#include "../globals.h"
|
||||
#include "../explorer_intres.h"
|
||||
|
||||
|
||||
WindowClass::WindowClass(LPCTSTR classname, UINT style_, WNDPROC wndproc)
|
||||
|
@ -593,7 +594,7 @@ void PictureButton::DrawItem(LPDRAWITEMSTRUCT dis)
|
|||
} else
|
||||
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];
|
||||
GetWindowText(_hwnd, text, BUFFER_LEN);
|
||||
|
@ -648,13 +649,19 @@ void StartmenuEntry::DrawItem(LPDRAWITEMSTRUCT dis)
|
|||
HBRUSH bk_brush = GetSysColorBrush(bk_color);
|
||||
|
||||
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];
|
||||
GetWindowText(_hwnd, text, BUFFER_LEN);
|
||||
|
||||
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 {
|
||||
BkMode mode(dis->hDC, TRANSPARENT);
|
||||
TextColor lcColor(dis->hDC, GetSysColor(text_color));
|
||||
|
|
|
@ -434,13 +434,13 @@ struct PictureButton : public OwnerdrawnButton
|
|||
{
|
||||
typedef OwnerdrawnButton super;
|
||||
|
||||
PictureButton(HWND hwnd, HICON hicon, bool flat=false)
|
||||
: super(hwnd), _hicon(hicon), _flat(flat) {}
|
||||
PictureButton(HWND hwnd, HICON hIcon, bool flat=false)
|
||||
: super(hwnd), _hIcon(hIcon), _flat(flat) {}
|
||||
|
||||
protected:
|
||||
virtual void DrawItem(LPDRAWITEMSTRUCT dis);
|
||||
|
||||
HICON _hicon;
|
||||
HICON _hIcon;
|
||||
bool _flat;
|
||||
};
|
||||
|
||||
|
@ -452,11 +452,12 @@ struct StartmenuEntry : public OwnerdrawnButton
|
|||
{
|
||||
typedef OwnerdrawnButton super;
|
||||
|
||||
StartmenuEntry(HWND hwnd, HICON hicon)
|
||||
: super(hwnd), _hicon(hicon) {}
|
||||
StartmenuEntry(HWND hwnd, HICON hIcon, bool showArrow)
|
||||
: super(hwnd), _hIcon(hIcon), _showArrow(showArrow) {}
|
||||
|
||||
protected:
|
||||
virtual void DrawItem(LPDRAWITEMSTRUCT dis);
|
||||
|
||||
HICON _hicon;
|
||||
HICON _hIcon;
|
||||
bool _showArrow;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue