mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
71 lines
1.9 KiB
C++
71 lines
1.9 KiB
C++
#include "stdafx.h"
|
|
#include "Message.h"
|
|
#include "BufferedGraphics.h"
|
|
#include "UIXTheme.h"
|
|
#include "UIXListViewHeader.h"
|
|
|
|
namespace UIX
|
|
{
|
|
UIXListViewHeader::UIXListViewHeader(HWND Handle, Forms::ListView* Parent)
|
|
: _Handle(Handle), _Parent(Parent)
|
|
{
|
|
SetWindowSubclass(Handle, &UIXListViewHeader::InternalWndProc, NULL, (DWORD_PTR)this);
|
|
}
|
|
|
|
void UIXListViewHeader::WndProc(Forms::Message& Msg)
|
|
{
|
|
// Used to allow for custom theming of the background of this control
|
|
switch (Msg.Msg)
|
|
{
|
|
case WM_ERASEBKGND:
|
|
Msg.Result = (intptr_t)1;
|
|
break;
|
|
case WM_PAINT:
|
|
{
|
|
// Paint the original items
|
|
DefWndProc(Msg);
|
|
|
|
RECT rcClient{};
|
|
RECT lastRc{};
|
|
|
|
// Get items
|
|
auto ItemCount = SendMessageA(this->_Handle, HDM_GETITEMCOUNT, NULL, NULL);
|
|
|
|
// Calculate bounds of last item
|
|
GetClientRect(this->_Handle, &rcClient);
|
|
SendMessageA(this->_Handle, HDM_GETITEMRECT, (WPARAM)ItemCount - 1, (LPARAM)&lastRc);
|
|
|
|
// We only need to render the list header if we are outside of the bounds
|
|
if (lastRc.right < rcClient.right)
|
|
{
|
|
auto Dc = GetWindowDC(this->_Handle);
|
|
{
|
|
UIXTheme::GetRenderer()->RenderControlListHeader(std::make_unique<Drawing::BufferedGraphics>((HDC)Dc, Drawing::Rectangle(lastRc.right, 0, rcClient.right - lastRc.right, lastRc.bottom)));
|
|
}
|
|
ReleaseDC(this->_Handle, Dc);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
DefWndProc(Msg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void UIXListViewHeader::DefWndProc(Forms::Message& Msg)
|
|
{
|
|
// Proxy to subclassed func
|
|
Msg.Result = DefSubclassProc((HWND)Msg.HWnd, Msg.Msg, Msg.WParam, Msg.LParam);
|
|
}
|
|
|
|
LRESULT UIXListViewHeader::InternalWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
|
|
{
|
|
// Fetch the class data
|
|
auto ControlMessage = Forms::Message(hWnd, Msg, wParam, lParam);
|
|
((UIXListViewHeader*)dwRefData)->WndProc(ControlMessage);
|
|
|
|
// Return result
|
|
return (LRESULT)ControlMessage.Result;
|
|
}
|
|
}
|