mirror of
https://github.com/reactos/reactos.git
synced 2024-06-21 13:31:38 +00:00
[SHELL32] Resizable for SHBrowseForFolder (#3299)
Make the dialog box of SHBrowseForFolder function resizable. CORE-17341
This commit is contained in:
parent
ba09834c5e
commit
de8d156e2c
|
@ -102,7 +102,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Търсене на папка"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -107,7 +107,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Procházet pro složku"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -107,7 +107,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Verzeichnis auswählen"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Αναζήτηση φακέλου"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -110,7 +110,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Buscar carpeta"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -108,7 +108,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Vali kaust"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Rechercher un dossier"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -103,7 +103,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "בחירת תיקיה"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "फोल्डर खोंजे"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Mappák böngészése"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Jelajah Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Selezione cartella"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "フォルダの参照"
|
||||
FONT 9, "MS UI Gothic"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 9, "굴림"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Bla etter mappe"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -107,7 +107,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Wybierz katalog"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Procurar por Pasta"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Procurar pastas"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -103,7 +103,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Specificare dosar"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -108,7 +108,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Обзор"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Browse for Folder"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -105,7 +105,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Shfleto për Dosje"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Bläddra efter mapp"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -103,7 +103,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Dizin İçin Göz At"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -101,7 +101,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "Огляд папок"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
|
|
@ -111,7 +111,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "浏览文件夹"
|
||||
FONT 9, "宋体"
|
||||
BEGIN
|
||||
|
|
|
@ -111,7 +111,7 @@ BEGIN
|
|||
END
|
||||
|
||||
IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX 15, 40, 218, 196
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX
|
||||
CAPTION "瀏覽資料夾"
|
||||
FONT 9, "新細明體"
|
||||
BEGIN
|
||||
|
|
|
@ -40,18 +40,21 @@
|
|||
#include "shresdef.h"
|
||||
#ifdef __REACTOS__
|
||||
#include <shlwapi.h>
|
||||
#include "layout.h" /* Resizable window */
|
||||
#endif
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111)
|
||||
|
||||
#ifndef __REACTOS__ /* Defined in "layout.h" */
|
||||
/* original margins and control size */
|
||||
typedef struct tagLAYOUT_DATA
|
||||
{
|
||||
LONG left, width, right;
|
||||
LONG top, height, bottom;
|
||||
} LAYOUT_DATA;
|
||||
#endif
|
||||
|
||||
typedef struct tagbrowse_info
|
||||
{
|
||||
|
@ -72,17 +75,21 @@ typedef struct tagTV_ITEMDATA
|
|||
IEnumIDList* pEnumIL; /* Children iterator */
|
||||
} TV_ITEMDATA, *LPTV_ITEMDATA;
|
||||
|
||||
#ifndef __REACTOS__ /* Defined in "layout.h" */
|
||||
typedef struct tagLAYOUT_INFO
|
||||
{
|
||||
int iItemId; /* control id */
|
||||
DWORD dwAnchor; /* BF_* flags specifying which margins should remain constant */
|
||||
} LAYOUT_INFO;
|
||||
#endif
|
||||
|
||||
static const LAYOUT_INFO g_layout_info[] =
|
||||
{
|
||||
{IDC_BROWSE_FOR_FOLDER_TITLE, BF_TOP|BF_LEFT|BF_RIGHT},
|
||||
{IDC_BROWSE_FOR_FOLDER_STATUS, BF_TOP|BF_LEFT|BF_RIGHT},
|
||||
#ifndef __REACTOS__ /* Duplicated */
|
||||
{IDC_BROWSE_FOR_FOLDER_FOLDER, BF_TOP|BF_LEFT|BF_RIGHT},
|
||||
#endif
|
||||
{IDC_BROWSE_FOR_FOLDER_TREEVIEW, BF_TOP|BF_BOTTOM|BF_LEFT|BF_RIGHT},
|
||||
{IDC_BROWSE_FOR_FOLDER_FOLDER, BF_BOTTOM|BF_LEFT},
|
||||
{IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, BF_BOTTOM|BF_LEFT|BF_RIGHT},
|
||||
|
@ -125,6 +132,7 @@ static void browsefolder_callback( LPBROWSEINFOW lpBrowseInfo, HWND hWnd,
|
|||
lpBrowseInfo->lpfn( hWnd, msg, param, lpBrowseInfo->lParam );
|
||||
}
|
||||
|
||||
#ifndef __REACTOS__ /* Defined in "layout.h" */
|
||||
static LAYOUT_DATA *LayoutInit(HWND hwnd, const LAYOUT_INFO *layout_info, int layout_count)
|
||||
{
|
||||
LAYOUT_DATA *data;
|
||||
|
@ -185,6 +193,7 @@ static void LayoutUpdate(HWND hwnd, LAYOUT_DATA *data, const LAYOUT_INFO *layout
|
|||
SetWindowPos(hItem, NULL, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -1127,6 +1136,7 @@ static BOOL BrsFolder_OnSetSelectionA(browse_info *info, LPVOID selection, BOOL
|
|||
return result;
|
||||
}
|
||||
|
||||
#ifndef __REACTOS__ /* This is a buggy way (resize on title bar) */
|
||||
static LRESULT BrsFolder_OnWindowPosChanging(browse_info *info, WINDOWPOS *pos)
|
||||
{
|
||||
if ((info->lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE) && !(pos->flags & SWP_NOSIZE))
|
||||
|
@ -1138,12 +1148,17 @@ static LRESULT BrsFolder_OnWindowPosChanging(browse_info *info, WINDOWPOS *pos)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static INT BrsFolder_OnDestroy(browse_info *info)
|
||||
{
|
||||
if (info->layout)
|
||||
{
|
||||
#ifdef __REACTOS__
|
||||
LayoutDestroy(info->layout);
|
||||
#else
|
||||
SHFree(info->layout);
|
||||
#endif
|
||||
info->layout = NULL;
|
||||
}
|
||||
|
||||
|
@ -1226,8 +1241,15 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
|
|||
case WM_COMMAND:
|
||||
return BrsFolder_OnCommand( info, wParam );
|
||||
|
||||
#ifdef __REACTOS__
|
||||
case WM_GETMINMAXINFO:
|
||||
((LPMINMAXINFO)lParam)->ptMinTrackSize.x = info->szMin.cx;
|
||||
((LPMINMAXINFO)lParam)->ptMinTrackSize.y = info->szMin.cy;
|
||||
return 0;
|
||||
#else /* This is a buggy way (resize on title bar) */
|
||||
case WM_WINDOWPOSCHANGING:
|
||||
return BrsFolder_OnWindowPosChanging( info, (WINDOWPOS *)lParam);
|
||||
#endif
|
||||
|
||||
case WM_SIZE:
|
||||
if (info->layout) /* new style dialogs */
|
||||
|
|
232
sdk/include/reactos/layout.h
Normal file
232
sdk/include/reactos/layout.h
Normal file
|
@ -0,0 +1,232 @@
|
|||
/*
|
||||
* PROJECT: ReactOS headers
|
||||
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
|
||||
* PURPOSE: The layout engine of resizable dialog boxes / windows
|
||||
* COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
#pragma once
|
||||
#include <assert.h>
|
||||
|
||||
typedef struct LAYOUT_INFO {
|
||||
UINT m_nCtrlID;
|
||||
UINT m_uEdges; /* BF_* flags */
|
||||
HWND m_hwndCtrl;
|
||||
SIZE m_margin1;
|
||||
SIZE m_margin2;
|
||||
} LAYOUT_INFO;
|
||||
|
||||
typedef struct LAYOUT_DATA {
|
||||
HWND m_hwndParent;
|
||||
HWND m_hwndGrip;
|
||||
LAYOUT_INFO *m_pLayouts;
|
||||
UINT m_cLayouts;
|
||||
} LAYOUT_DATA;
|
||||
|
||||
static __inline void
|
||||
_layout_ModifySystemMenu(LAYOUT_DATA *pData, BOOL bEnableResize)
|
||||
{
|
||||
if (bEnableResize)
|
||||
{
|
||||
GetSystemMenu(pData->m_hwndParent, TRUE); /* revert */
|
||||
}
|
||||
else
|
||||
{
|
||||
HMENU hSysMenu = GetSystemMenu(pData->m_hwndParent, FALSE);
|
||||
RemoveMenu(hSysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
|
||||
RemoveMenu(hSysMenu, SC_SIZE, MF_BYCOMMAND);
|
||||
RemoveMenu(hSysMenu, SC_RESTORE, MF_BYCOMMAND);
|
||||
}
|
||||
}
|
||||
|
||||
static __inline HDWP
|
||||
_layout_MoveGrip(LAYOUT_DATA *pData, HDWP hDwp OPTIONAL)
|
||||
{
|
||||
SIZE size = { GetSystemMetrics(SM_CXVSCROLL), GetSystemMetrics(SM_CYHSCROLL) };
|
||||
const UINT uFlags = SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER;
|
||||
RECT rcClient;
|
||||
GetClientRect(pData->m_hwndParent, &rcClient);
|
||||
|
||||
if (hDwp)
|
||||
{
|
||||
hDwp = DeferWindowPos(hDwp, pData->m_hwndGrip, NULL,
|
||||
rcClient.right - size.cx, rcClient.bottom - size.cy,
|
||||
size.cx, size.cy, uFlags);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPos(pData->m_hwndGrip, NULL,
|
||||
rcClient.right - size.cx, rcClient.bottom - size.cy,
|
||||
size.cx, size.cy, uFlags);
|
||||
}
|
||||
return hDwp;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
_layout_ShowGrip(LAYOUT_DATA *pData, BOOL bShow)
|
||||
{
|
||||
if (!bShow)
|
||||
{
|
||||
ShowWindow(pData->m_hwndGrip, SW_HIDE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pData->m_hwndGrip == NULL)
|
||||
{
|
||||
DWORD style = WS_CHILD | WS_CLIPSIBLINGS | SBS_SIZEGRIP;
|
||||
pData->m_hwndGrip = CreateWindowExW(0, L"SCROLLBAR", NULL, style,
|
||||
0, 0, 0, 0, pData->m_hwndParent,
|
||||
NULL, GetModuleHandleW(NULL), NULL);
|
||||
}
|
||||
_layout_MoveGrip(pData, NULL);
|
||||
ShowWindow(pData->m_hwndGrip, SW_SHOWNOACTIVATE);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
_layout_GetPercents(LPRECT prcPercents, UINT uEdges)
|
||||
{
|
||||
prcPercents->left = (uEdges & BF_LEFT) ? 0 : 100;
|
||||
prcPercents->right = (uEdges & BF_RIGHT) ? 100 : 0;
|
||||
prcPercents->top = (uEdges & BF_TOP) ? 0 : 100;
|
||||
prcPercents->bottom = (uEdges & BF_BOTTOM) ? 100 : 0;
|
||||
}
|
||||
|
||||
static __inline HDWP
|
||||
_layout_DoMoveItem(LAYOUT_DATA *pData, HDWP hDwp, const LAYOUT_INFO *pLayout,
|
||||
const RECT *rcClient)
|
||||
{
|
||||
RECT rcChild, NewRect, rcPercents;
|
||||
LONG nWidth, nHeight;
|
||||
|
||||
if (!GetWindowRect(pLayout->m_hwndCtrl, &rcChild))
|
||||
return hDwp;
|
||||
MapWindowPoints(NULL, pData->m_hwndParent, (LPPOINT)&rcChild, 2);
|
||||
|
||||
nWidth = rcClient->right - rcClient->left;
|
||||
nHeight = rcClient->bottom - rcClient->top;
|
||||
|
||||
_layout_GetPercents(&rcPercents, pLayout->m_uEdges);
|
||||
NewRect.left = pLayout->m_margin1.cx + nWidth * rcPercents.left / 100;
|
||||
NewRect.top = pLayout->m_margin1.cy + nHeight * rcPercents.top / 100;
|
||||
NewRect.right = pLayout->m_margin2.cx + nWidth * rcPercents.right / 100;
|
||||
NewRect.bottom = pLayout->m_margin2.cy + nHeight * rcPercents.bottom / 100;
|
||||
|
||||
if (!EqualRect(&NewRect, &rcChild))
|
||||
{
|
||||
hDwp = DeferWindowPos(hDwp, pLayout->m_hwndCtrl, NULL, NewRect.left, NewRect.top,
|
||||
NewRect.right - NewRect.left, NewRect.bottom - NewRect.top,
|
||||
SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOREPOSITION);
|
||||
}
|
||||
return hDwp;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
_layout_ArrangeLayout(LAYOUT_DATA *pData)
|
||||
{
|
||||
RECT rcClient;
|
||||
UINT iItem;
|
||||
HDWP hDwp = BeginDeferWindowPos(pData->m_cLayouts + 1);
|
||||
if (hDwp == NULL)
|
||||
return;
|
||||
|
||||
GetClientRect(pData->m_hwndParent, &rcClient);
|
||||
|
||||
for (iItem = 0; iItem < pData->m_cLayouts; ++iItem)
|
||||
hDwp = _layout_DoMoveItem(pData, hDwp, &pData->m_pLayouts[iItem], &rcClient);
|
||||
|
||||
hDwp = _layout_MoveGrip(pData, hDwp);
|
||||
EndDeferWindowPos(hDwp);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
_layout_InitLayouts(LAYOUT_DATA *pData)
|
||||
{
|
||||
RECT rcClient, rcChild, rcPercents;
|
||||
LONG nWidth, nHeight;
|
||||
UINT iItem;
|
||||
|
||||
GetClientRect(pData->m_hwndParent, &rcClient);
|
||||
nWidth = rcClient.right - rcClient.left;
|
||||
nHeight = rcClient.bottom - rcClient.top;
|
||||
|
||||
for (iItem = 0; iItem < pData->m_cLayouts; ++iItem)
|
||||
{
|
||||
LAYOUT_INFO *pInfo = &pData->m_pLayouts[iItem];
|
||||
if (pInfo->m_hwndCtrl == NULL)
|
||||
{
|
||||
pInfo->m_hwndCtrl = GetDlgItem(pData->m_hwndParent, pInfo->m_nCtrlID);
|
||||
if (pInfo->m_hwndCtrl == NULL)
|
||||
continue;
|
||||
}
|
||||
|
||||
GetWindowRect(pInfo->m_hwndCtrl, &rcChild);
|
||||
MapWindowPoints(NULL, pData->m_hwndParent, (LPPOINT)&rcChild, 2);
|
||||
|
||||
_layout_GetPercents(&rcPercents, pInfo->m_uEdges);
|
||||
pInfo->m_margin1.cx = rcChild.left - nWidth * rcPercents.left / 100;
|
||||
pInfo->m_margin1.cy = rcChild.top - nHeight * rcPercents.top / 100;
|
||||
pInfo->m_margin2.cx = rcChild.right - nWidth * rcPercents.right / 100;
|
||||
pInfo->m_margin2.cy = rcChild.bottom - nHeight * rcPercents.bottom / 100;
|
||||
}
|
||||
}
|
||||
|
||||
/* NOTE: Please call LayoutUpdate on parent's WM_SIZE. */
|
||||
static __inline void
|
||||
LayoutUpdate(HWND ignored1, LAYOUT_DATA *pData, LPCVOID ignored2, UINT ignored3)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(ignored1);
|
||||
UNREFERENCED_PARAMETER(ignored2);
|
||||
UNREFERENCED_PARAMETER(ignored3);
|
||||
if (pData == NULL)
|
||||
return;
|
||||
assert(IsWindow(pData->m_hwndParent));
|
||||
_layout_ArrangeLayout(pData);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
LayoutEnableResize(LAYOUT_DATA *pData, BOOL bEnable)
|
||||
{
|
||||
_layout_ShowGrip(pData, bEnable);
|
||||
_layout_ModifySystemMenu(pData, bEnable);
|
||||
}
|
||||
|
||||
static __inline LAYOUT_DATA *
|
||||
LayoutInit(HWND hwndParent, const LAYOUT_INFO *pLayouts, UINT cLayouts)
|
||||
{
|
||||
SIZE_T cb;
|
||||
LAYOUT_DATA *pData = (LAYOUT_DATA *)SHAlloc(sizeof(LAYOUT_DATA));
|
||||
if (pData == NULL)
|
||||
{
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cb = cLayouts * sizeof(LAYOUT_INFO);
|
||||
pData->m_cLayouts = cLayouts;
|
||||
pData->m_pLayouts = (LAYOUT_INFO *)SHAlloc(cb);
|
||||
if (pData->m_pLayouts == NULL)
|
||||
{
|
||||
assert(0);
|
||||
SHFree(pData);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(pData->m_pLayouts, pLayouts, cb);
|
||||
|
||||
/* NOTE: The parent window must have initially WS_SIZEBOX style. */
|
||||
assert(IsWindow(hwndParent));
|
||||
assert(GetWindowLongPtrW(hwndParent, GWL_STYLE) & WS_SIZEBOX);
|
||||
|
||||
pData->m_hwndParent = hwndParent;
|
||||
pData->m_hwndGrip = NULL;
|
||||
LayoutEnableResize(pData, TRUE);
|
||||
_layout_InitLayouts(pData);
|
||||
return pData;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
LayoutDestroy(LAYOUT_DATA *pData)
|
||||
{
|
||||
if (!pData)
|
||||
return;
|
||||
SHFree(pData->m_pLayouts);
|
||||
SHFree(pData);
|
||||
}
|
Loading…
Reference in a new issue