Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
113 lines
3.1 KiB
C++
113 lines
3.1 KiB
C++
//------------------------------------------------------------------------------
|
|
// File: MFCDMOUtil.cpp
|
|
//
|
|
// Desc: DirectShow sample code - DMO utility functions used by MFC applications.
|
|
//
|
|
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------------------------
|
|
|
|
#include "stdafx.h"
|
|
#include <dshow.h>
|
|
#include <dmo.h>
|
|
|
|
#include "namedguid.h"
|
|
#include "mfcdmoutil.h"
|
|
#include "mfcutil.h"
|
|
|
|
|
|
HRESULT AddDMOsToList(const GUID *clsid, CListBox& ListFilters, BOOL bIncludeKeyed)
|
|
{
|
|
HRESULT hr;
|
|
IEnumDMO *pEnum = NULL;
|
|
int nFilters=0;
|
|
DWORD dwFlags = bIncludeKeyed ? DMO_ENUMF_INCLUDE_KEYED : 0;
|
|
|
|
// Enumerate all DMOs of the selected category
|
|
hr = DMOEnum(*clsid, dwFlags, 0, NULL, 0, NULL, &pEnum);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
// Enumerate all filters using the category enumerator
|
|
hr = EnumDMOsToList(pEnum, ListFilters, nFilters);
|
|
|
|
// Now that the DMOs (if any) are enumerated and added
|
|
// to the list, go ahead and select the first one.
|
|
ListFilters.SetCurSel(0);
|
|
pEnum->Release();
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT EnumDMOsToList(IEnumDMO *pEnumCat, CListBox& ListFilters, int& nFilters)
|
|
{
|
|
HRESULT hr=S_OK;
|
|
ULONG cFetched;
|
|
WCHAR *wszName;
|
|
CLSID clsid;
|
|
|
|
// Clear the current filter list
|
|
ClearFilterListWithCLSID(ListFilters);
|
|
nFilters = 0;
|
|
|
|
// If there are no filters of a requested type, show default string
|
|
if (!pEnumCat)
|
|
{
|
|
ListFilters.AddString(TEXT("<< No entries >>"));
|
|
return S_FALSE;
|
|
}
|
|
|
|
// Enumerate all items associated with the moniker
|
|
while(pEnumCat->Next(1, &clsid, &wszName, &cFetched) == S_OK)
|
|
{
|
|
nFilters++;
|
|
CString str(wszName);
|
|
|
|
// Add filter's name and CLSID to the list box
|
|
AddFilterToListWithCLSID(str, &clsid, ListFilters);
|
|
CoTaskMemFree(wszName);
|
|
}
|
|
|
|
// If no DMOs matched the query, show a default item
|
|
if (nFilters == 0)
|
|
ListFilters.AddString(TEXT("<< No entries >>"));
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
void DisplayDMOTypeInfo(const GUID *pCLSID,
|
|
ULONG& ulNumInputsSupplied, CListBox& ListInputTypes,
|
|
ULONG& ulNumOutputsSupplied, CListBox& ListOutputTypes)
|
|
{
|
|
const int NUM_PAIRS=20;
|
|
HRESULT hr;
|
|
DMO_PARTIAL_MEDIATYPE aInputTypes[NUM_PAIRS]={0},
|
|
aOutputTypes[NUM_PAIRS]={0};
|
|
ULONG ulNumInputTypes=NUM_PAIRS, ulNumOutputTypes=NUM_PAIRS, i;
|
|
TCHAR szCLSID[128];
|
|
|
|
// Read type/subtype information
|
|
hr = DMOGetTypes(
|
|
*pCLSID,
|
|
ulNumInputTypes, &ulNumInputsSupplied, aInputTypes,
|
|
ulNumOutputTypes, &ulNumOutputsSupplied, aOutputTypes);
|
|
|
|
if (FAILED(hr))
|
|
return;
|
|
|
|
// Show input type/subtype pairs
|
|
for (i=0; i<ulNumInputsSupplied; i++)
|
|
{
|
|
GetTypeSubtypeString(szCLSID, aInputTypes[i]);
|
|
ListInputTypes.AddString(szCLSID);
|
|
}
|
|
|
|
// Show output type/subtype pairs
|
|
for (i=0; i<ulNumOutputsSupplied; i++)
|
|
{
|
|
GetTypeSubtypeString(szCLSID, aOutputTypes[i]);
|
|
ListOutputTypes.AddString(szCLSID);
|
|
}
|
|
}
|
|
|