mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:56:26 +00:00
[SHELL32]
- Use similar shell def-view window styles as on Windows. - Add a "hack" to force the shell progman desktop window to get its correct window name, when running our shell on Windows. I don't know why calling CreateWindowExW(WS_EX_TOOLWINDOW, szProgmanClassName, szProgmanWindowName, ...) with a valid szProgmanWindowName string still persists in setting the window name to NULL... If someone has an idea, please let me know! - Addendum to CORE-11375: Create the shell desktop view with the same size as the current desktop's workarea. Confirmed with ApiMonitor on Windows. I add some "FIXME" to make future developers think about possible improvements in the code. svn path=/trunk/; revision=71635
This commit is contained in:
parent
4cb718e650
commit
bf37176da7
2 changed files with 38 additions and 10 deletions
|
@ -271,7 +271,7 @@ class CDefView :
|
||||||
{
|
{
|
||||||
static ATL::CWndClassInfo wc =
|
static ATL::CWndClassInfo wc =
|
||||||
{
|
{
|
||||||
{ sizeof(WNDCLASSEX), 0, StartWindowProc,
|
{ sizeof(WNDCLASSEX), CS_PARENTDC, StartWindowProc,
|
||||||
0, 0, NULL, NULL,
|
0, 0, NULL, NULL,
|
||||||
LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), NULL, SV_CLASS_NAME, NULL
|
LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW + 1), NULL, SV_CLASS_NAME, NULL
|
||||||
},
|
},
|
||||||
|
@ -2145,7 +2145,7 @@ HRESULT WINAPI CDefView::CreateViewWindow(IShellView *lpPrevView, LPCFOLDERSETTI
|
||||||
TRACE("-- CommDlgBrowser\n");
|
TRACE("-- CommDlgBrowser\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
Create(m_hWndParent, prcView, NULL, WS_CHILD | WS_TABSTOP, 0, 0U);
|
Create(m_hWndParent, prcView, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_TABSTOP, 0, 0U);
|
||||||
if (m_hWnd == NULL)
|
if (m_hWnd == NULL)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
|
|
|
@ -194,17 +194,28 @@ HWND CDesktopBrowser::FindDesktopListView()
|
||||||
BOOL CDesktopBrowser::CreateDeskWnd()
|
BOOL CDesktopBrowser::CreateDeskWnd()
|
||||||
{
|
{
|
||||||
FOLDERSETTINGS fs;
|
FOLDERSETTINGS fs;
|
||||||
RECT rcClient;
|
RECT rcWorkArea;
|
||||||
HRESULT hRet;
|
HRESULT hRet;
|
||||||
|
|
||||||
if (!GetClientRect(hWnd, &rcClient))
|
// FIXME: Add support for multi-monitor?
|
||||||
{
|
SystemParametersInfoW(SPI_GETWORKAREA,
|
||||||
return FALSE;
|
0, &rcWorkArea, 0);
|
||||||
}
|
|
||||||
|
// TODO: Call GetClientRect for the tray window and make small computation
|
||||||
|
// to be sure the tray window rect is removed from the work area!
|
||||||
|
#if 0
|
||||||
|
RECT rcTray;
|
||||||
|
HWND hWndTray;
|
||||||
|
|
||||||
|
/* Get client rect of the taskbar */
|
||||||
|
hRet = ShellDesk->GetTrayWindow(&hWndTray);
|
||||||
|
if (SUCCEEDED(hRet))
|
||||||
|
GetClientRect(hWndTray, &rcTray);
|
||||||
|
#endif
|
||||||
|
|
||||||
fs.ViewMode = FVM_ICON;
|
fs.ViewMode = FVM_ICON;
|
||||||
fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT;
|
fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT;
|
||||||
hRet = DesktopView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcClient, &hWndShellView);
|
hRet = DesktopView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcWorkArea, &hWndShellView);
|
||||||
if (!SUCCEEDED(hRet))
|
if (!SUCCEEDED(hRet))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -491,6 +502,8 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
|
||||||
RECT rcWorkArea;
|
RECT rcWorkArea;
|
||||||
|
|
||||||
// FIXME: Add support for multi-monitor!
|
// FIXME: Add support for multi-monitor!
|
||||||
|
// FIXME: Maybe merge with the code that retrieves the
|
||||||
|
// work area in CDesktopBrowser::CreateDeskWnd ?
|
||||||
SystemParametersInfoW(SPI_GETWORKAREA,
|
SystemParametersInfoW(SPI_GETWORKAREA,
|
||||||
0, &rcWorkArea, 0);
|
0, &rcWorkArea, 0);
|
||||||
|
|
||||||
|
@ -518,6 +531,15 @@ LRESULT CALLBACK CDesktopBrowser::ProgmanWindowProc(IN HWND hwnd, IN UINT uMsg,
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
{
|
{
|
||||||
LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam;
|
LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam;
|
||||||
|
|
||||||
|
// FIXME: This is a "hack" to enforce the window title
|
||||||
|
// to be set to what it should be *on Windows* only.
|
||||||
|
// I don't understand why it is reset to NULL whereas
|
||||||
|
// the creation of the progman window proper is done in
|
||||||
|
// the standard way... (05/06/2016, hbelusca).
|
||||||
|
//
|
||||||
|
::SetWindowTextW(hwnd, CreateStruct->lpszName);
|
||||||
|
|
||||||
pThis = SHDESK_Create(hwnd, CreateStruct);
|
pThis = SHDESK_Create(hwnd, CreateStruct);
|
||||||
if (pThis == NULL)
|
if (pThis == NULL)
|
||||||
{
|
{
|
||||||
|
@ -614,12 +636,18 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
||||||
cy = GetSystemMetrics(SM_CYSCREEN);
|
cy = GetSystemMetrics(SM_CYSCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
hWndDesk = CreateWindowExW(WS_EX_TOOLWINDOW, szProgmanClassName, szProgmanWindowName,
|
hWndDesk = ::CreateWindowExW(WS_EX_TOOLWINDOW, szProgmanClassName, szProgmanWindowName,
|
||||||
WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
|
||||||
x, y, cx, cy,
|
x, y, cx, cy,
|
||||||
NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk);
|
NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk);
|
||||||
|
|
||||||
if (hWndDesk != NULL)
|
if (hWndDesk != NULL)
|
||||||
|
{
|
||||||
|
::ShowWindow(hWndDesk, SW_SHOW);
|
||||||
|
::UpdateWindow(hWndDesk);
|
||||||
|
|
||||||
return (HANDLE)GetWindowLongPtrW(hWndDesk, 0);
|
return (HANDLE)GetWindowLongPtrW(hWndDesk, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue