openDecal/Native/DecalControls/ChoiceDropDown.cpp
erik d1442e3747 Initial commit: Complete open-source Decal rebuild
All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:27:56 +01:00

46 lines
No EOL
1.1 KiB
C++

// ChoiceDropDown.cpp : Implementation of cChoiceDropDown
#include "stdafx.h"
#include "DecalControls.h"
#include "ChoiceDropDown.h"
#include "Choice.h"
/////////////////////////////////////////////////////////////////////////////
// cChoiceDropDown
STDMETHODIMP cChoiceDropDown::Reformat()
{
RECT rcLayer;
m_pSite->get_Position( &rcLayer );
// Move our only child to cover the entire client
CComPtr< ILayerSite > pChild;
m_pSite->get_Child( 0, ePositionByIndex, &pChild );
if( ( rcLayer.right - rcLayer.left ) < 16 || ( rcLayer.bottom - rcLayer.top ) < 16 )
{
RECT rcClient = { 0, 0, 0, 0 };
pChild->put_Position( &rcClient );
}
else
{
RECT rcClient = { 0, 0, rcLayer.right - rcLayer.left, rcLayer.bottom - rcLayer.top };
pChild->put_Position( &rcClient );
}
return S_OK;
}
STDMETHODIMP cChoiceDropDown::PopupCancel(MouseState *pMS, VARIANT_BOOL *pbContinue)
{
// Allow clicks in the parent object
*pbContinue = ( pMS->over == m_pChoice ) ? VARIANT_TRUE : VARIANT_FALSE;
if( !( *pbContinue ) )
{
m_pChoice->m_nHotSelect = -1;
m_pChoice->setPopup( false );
}
return S_OK;
}