optimized screen update

svn path=/trunk/; revision=7420
This commit is contained in:
Martin Fuchs 2004-01-03 09:03:47 +00:00
parent d36decca0d
commit 955c62bf6a
5 changed files with 44 additions and 27 deletions

View file

@ -174,7 +174,7 @@ LRESULT DesktopWindow::Init(LPCREATESTRUCT pcs)
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
// subclass shellview window // subclass shellview window
DesktopShellView* pShellView = new DesktopShellView(hWndView, _pShellView); new DesktopShellView(hWndView, _pShellView);
_pShellView->UIActivate(SVUIA_ACTIVATE_FOCUS); _pShellView->UIActivate(SVUIA_ACTIVATE_FOCUS);

View file

@ -343,7 +343,7 @@ LRESULT FileChildWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Pane* pane = GetFocus()==_left_hwnd? _left: _right; Pane* pane = GetFocus()==_left_hwnd? _left: _right;
switch(LOWORD(wparam)) { switch(LOWORD(wparam)) {
case ID_WINDOW_NEW: {CONTEXT("PM_DISPATCH_COMMAND ID_WINDOW_NEW"); case ID_WINDOW_NEW: {CONTEXT("FileChildWindow PM_DISPATCH_COMMAND ID_WINDOW_NEW");
if (_root._entry->_etype == ET_SHELL) if (_root._entry->_etype == ET_SHELL)
FileChildWindow::create(GetParent(_hwnd)/*_hmdiclient*/, ShellChildWndInfo(_path,DesktopFolderPath())); FileChildWindow::create(GetParent(_hwnd)/*_hmdiclient*/, ShellChildWndInfo(_path,DesktopFolderPath()));
else else

View file

@ -402,6 +402,17 @@ LRESULT ShellBrowserChild::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
case WM_GETISHELLBROWSER: // for Registry Explorer Plugin case WM_GETISHELLBROWSER: // for Registry Explorer Plugin
return (LRESULT)static_cast<IShellBrowser*>(this); return (LRESULT)static_cast<IShellBrowser*>(this);
case PM_DISPATCH_COMMAND: {
switch(LOWORD(wparam)) {
case ID_WINDOW_NEW: {CONTEXT("ShellBrowserChild PM_DISPATCH_COMMAND ID_WINDOW_NEW");
ShellBrowserChild::create(GetParent(_hwnd)/*_hmdiclient*/, _create_info);
break;}
default:
return FALSE;
}
return TRUE;}
default: default:
return super::WndProc(nmsg, wparam, lparam); return super::WndProc(nmsg, wparam, lparam);
} }

View file

@ -220,9 +220,10 @@ void StartMenu::AddShellEntries(const ShellDirectory& dir, int max, bool subfold
LRESULT StartMenu::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) LRESULT StartMenu::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{ {
switch(nmsg) { switch(nmsg) {
case WM_PAINT: case WM_PAINT: {
Paint(PaintCanvas(_hwnd)); PaintCanvas canvas(_hwnd);
break; Paint(canvas);
break;}
case WM_SIZE: case WM_SIZE:
ResizeButtons(LOWORD(lparam)-_border_left); ResizeButtons(LOWORD(lparam)-_border_left);
@ -344,9 +345,9 @@ LRESULT StartMenu::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
} }
void StartMenu::Paint(HDC hdc) void StartMenu::Paint(PaintCanvas& canvas)
{ {
DrawFloatingButton(hdc); DrawFloatingButton(canvas);
#ifdef _LIGHT_STARTMENU #ifdef _LIGHT_STARTMENU
ClientRect clnt(_hwnd); ClientRect clnt(_hwnd);
@ -354,25 +355,29 @@ void StartMenu::Paint(HDC hdc)
int sep_width = rect.right-rect.left - 4; int sep_width = rect.right-rect.left - 4;
FontSelection font(hdc, GetStockFont(DEFAULT_GUI_FONT)); FontSelection font(canvas, GetStockFont(DEFAULT_GUI_FONT));
BkMode bk_mode(hdc, TRANSPARENT); BkMode bk_mode(canvas, TRANSPARENT);
for(SMBtnList::const_iterator it=_buttons.begin(); it!=_buttons.end(); ++it) { for(SMBtnList::const_iterator it=_buttons.begin(); it!=_buttons.end(); ++it) {
const SMBtnInfo& info = *it; const SMBtnInfo& info = *it;
if (rect.top > canvas.rcPaint.bottom)
break;
if (info._id == -1) { // a separator? if (info._id == -1) { // a separator?
rect.bottom = rect.top + STARTMENU_SEP_HEIGHT; rect.bottom = rect.top + STARTMENU_SEP_HEIGHT;
BrushSelection brush_sel(hdc, GetSysColorBrush(COLOR_BTNSHADOW)); BrushSelection brush_sel(canvas, GetSysColorBrush(COLOR_BTNSHADOW));
PatBlt(hdc, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT/2-1, sep_width, 1, PATCOPY); PatBlt(canvas, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT/2-1, sep_width, 1, PATCOPY);
SelectBrush(hdc, GetSysColorBrush(COLOR_BTNHIGHLIGHT)); SelectBrush(canvas, GetSysColorBrush(COLOR_BTNHIGHLIGHT));
PatBlt(hdc, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT/2, sep_width, 1, PATCOPY); PatBlt(canvas, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT/2, sep_width, 1, PATCOPY);
} else { } else {
rect.bottom = rect.top + STARTMENU_LINE_HEIGHT; rect.bottom = rect.top + STARTMENU_LINE_HEIGHT;
DrawStartMenuButton(hdc, rect, info._title, info._hIcon, if (rect.top >= canvas.rcPaint.top)
info._hasSubmenu, info._enabled, info._id==_selected_id, false); DrawStartMenuButton(canvas, rect, info._title, info._hIcon,
info._hasSubmenu, info._enabled, info._id==_selected_id, false);
} }
rect.top = rect.bottom; rect.top = rect.bottom;
@ -1143,9 +1148,10 @@ void StartMenuRoot::AddEntries()
LRESULT StartMenuRoot::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) LRESULT StartMenuRoot::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
{ {
switch(nmsg) { switch(nmsg) {
case WM_PAINT: case WM_PAINT: {
Paint(PaintCanvas(_hwnd)); PaintCanvas canvas(_hwnd);
break; Paint(canvas);
break;}
default: default:
return super::WndProc(nmsg, wparam, lparam); return super::WndProc(nmsg, wparam, lparam);
@ -1154,7 +1160,7 @@ LRESULT StartMenuRoot::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
return 0; return 0;
} }
void StartMenuRoot::Paint(HDC hdc) void StartMenuRoot::Paint(PaintCanvas& canvas)
{ {
int clr_bits; int clr_bits;
{WindowCanvas dc(_hwnd); clr_bits=GetDeviceCaps(dc, BITSPIXEL);} {WindowCanvas dc(_hwnd); clr_bits=GetDeviceCaps(dc, BITSPIXEL);}
@ -1169,22 +1175,22 @@ void StartMenuRoot::Paint(HDC hdc)
RECT rect = {0, 0, _logo_size.cx-1, clnt.bottom-h}; RECT rect = {0, 0, _logo_size.cx-1, clnt.bottom-h};
HBRUSH hbr = CreateSolidBrush(logo256? RGB(166,202,240): RGB(255,255,255)); // same color as the background color in the logo bitmap HBRUSH hbr = CreateSolidBrush(logo256? RGB(166,202,240): RGB(255,255,255)); // same color as the background color in the logo bitmap
FillRect(hdc, &rect, hbr); FillRect(canvas, &rect, hbr);
DeleteObject(hbr); DeleteObject(hbr);
//PatBlt(hdc, _logo_size.cx-1, 0, 1, clnt.bottom-h, WHITENESS); //PatBlt(canvas, _logo_size.cx-1, 0, 1, clnt.bottom-h, WHITENESS);
PatBlt(hdc, _logo_size.cx-1, 0, 1, clnt.bottom-h, WHITENESS); PatBlt(canvas, _logo_size.cx-1, 0, 1, clnt.bottom-h, WHITENESS);
BitBlt(hdc, 0, clnt.bottom-h, _logo_size.cx, h, mem_dc, 0, 0, SRCCOPY); BitBlt(canvas, 0, clnt.bottom-h, _logo_size.cx, h, mem_dc, 0, 0, SRCCOPY);
if (!logo256) { if (!logo256) {
rect.left = rect.right++; rect.left = rect.right++;
rect.bottom = clnt.bottom; rect.bottom = clnt.bottom;
HBRUSH hbr_border = GetStockBrush(GRAY_BRUSH); //CreateSolidBrush(RGB(71,88,85)); HBRUSH hbr_border = GetStockBrush(GRAY_BRUSH); //CreateSolidBrush(RGB(71,88,85));
FillRect(hdc, &rect, hbr_border); FillRect(canvas, &rect, hbr_border);
//DeleteObject(hbr_border); //DeleteObject(hbr_border);
} }
super::Paint(hdc); super::Paint(canvas);
} }

View file

@ -272,7 +272,7 @@ protected:
void DrawFloatingButton(HDC hdc); void DrawFloatingButton(HDC hdc);
void GetFloatingButonRect(LPRECT prect); void GetFloatingButonRect(LPRECT prect);
void Paint(HDC hdc); void Paint(PaintCanvas& canvas);
}; };
@ -339,7 +339,7 @@ protected:
SIZE _logo_size; SIZE _logo_size;
void AddEntries(); void AddEntries();
void Paint(HDC hdc); void Paint(PaintCanvas& canvas);
}; };