mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 09:24:11 +00:00
- halfplement console scrolling support
svn path=/trunk/; revision=28796
This commit is contained in:
parent
574eb2daac
commit
89628d18b4
|
@ -634,7 +634,35 @@ GuiConsoleUseDefaults(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PCSRSS_
|
|||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
GuiConsoleInitScrollbar(PCSRSS_CONSOLE Console, HWND hwnd)
|
||||
{
|
||||
SCROLLINFO sInfo;
|
||||
|
||||
/* set scrollbar sizes */
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
sInfo.fMask = SIF_RANGE | SIF_POS;
|
||||
sInfo.nMin = 0;
|
||||
sInfo.nMax = Console->ActiveBuffer->MaxY;
|
||||
sInfo.nPos = 0;
|
||||
SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE);
|
||||
ShowScrollBar(hwnd, SB_VERT, TRUE);
|
||||
|
||||
if (Console->ActiveBuffer->MaxX > Console->Size.X)
|
||||
{
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
sInfo.fMask = SIF_RANGE | SIF_POS;
|
||||
sInfo.nMin = 0;
|
||||
sInfo.nPos = 0;
|
||||
sInfo.nMax = Console->ActiveBuffer->MaxX;
|
||||
SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowScrollBar(hwnd, SB_HORZ, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL FASTCALL
|
||||
GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create)
|
||||
|
@ -743,6 +771,7 @@ GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create)
|
|||
|
||||
SetTimer(hWnd, 1, CURSOR_BLINK_TIME, NULL);
|
||||
GuiConsoleCreateSysMenu(Console);
|
||||
GuiConsoleInitScrollbar(Console, hWnd);
|
||||
SetEvent(GuiData->hGuiInitEvent);
|
||||
|
||||
return (BOOL) DefWindowProcW(hWnd, WM_NCCREATE, 0, (LPARAM) Create);
|
||||
|
@ -1532,14 +1561,11 @@ GuiConsoleResize(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
DPRINT1("GuiConsoleResize X %d Y %d\n", LOWORD(lParam), HIWORD(lParam));
|
||||
}
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
GuiConsoleCreateScrollBar(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, HWND NewWindow)
|
||||
VOID
|
||||
FASTCALL
|
||||
GuiConsoleHandleScrollbarMenu()
|
||||
{
|
||||
HMENU hMenu;
|
||||
HWND hVScrollBar;
|
||||
HWND hHScrollBar;
|
||||
SCROLLINFO sInfo;
|
||||
|
||||
hMenu = CreatePopupMenu();
|
||||
if (hMenu == NULL)
|
||||
|
@ -1547,7 +1573,6 @@ GuiConsoleCreateScrollBar(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, HWN
|
|||
DPRINT("CreatePopupMenu failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SCROLLHERE);
|
||||
//InsertItem(hMenu, MFT_SEPARATOR, MIIM_FTYPE, 0, NULL, -1);
|
||||
//InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SCROLLTOP);
|
||||
|
@ -1559,54 +1584,6 @@ GuiConsoleCreateScrollBar(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, HWN
|
|||
//InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SCROLLUP);
|
||||
//InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SCROLLDOWN);
|
||||
|
||||
hVScrollBar = CreateWindowExW(0L,
|
||||
L"ScrollBar",
|
||||
(LPWSTR)NULL,
|
||||
WS_CHILD | WS_VSCROLL,
|
||||
0,
|
||||
0,
|
||||
200,
|
||||
50,
|
||||
NewWindow,
|
||||
NULL, //hMenu,
|
||||
GetModuleHandleW(NULL),
|
||||
(LPVOID)GuiData);
|
||||
|
||||
if (hVScrollBar)
|
||||
{
|
||||
|
||||
/* set scrollbar sizes */
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
sInfo.fMask = SIF_RANGE | SIF_POS;
|
||||
sInfo.nMin = 0;
|
||||
sInfo.nMax = Console->ActiveBuffer->MaxY;
|
||||
sInfo.nPos = 0;
|
||||
SetScrollInfo(hVScrollBar, SB_CTL, &sInfo, TRUE);
|
||||
ShowScrollBar(NewWindow, SB_CTL, TRUE);
|
||||
GuiData->hVScrollBar = hVScrollBar;
|
||||
}
|
||||
|
||||
if (Console->ActiveBuffer->MaxX > Console->Size.X)
|
||||
{
|
||||
hHScrollBar = CreateWindowExW(0L,
|
||||
L"ScrollBar",
|
||||
(LPWSTR)NULL,
|
||||
WS_CHILD | WS_HSCROLL,
|
||||
0,
|
||||
0,
|
||||
200,
|
||||
CW_USEDEFAULT,
|
||||
NewWindow,
|
||||
hMenu,
|
||||
GetModuleHandleW(NULL),
|
||||
(LPVOID)GuiData);
|
||||
if (hHScrollBar)
|
||||
{
|
||||
sInfo.nMax = Console->ActiveBuffer->MaxX;
|
||||
SetScrollInfo(hHScrollBar, SB_CTL, &sInfo, TRUE);
|
||||
GuiData->hHScrollBar = hHScrollBar;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static VOID FASTCALL
|
||||
|
@ -1751,12 +1728,12 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole
|
|||
if (Console->Size.X < Console->ActiveBuffer->MaxX)
|
||||
{
|
||||
/* show scrollbar when window becomes smaller than active screen buffer */
|
||||
//ShowScrollBar(GuiData->hHScrollBar, SB_CTL, TRUE);
|
||||
ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* hide scrollbar */
|
||||
//ShowScrollBar(GuiData->hHScrollBar, SB_CTL, FALSE);
|
||||
ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, FALSE);
|
||||
}
|
||||
}
|
||||
if (ProcessData)
|
||||
|
@ -1766,6 +1743,94 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole
|
|||
InvalidateRect(pConInfo->hConsoleWindow, NULL, TRUE);
|
||||
}
|
||||
|
||||
static
|
||||
LRESULT
|
||||
GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam)
|
||||
{
|
||||
SCROLLINFO sInfo;
|
||||
int old_pos;
|
||||
|
||||
/* set scrollbar sizes */
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
sInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE | SIF_TRACKPOS;
|
||||
|
||||
if (!GetScrollInfo(hwnd,
|
||||
(uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT),
|
||||
&sInfo))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
old_pos = sInfo.nPos;
|
||||
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case SB_LINELEFT:
|
||||
sInfo.nPos -= 1;
|
||||
break;
|
||||
|
||||
case SB_LINERIGHT:
|
||||
sInfo.nPos += 1;
|
||||
break;
|
||||
|
||||
case SB_PAGELEFT:
|
||||
sInfo.nPos -= sInfo.nPage;
|
||||
break;
|
||||
|
||||
case SB_PAGERIGHT:
|
||||
sInfo.nPos += sInfo.nPage;
|
||||
break;
|
||||
|
||||
case SB_THUMBTRACK:
|
||||
sInfo.nPage = sInfo.nTrackPos;
|
||||
break;
|
||||
|
||||
case SB_TOP:
|
||||
sInfo.nPos = sInfo.nMin;
|
||||
break;
|
||||
|
||||
case SB_BOTTOM:
|
||||
sInfo.nPos = sInfo.nMax;
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
sInfo.fMask = SIF_POS;
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
|
||||
SetScrollInfo(hwnd,
|
||||
(uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT),
|
||||
&sInfo,
|
||||
TRUE);
|
||||
|
||||
sInfo.cbSize = sizeof(SCROLLINFO);
|
||||
sInfo.fMask = SIF_POS;
|
||||
|
||||
if (!GetScrollInfo(hwnd,
|
||||
(uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT),
|
||||
&sInfo))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (old_pos != sInfo.nPos)
|
||||
{
|
||||
///
|
||||
/// fixme scroll window
|
||||
///
|
||||
|
||||
// ScrollWindow
|
||||
//UpdateWindow(hwnd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK
|
||||
GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -1814,6 +1879,10 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_SYSCOMMAND:
|
||||
Result = GuiConsoleHandleSysMenuCommand(hWnd, wParam, lParam, GuiData);
|
||||
break;
|
||||
case WM_HSCROLL:
|
||||
case WM_VSCROLL:
|
||||
Result = GuiConsoleHandleScroll(hWnd, msg, wParam);
|
||||
break;
|
||||
case WM_SIZE:
|
||||
GuiConsoleResize(hWnd, wParam, lParam);
|
||||
break;
|
||||
|
@ -1863,7 +1932,7 @@ GuiConsoleNotifyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
NewWindow = CreateWindowW(L"ConsoleWindowClass",
|
||||
Title,
|
||||
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, //WS_OVERLAPPEDWINDOW
|
||||
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_HSCROLL | WS_VSCROLL, //WS_OVERLAPPEDWINDOW
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
|
@ -1878,8 +1947,6 @@ GuiConsoleNotifyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
if (NULL != NewWindow)
|
||||
{
|
||||
// scrollbar support
|
||||
//GuiConsoleCreateScrollBar(Console, (PGUI_CONSOLE_DATA)Console->PrivateData, NewWindow);
|
||||
SetWindowLongW(hWnd, GWL_USERDATA, GetWindowLongW(hWnd, GWL_USERDATA) + 1);
|
||||
ShowWindow(NewWindow, SW_SHOW);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue