Initial commit: ROW Client source code
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>
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// SysEnum.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#if !defined(AFX_STDAFX_H__64C3B12B_EC0A_42DB_A8C9_DD2F30047836__INCLUDED_)
|
||||
#define AFX_STDAFX_H__64C3B12B_EC0A_42DB_A8C9_DD2F30047836__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
|
||||
|
||||
#include <afxwin.h> // MFC core and standard components
|
||||
#include <afxext.h> // MFC extensions
|
||||
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
|
||||
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||||
#include <afxcmn.h> // MFC support for Windows Common Controls
|
||||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_STDAFX_H__64C3B12B_EC0A_42DB_A8C9_DD2F30047836__INCLUDED_)
|
||||
@@ -0,0 +1,74 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: SysEnum.cpp
|
||||
//
|
||||
// Desc: DirectShow sample code - an MFC based application for device
|
||||
// enumeration.
|
||||
//
|
||||
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "SysEnum.h"
|
||||
#include "SysEnumDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumApp
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSysEnumApp, CWinApp)
|
||||
//{{AFX_MSG_MAP(CSysEnumApp)
|
||||
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||
// DO NOT EDIT what you see in these blocks of generated code!
|
||||
//}}AFX_MSG
|
||||
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumApp construction
|
||||
|
||||
CSysEnumApp::CSysEnumApp()
|
||||
{
|
||||
// TODO: add construction code here,
|
||||
// Place all significant initialization in InitInstance
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// The one and only CSysEnumApp object
|
||||
|
||||
CSysEnumApp theApp;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumApp initialization
|
||||
|
||||
BOOL CSysEnumApp::InitInstance()
|
||||
{
|
||||
// Standard initialization
|
||||
// If you are not using these features and wish to reduce the size
|
||||
// of your final executable, you should remove from the following
|
||||
// the specific initialization routines you do not need.
|
||||
|
||||
#ifdef _AFXDLL
|
||||
// In MFC 5.0, Enable3dControls and Enable3dControlsStatic are obsolete because
|
||||
// their functionality is incorporated into Microsoft's 32-bit operating systems.
|
||||
#if (_MSC_VER <= 1200)
|
||||
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||||
#endif
|
||||
#else
|
||||
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||||
#endif
|
||||
|
||||
CSysEnumDlg dlg;
|
||||
m_pMainWnd = &dlg;
|
||||
|
||||
dlg.DoModal();
|
||||
|
||||
// Since the dialog has been closed, return FALSE so that we exit the
|
||||
// application, rather than start the application's message pump.
|
||||
return FALSE;
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
# Microsoft Developer Studio Project File - Name="SysEnum" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=SysEnum - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "SysEnum.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "SysEnum.mak" CFG="SysEnum - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "SysEnum - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "SysEnum - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "SysEnum - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 6
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 6
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" /d "WIN32"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
|
||||
# ADD LINK32 strmiids.lib /nologo /subsystem:windows /machine:I386 /stack:0x200000,0x200000
|
||||
|
||||
!ELSEIF "$(CFG)" == "SysEnum - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 6
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 6
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /Gi /GX /Zi /Od /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" /d "WIN32"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 strmiids.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /stack:0x200000,0x200000
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "SysEnum - Win32 Release"
|
||||
# Name "SysEnum - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\StdAfx.cpp
|
||||
# ADD CPP /Yc"stdafx.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SysEnum.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SysEnum.rc
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SysEnumDlg.cpp
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\Resource.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\StdAfx.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SysEnum.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\SysEnumDlg.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\res\SysEnum.ico
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\res\SysEnum.rc2
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ReadMe.txt
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
@@ -0,0 +1,29 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "SysEnum"=.\SysEnum.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: SysEnum.h
|
||||
//
|
||||
// Desc: DirectShow sample code - main header file for the SysEnum application.
|
||||
//
|
||||
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#if !defined(AFX_SYSENUM_H__19FC7D3C_E963_41C9_AA3F_1330728D4F41__INCLUDED_)
|
||||
#define AFX_SYSENUM_H__19FC7D3C_E963_41C9_AA3F_1330728D4F41__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#ifndef __AFXWIN_H__
|
||||
#error include 'stdafx.h' before including this file for PCH
|
||||
#endif
|
||||
|
||||
#include "resource.h" // main symbols
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumApp:
|
||||
// See SysEnum.cpp for the implementation of this class
|
||||
//
|
||||
|
||||
class CSysEnumApp : public CWinApp
|
||||
{
|
||||
public:
|
||||
CSysEnumApp();
|
||||
|
||||
// Overrides
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CSysEnumApp)
|
||||
public:
|
||||
virtual BOOL InitInstance();
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
|
||||
//{{AFX_MSG(CSysEnumApp)
|
||||
// NOTE - the ClassWizard will add and remove member functions here.
|
||||
// DO NOT EDIT what you see in these blocks of generated code !
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_SYSENUM_H__19FC7D3C_E963_41C9_AA3F_1330728D4F41__INCLUDED_)
|
||||
@@ -0,0 +1,240 @@
|
||||
# Microsoft Developer Studio Generated NMAKE File, Based on SysEnum.dsp
|
||||
!IF "$(CFG)" == ""
|
||||
CFG=SysEnum - Win32 Debug
|
||||
!MESSAGE No configuration specified. Defaulting to SysEnum - Win32 Debug.
|
||||
!ENDIF
|
||||
|
||||
!IF "$(CFG)" != "SysEnum - Win32 Release" && "$(CFG)" != "SysEnum - Win32 Debug"
|
||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "SysEnum.mak" CFG="SysEnum - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "SysEnum - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "SysEnum - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
!ERROR An invalid configuration is specified.
|
||||
!ENDIF
|
||||
|
||||
!IF "$(OS)" == "Windows_NT"
|
||||
NULL=
|
||||
!ELSE
|
||||
NULL=nul
|
||||
!ENDIF
|
||||
|
||||
!IF "$(CFG)" == "SysEnum - Win32 Release"
|
||||
|
||||
OUTDIR=.\Release
|
||||
INTDIR=.\Release
|
||||
# Begin Custom Macros
|
||||
OutDir=.\Release
|
||||
# End Custom Macros
|
||||
|
||||
ALL : "$(OUTDIR)\SysEnum.exe"
|
||||
|
||||
|
||||
CLEAN :
|
||||
-@erase "$(INTDIR)\StdAfx.obj"
|
||||
-@erase "$(INTDIR)\SysEnum.obj"
|
||||
-@erase "$(INTDIR)\SysEnum.pch"
|
||||
-@erase "$(INTDIR)\SysEnum.res"
|
||||
-@erase "$(INTDIR)\SysEnumDlg.obj"
|
||||
-@erase "$(INTDIR)\vc60.idb"
|
||||
-@erase "$(OUTDIR)\SysEnum.exe"
|
||||
|
||||
"$(OUTDIR)" :
|
||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\SysEnum.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
||||
|
||||
.c{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cpp{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cxx{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.c{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cpp{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cxx{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
MTL=midl.exe
|
||||
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
RSC=rc.exe
|
||||
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\SysEnum.res" /d "NDEBUG" /d "_AFXDLL"
|
||||
BSC32=bscmake.exe
|
||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\SysEnum.bsc"
|
||||
BSC32_SBRS= \
|
||||
|
||||
LINK32=link.exe
|
||||
LINK32_FLAGS=strmiids.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\SysEnum.pdb" /machine:I386 /out:"$(OUTDIR)\SysEnum.exe" /stack:0x200000,0x200000
|
||||
LINK32_OBJS= \
|
||||
"$(INTDIR)\StdAfx.obj" \
|
||||
"$(INTDIR)\SysEnum.obj" \
|
||||
"$(INTDIR)\SysEnumDlg.obj" \
|
||||
"$(INTDIR)\SysEnum.res"
|
||||
|
||||
"$(OUTDIR)\SysEnum.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||
$(LINK32) @<<
|
||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||
<<
|
||||
|
||||
!ELSEIF "$(CFG)" == "SysEnum - Win32 Debug"
|
||||
|
||||
OUTDIR=.\Debug
|
||||
INTDIR=.\Debug
|
||||
# Begin Custom Macros
|
||||
OutDir=.\Debug
|
||||
# End Custom Macros
|
||||
|
||||
ALL : "$(OUTDIR)\SysEnum.exe"
|
||||
|
||||
|
||||
CLEAN :
|
||||
-@erase "$(INTDIR)\StdAfx.obj"
|
||||
-@erase "$(INTDIR)\SysEnum.obj"
|
||||
-@erase "$(INTDIR)\SysEnum.pch"
|
||||
-@erase "$(INTDIR)\SysEnum.res"
|
||||
-@erase "$(INTDIR)\SysEnumDlg.obj"
|
||||
-@erase "$(INTDIR)\vc60.idb"
|
||||
-@erase "$(INTDIR)\vc60.pdb"
|
||||
-@erase "$(OUTDIR)\SysEnum.exe"
|
||||
-@erase "$(OUTDIR)\SysEnum.ilk"
|
||||
-@erase "$(OUTDIR)\SysEnum.pdb"
|
||||
|
||||
"$(OUTDIR)" :
|
||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_PROJ=/nologo /MDd /W3 /Gm /Gi /GX /Zi /Od /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\SysEnum.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
||||
|
||||
.c{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cpp{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cxx{$(INTDIR)}.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.c{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cpp{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
.cxx{$(INTDIR)}.sbr::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
||||
MTL=midl.exe
|
||||
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
RSC=rc.exe
|
||||
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\SysEnum.res" /d "_DEBUG" /d "_AFXDLL"
|
||||
BSC32=bscmake.exe
|
||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\SysEnum.bsc"
|
||||
BSC32_SBRS= \
|
||||
|
||||
LINK32=link.exe
|
||||
LINK32_FLAGS=strmiids.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\SysEnum.pdb" /debug /machine:I386 /out:"$(OUTDIR)\SysEnum.exe" /pdbtype:sept /stack:0x200000,0x200000
|
||||
LINK32_OBJS= \
|
||||
"$(INTDIR)\StdAfx.obj" \
|
||||
"$(INTDIR)\SysEnum.obj" \
|
||||
"$(INTDIR)\SysEnumDlg.obj" \
|
||||
"$(INTDIR)\SysEnum.res"
|
||||
|
||||
"$(OUTDIR)\SysEnum.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||
$(LINK32) @<<
|
||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||
<<
|
||||
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
||||
!IF EXISTS("SysEnum.dep")
|
||||
!INCLUDE "SysEnum.dep"
|
||||
!ELSE
|
||||
!MESSAGE Warning: cannot find "SysEnum.dep"
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IF "$(CFG)" == "SysEnum - Win32 Release" || "$(CFG)" == "SysEnum - Win32 Debug"
|
||||
SOURCE=.\StdAfx.cpp
|
||||
|
||||
!IF "$(CFG)" == "SysEnum - Win32 Release"
|
||||
|
||||
CPP_SWITCHES=/nologo /MD /W3 /GX /O2 /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\SysEnum.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
||||
|
||||
"$(INTDIR)\StdAfx.obj" "$(INTDIR)\SysEnum.pch" : $(SOURCE) "$(INTDIR)"
|
||||
$(CPP) @<<
|
||||
$(CPP_SWITCHES) $(SOURCE)
|
||||
<<
|
||||
|
||||
|
||||
!ELSEIF "$(CFG)" == "SysEnum - Win32 Debug"
|
||||
|
||||
CPP_SWITCHES=/nologo /MDd /W3 /Gm /Gi /GX /Zi /Od /I "..\..\BaseClasses" /I "..\..\..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\SysEnum.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
||||
|
||||
"$(INTDIR)\StdAfx.obj" "$(INTDIR)\SysEnum.pch" : $(SOURCE) "$(INTDIR)"
|
||||
$(CPP) @<<
|
||||
$(CPP_SWITCHES) $(SOURCE)
|
||||
<<
|
||||
|
||||
|
||||
!ENDIF
|
||||
|
||||
SOURCE=.\SysEnum.cpp
|
||||
|
||||
"$(INTDIR)\SysEnum.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\SysEnum.pch"
|
||||
|
||||
|
||||
SOURCE=.\SysEnum.rc
|
||||
|
||||
"$(INTDIR)\SysEnum.res" : $(SOURCE) "$(INTDIR)"
|
||||
$(RSC) $(RSC_PROJ) $(SOURCE)
|
||||
|
||||
|
||||
SOURCE=.\SysEnumDlg.cpp
|
||||
|
||||
"$(INTDIR)\SysEnumDlg.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\SysEnum.pch"
|
||||
|
||||
|
||||
|
||||
!ENDIF
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
|
||||
"#define _AFX_NO_OLE_RESOURCES\r\n"
|
||||
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
|
||||
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
|
||||
"\r\n"
|
||||
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
|
||||
"#ifdef _WIN32\r\n"
|
||||
"LANGUAGE 9, 1\r\n"
|
||||
"#pragma code_page(1252)\r\n"
|
||||
"#endif //_WIN32\r\n"
|
||||
"#include ""res\\SysEnum.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
|
||||
"#include ""afxres.rc"" // Standard components\r\n"
|
||||
"#endif\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDR_MAINFRAME ICON DISCARDABLE "res\\SysEnum.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 73
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "About SysEnum"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
ICON IDR_MAINFRAME,IDC_STATIC,11,17,21,20
|
||||
LTEXT "SysEnum Version 8.1",IDC_STATIC,40,10,119,8,SS_NOPREFIX
|
||||
LTEXT "Copyright (c) 2000-2001 Microsoft Corporation",IDC_STATIC,40,
|
||||
25,188,8
|
||||
DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP
|
||||
LTEXT "This sample enumerates DirectShow filters by category, using the System Device Enumerator interface.",
|
||||
IDC_STATIC,42,39,186,27
|
||||
END
|
||||
|
||||
IDD_SYSENUM_DIALOG DIALOGEX 0, 0, 350, 210
|
||||
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_APPWINDOW
|
||||
CAPTION "DirectShow Filter Enumerator Sample"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LISTBOX IDC_LIST_DEVICES,7,21,158,152,LBS_SORT |
|
||||
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
|
||||
WS_TABSTOP
|
||||
CTEXT "System Device Classes",IDC_STATIC_CLASSES,7,8,158,8
|
||||
LISTBOX IDC_LIST_FILTERS,174,21,169,164,LBS_SORT |
|
||||
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL |
|
||||
WS_TABSTOP
|
||||
CTEXT "Registered Filters",IDC_STATIC_FILTERS,174,8,169,8
|
||||
CONTROL "&Show All Filter Categories",IDC_CHECK_SHOWALL,"Button",
|
||||
BS_AUTOCHECKBOX | WS_TABSTOP,7,177,103,10
|
||||
LTEXT "",IDC_STATIC_FILENAME,44,191,299,8
|
||||
LTEXT "Filename: ",IDC_STATIC,7,191,32,8
|
||||
END
|
||||
|
||||
|
||||
#ifndef _MAC
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 8,1,0,0
|
||||
PRODUCTVERSION 8,1,0,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
VALUE "Comments", "DirectShow Sample\0"
|
||||
VALUE "CompanyName", "Microsoft\0"
|
||||
VALUE "FileDescription", "SysEnum MFC Application\0"
|
||||
VALUE "FileVersion", "8.10\0"
|
||||
VALUE "InternalName", "SysEnum\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) 2000-2001 Microsoft Corporation\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "OriginalFilename", "SysEnum.EXE\0"
|
||||
VALUE "ProductName", "DirectX 8 SDK\0"
|
||||
VALUE "ProductVersion", "8.1\0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // !_MAC
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO DISCARDABLE
|
||||
BEGIN
|
||||
IDD_ABOUTBOX, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 228
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 66
|
||||
END
|
||||
|
||||
IDD_SYSENUM_DIALOG, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 343
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 203
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_ABOUTBOX "&About SysEnum..."
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
#define _AFX_NO_SPLITTER_RESOURCES
|
||||
#define _AFX_NO_OLE_RESOURCES
|
||||
#define _AFX_NO_TRACKER_RESOURCES
|
||||
#define _AFX_NO_PROPERTY_RESOURCES
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE 9, 1
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
#include "res\SysEnum.rc2" // non-Microsoft Visual C++ edited resources
|
||||
#include "afxres.rc" // Standard components
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
@@ -0,0 +1,654 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: SysEnumDlg.cpp
|
||||
//
|
||||
// Desc: DirectShow sample code - implementation of dialog for device
|
||||
// enumeration.
|
||||
//
|
||||
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <atlbase.h>
|
||||
#include "SysEnum.h"
|
||||
#include "SysEnumDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CAboutDlg dialog used for App About
|
||||
|
||||
class CAboutDlg : public CDialog
|
||||
{
|
||||
public:
|
||||
CAboutDlg();
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(CAboutDlg)
|
||||
enum { IDD = IDD_ABOUTBOX };
|
||||
//}}AFX_DATA
|
||||
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CAboutDlg)
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
protected:
|
||||
//{{AFX_MSG(CAboutDlg)
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CAboutDlg)
|
||||
//}}AFX_DATA_INIT
|
||||
}
|
||||
|
||||
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CAboutDlg)
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(CAboutDlg)
|
||||
// No message handlers
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumDlg dialog
|
||||
|
||||
CSysEnumDlg::CSysEnumDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CSysEnumDlg::IDD, pParent)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CSysEnumDlg)
|
||||
m_bShowAllCategories = FALSE;
|
||||
//}}AFX_DATA_INIT
|
||||
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
|
||||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||||
}
|
||||
|
||||
void CSysEnumDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CSysEnumDlg)
|
||||
DDX_Control(pDX, IDC_STATIC_FILENAME, m_StrFilename);
|
||||
DDX_Control(pDX, IDC_STATIC_FILTERS, m_StrFilters);
|
||||
DDX_Control(pDX, IDC_STATIC_CLASSES, m_StrClasses);
|
||||
DDX_Control(pDX, IDC_LIST_FILTERS, m_FilterList);
|
||||
DDX_Control(pDX, IDC_LIST_DEVICES, m_DeviceList);
|
||||
DDX_Check(pDX, IDC_CHECK_SHOWALL, m_bShowAllCategories);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSysEnumDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(CSysEnumDlg)
|
||||
ON_WM_SYSCOMMAND()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_QUERYDRAGICON()
|
||||
ON_LBN_SELCHANGE(IDC_LIST_DEVICES, OnSelchangeListDevices)
|
||||
ON_WM_CLOSE()
|
||||
ON_BN_CLICKED(IDC_CHECK_SHOWALL, OnCheckShowall)
|
||||
ON_LBN_SELCHANGE(IDC_LIST_FILTERS, OnSelchangeListFilters)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumDlg message handlers
|
||||
|
||||
void CSysEnumDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
{
|
||||
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
||||
{
|
||||
CAboutDlg dlgAbout;
|
||||
dlgAbout.DoModal();
|
||||
}
|
||||
else
|
||||
{
|
||||
CDialog::OnSysCommand(nID, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If you add a minimize button to your dialog, you will need the code below
|
||||
// to draw the icon. For MFC applications using the document/view model,
|
||||
// this is automatically done for you by the framework.
|
||||
|
||||
void CSysEnumDlg::OnPaint()
|
||||
{
|
||||
if (IsIconic())
|
||||
{
|
||||
CPaintDC dc(this); // device context for painting
|
||||
|
||||
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
|
||||
|
||||
// Center icon in client rectangle
|
||||
int cxIcon = GetSystemMetrics(SM_CXICON);
|
||||
int cyIcon = GetSystemMetrics(SM_CYICON);
|
||||
CRect rect;
|
||||
GetClientRect(&rect);
|
||||
int x = (rect.Width() - cxIcon + 1) / 2;
|
||||
int y = (rect.Height() - cyIcon + 1) / 2;
|
||||
|
||||
// Draw the icon
|
||||
dc.DrawIcon(x, y, m_hIcon);
|
||||
}
|
||||
else
|
||||
{
|
||||
CDialog::OnPaint();
|
||||
}
|
||||
}
|
||||
|
||||
// The system calls this to obtain the cursor to display while the user drags
|
||||
// the minimized window.
|
||||
HCURSOR CSysEnumDlg::OnQueryDragIcon()
|
||||
{
|
||||
return (HCURSOR) m_hIcon;
|
||||
}
|
||||
|
||||
|
||||
BOOL CSysEnumDlg::OnInitDialog()
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
// Add "About..." menu item to system menu.
|
||||
|
||||
// IDM_ABOUTBOX must be in the system command range.
|
||||
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
||||
ASSERT(IDM_ABOUTBOX < 0xF000);
|
||||
|
||||
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
||||
if (pSysMenu != NULL)
|
||||
{
|
||||
CString strAboutMenu;
|
||||
strAboutMenu.LoadString(IDS_ABOUTBOX);
|
||||
if (!strAboutMenu.IsEmpty())
|
||||
{
|
||||
pSysMenu->AppendMenu(MF_SEPARATOR);
|
||||
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the icon for this dialog. The framework does this automatically
|
||||
// when the application's main window is not a dialog
|
||||
SetIcon(m_hIcon, TRUE); // Set big icon
|
||||
SetIcon(m_hIcon, FALSE); // Set small icon
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DirectShow-specific initialization code
|
||||
|
||||
CoInitialize(NULL);
|
||||
|
||||
// Instantiate the system device enumerator
|
||||
m_pSysDevEnum = NULL;
|
||||
|
||||
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
|
||||
CLSCTX_INPROC, IID_ICreateDevEnum,
|
||||
(void **)&m_pSysDevEnum);
|
||||
if FAILED(hr)
|
||||
{
|
||||
CoUninitialize();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// By default, only enumerate subset of categories listed in docs
|
||||
m_bShowAllCategories = FALSE;
|
||||
FillCategoryList();
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::OnCheckShowall()
|
||||
{
|
||||
// Toggle category type and redraw the category list
|
||||
m_bShowAllCategories ^= 1;
|
||||
FillCategoryList();
|
||||
SetNumFilters(0);
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::FillCategoryList(void)
|
||||
{
|
||||
// Clear listboxes
|
||||
ClearDeviceList();
|
||||
ClearFilterList();
|
||||
|
||||
if (m_bShowAllCategories)
|
||||
{
|
||||
// Emulate the behavior of GraphEdit by enumerating all
|
||||
// categories in the system
|
||||
DisplayFullCategorySet();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fill the category list box with the categories to display,
|
||||
// using the names stored in the CATEGORY_INFO array.
|
||||
// SysEnumDlg.H for a category description.
|
||||
for (int i=0; i < NUM_CATEGORIES; i++)
|
||||
{
|
||||
m_DeviceList.AddString(categories[i].szName);
|
||||
}
|
||||
|
||||
// Update listbox title with number of classes
|
||||
SetNumClasses(NUM_CATEGORIES);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::SetNumClasses(int nClasses)
|
||||
{
|
||||
TCHAR szClasses[64];
|
||||
|
||||
wsprintf(szClasses, TEXT("%s (%d found)\0"), STR_CLASSES, nClasses);
|
||||
m_StrClasses.SetWindowText(szClasses);
|
||||
}
|
||||
|
||||
void CSysEnumDlg::SetNumFilters(int nFilters)
|
||||
{
|
||||
TCHAR szFilters[64];
|
||||
|
||||
if (nFilters)
|
||||
wsprintf(szFilters, TEXT("%s (%d found)\0"), STR_FILTERS, nFilters);
|
||||
else
|
||||
wsprintf(szFilters, TEXT("%s\0"), STR_FILTERS);
|
||||
|
||||
m_StrFilters.SetWindowText(szFilters);
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::DisplayFullCategorySet(void)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
|
||||
HRESULT hr;
|
||||
IEnumMoniker *pEmCat = 0;
|
||||
ICreateDevEnum *pCreateDevEnum = NULL;
|
||||
int nClasses=0;
|
||||
|
||||
// Create an enumerator
|
||||
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
|
||||
IID_ICreateDevEnum, (void**)&pCreateDevEnum);
|
||||
ASSERT(SUCCEEDED(hr));
|
||||
if (FAILED(hr))
|
||||
return;
|
||||
|
||||
// Use the meta-category that contains a list of all categories.
|
||||
// This emulates the behavior of GraphEdit.
|
||||
hr = pCreateDevEnum->CreateClassEnumerator(
|
||||
CLSID_ActiveMovieCategories, &pEmCat, 0);
|
||||
ASSERT(SUCCEEDED(hr));
|
||||
|
||||
if(hr == S_OK)
|
||||
{
|
||||
IMoniker *pMCat;
|
||||
ULONG cFetched;
|
||||
|
||||
// Enumerate over every category
|
||||
while(hr = pEmCat->Next(1, &pMCat, &cFetched),
|
||||
hr == S_OK)
|
||||
{
|
||||
IPropertyBag *pPropBag;
|
||||
|
||||
// Associate moniker with a file
|
||||
hr = pMCat->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
VARIANT varCatClsid;
|
||||
varCatClsid.vt = VT_BSTR;
|
||||
|
||||
// Read CLSID string from property bag
|
||||
hr = pPropBag->Read(L"CLSID", &varCatClsid, 0);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
CLSID clsidCat;
|
||||
|
||||
if(CLSIDFromString(varCatClsid.bstrVal, &clsidCat) == S_OK)
|
||||
{
|
||||
// Use the guid if we can't get the name
|
||||
WCHAR *wszCatName;
|
||||
TCHAR szCatDesc[MAX_PATH];
|
||||
|
||||
VARIANT varCatName;
|
||||
varCatName.vt = VT_BSTR;
|
||||
|
||||
// Read filter name
|
||||
hr = pPropBag->Read(L"FriendlyName", &varCatName, 0);
|
||||
if(SUCCEEDED(hr))
|
||||
wszCatName = varCatName.bstrVal;
|
||||
else
|
||||
wszCatName = varCatClsid.bstrVal;
|
||||
|
||||
#ifndef UNICODE
|
||||
WideCharToMultiByte(
|
||||
CP_ACP, 0, wszCatName, -1,
|
||||
szCatDesc, sizeof(szCatDesc), 0, 0);
|
||||
#else
|
||||
lstrcpy(szCatDesc, W2T(wszCatName));
|
||||
#endif
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
SysFreeString(varCatName.bstrVal);
|
||||
|
||||
// Add category name and CLSID to list box
|
||||
AddFilterCategory(szCatDesc, &clsidCat);
|
||||
nClasses++;
|
||||
}
|
||||
|
||||
SysFreeString(varCatClsid.bstrVal);
|
||||
}
|
||||
|
||||
pPropBag->Release();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
pMCat->Release();
|
||||
} // for loop
|
||||
|
||||
pEmCat->Release();
|
||||
}
|
||||
|
||||
pCreateDevEnum->Release();
|
||||
|
||||
// Update listbox title with number of classes
|
||||
SetNumClasses(nClasses);
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::AddFilterCategory(
|
||||
const TCHAR *szCatDesc,
|
||||
const GUID *pCatGuid)
|
||||
{
|
||||
// Allocate a new CLSID, whose pointer will be stored in
|
||||
// the listbox. When the listbox is cleared, these will be deleted.
|
||||
CLSID *pclsid = new CLSID;
|
||||
if (pclsid)
|
||||
*pclsid = *pCatGuid;
|
||||
|
||||
// Add the category name and a pointer to its CLSID to the list box
|
||||
int nSuccess = m_DeviceList.AddString(szCatDesc);
|
||||
int nIndexNew = m_DeviceList.FindStringExact(-1, szCatDesc);
|
||||
nSuccess = m_DeviceList.SetItemDataPtr(nIndexNew, pclsid);
|
||||
}
|
||||
|
||||
void CSysEnumDlg::AddFilter(
|
||||
const TCHAR *szFilterName,
|
||||
const GUID *pCatGuid)
|
||||
{
|
||||
// Allocate a new CLSID, whose pointer will be stored in
|
||||
// the listbox. When the listbox is cleared, these will be deleted.
|
||||
CLSID *pclsid = new CLSID;
|
||||
if (pclsid)
|
||||
*pclsid = *pCatGuid;
|
||||
|
||||
// Add the category name and a pointer to its CLSID to the list box
|
||||
int nSuccess = m_FilterList.AddString(szFilterName);
|
||||
int nIndexNew = m_FilterList.FindStringExact(-1, szFilterName);
|
||||
nSuccess = m_FilterList.SetItemDataPtr(nIndexNew, pclsid);
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::ClearDeviceList(void)
|
||||
{
|
||||
CLSID *pStoredId = NULL;
|
||||
|
||||
int nCount = m_DeviceList.GetCount();
|
||||
|
||||
// Delete any CLSID pointers that were stored in the listbox item data
|
||||
for (int i=0; i < nCount; i++)
|
||||
{
|
||||
pStoredId = (CLSID *) m_DeviceList.GetItemDataPtr(i);
|
||||
if (pStoredId != 0)
|
||||
{
|
||||
delete pStoredId;
|
||||
pStoredId = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up
|
||||
m_DeviceList.ResetContent();
|
||||
SetNumClasses(0);
|
||||
}
|
||||
|
||||
void CSysEnumDlg::ClearFilterList(void)
|
||||
{
|
||||
CLSID *pStoredId = NULL;
|
||||
|
||||
int nCount = m_FilterList.GetCount();
|
||||
|
||||
// Delete any CLSID pointers that were stored in the listbox item data
|
||||
for (int i=0; i < nCount; i++)
|
||||
{
|
||||
pStoredId = (CLSID *) m_FilterList.GetItemDataPtr(i);
|
||||
if (pStoredId != 0)
|
||||
{
|
||||
delete pStoredId;
|
||||
pStoredId = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up
|
||||
m_FilterList.ResetContent();
|
||||
SetNumFilters(0);
|
||||
m_StrFilename.SetWindowText(TEXT("<No filter selected>"));
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::OnSelchangeListDevices()
|
||||
{
|
||||
HRESULT hr;
|
||||
IEnumMoniker *pEnumCat = NULL;
|
||||
|
||||
// Get the currently selected category name
|
||||
int nItem = m_DeviceList.GetCurSel();
|
||||
const CLSID *clsid;
|
||||
|
||||
if (m_bShowAllCategories)
|
||||
{
|
||||
// Read the CLSID pointer from the list box's item data
|
||||
clsid = (CLSID *) m_DeviceList.GetItemDataPtr(nItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Read the CLSID pointer from our hard-coded array of
|
||||
// documented filter categories
|
||||
clsid = categories[nItem].pclsid;
|
||||
}
|
||||
|
||||
// If the CLSID wasn't allocated earlier, then fail
|
||||
if (!clsid)
|
||||
{
|
||||
MessageBeep(0);
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// WARNING!
|
||||
//
|
||||
// Some third-party filters throw an exception (int 3) during enumeration
|
||||
// on Debug builds, often due to heap corruption in RtlFreeHeap().
|
||||
// This is not an issue on Release builds.
|
||||
//
|
||||
|
||||
// Enumerate all filters of the selected category
|
||||
hr = m_pSysDevEnum->CreateClassEnumerator(*clsid, &pEnumCat, 0);
|
||||
ASSERT(SUCCEEDED(hr));
|
||||
if FAILED(hr)
|
||||
return;
|
||||
|
||||
// Enumerate all filters using the category enumerator
|
||||
hr = EnumFilters(pEnumCat);
|
||||
|
||||
SAFE_RELEASE(pEnumCat);
|
||||
}
|
||||
|
||||
|
||||
HRESULT CSysEnumDlg::EnumFilters(IEnumMoniker *pEnumCat)
|
||||
{
|
||||
HRESULT hr=S_OK;
|
||||
IMoniker *pMoniker;
|
||||
ULONG cFetched;
|
||||
VARIANT varName={0};
|
||||
int nFilters=0;
|
||||
|
||||
// Clear the current filter list
|
||||
ClearFilterList();
|
||||
|
||||
// If there are no filters of a requested type, show default string
|
||||
if (!pEnumCat)
|
||||
{
|
||||
m_FilterList.AddString(TEXT("<< No entries >>"));
|
||||
SetNumFilters(nFilters);
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
// Enumerate all items associated with the moniker
|
||||
while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
|
||||
{
|
||||
IPropertyBag *pPropBag;
|
||||
ASSERT(pMoniker);
|
||||
|
||||
// Associate moniker with a file
|
||||
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
|
||||
(void **)&pPropBag);
|
||||
ASSERT(SUCCEEDED(hr));
|
||||
ASSERT(pPropBag);
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
// Read filter name from property bag
|
||||
varName.vt = VT_BSTR;
|
||||
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
|
||||
if (FAILED(hr))
|
||||
continue;
|
||||
|
||||
// Get filter name (converting BSTR name to a CString)
|
||||
CString str(varName.bstrVal);
|
||||
SysFreeString(varName.bstrVal);
|
||||
nFilters++;
|
||||
|
||||
// Read filter's CLSID from property bag. This CLSID string will be
|
||||
// converted to a binary CLSID and passed to AddFilter(), which will
|
||||
// add the filter's name to the listbox and its CLSID to the listbox
|
||||
// item's DataPtr item. When the user clicks on a filter name in
|
||||
// the listbox, we'll read the stored CLSID, convert it to a string,
|
||||
// and use it to find the filter's filename in the registry.
|
||||
VARIANT varFilterClsid;
|
||||
varFilterClsid.vt = VT_BSTR;
|
||||
|
||||
// Read CLSID string from property bag
|
||||
hr = pPropBag->Read(L"CLSID", &varFilterClsid, 0);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
CLSID clsidFilter;
|
||||
|
||||
// Add filter name and CLSID to listbox
|
||||
if(CLSIDFromString(varFilterClsid.bstrVal, &clsidFilter) == S_OK)
|
||||
{
|
||||
AddFilter(str, &clsidFilter);
|
||||
}
|
||||
|
||||
SysFreeString(varFilterClsid.bstrVal);
|
||||
}
|
||||
|
||||
// Cleanup interfaces
|
||||
SAFE_RELEASE(pPropBag);
|
||||
SAFE_RELEASE(pMoniker);
|
||||
}
|
||||
|
||||
// Update count of enumerated filters
|
||||
SetNumFilters(nFilters);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::OnSelchangeListFilters()
|
||||
{
|
||||
const CLSID *clsid;
|
||||
|
||||
// Get the currently selected category name
|
||||
int nItem = m_FilterList.GetCurSel();
|
||||
|
||||
// Read the CLSID pointer from the list box's item data
|
||||
clsid = (CLSID *) m_FilterList.GetItemDataPtr(nItem);
|
||||
|
||||
// Find the filter filename in the registry (by CLSID)
|
||||
if (clsid != 0)
|
||||
ShowFilenameByCLSID(*clsid);
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::ShowFilenameByCLSID(REFCLSID clsid)
|
||||
{
|
||||
HRESULT hr;
|
||||
LPOLESTR strCLSID;
|
||||
|
||||
// Convert binary CLSID to a readable version
|
||||
hr = StringFromCLSID(clsid, &strCLSID);
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
TCHAR szKey[512];
|
||||
CString strQuery(strCLSID);
|
||||
|
||||
// Create key name for reading filename registry
|
||||
wsprintf(szKey, TEXT("Software\\Classes\\CLSID\\%s\\InprocServer32\0"),
|
||||
strQuery);
|
||||
|
||||
// Free memory associated with strCLSID (allocated in StringFromCLSID)
|
||||
CoTaskMemFree(strCLSID);
|
||||
|
||||
HKEY hkeyFilter=0;
|
||||
DWORD dwSize=MAX_PATH;
|
||||
BYTE pbFilename[MAX_PATH];
|
||||
int rc=0;
|
||||
|
||||
// Open the CLSID key that contains information about the filter
|
||||
rc = RegOpenKey(HKEY_LOCAL_MACHINE, szKey, &hkeyFilter);
|
||||
if (rc == ERROR_SUCCESS)
|
||||
{
|
||||
rc = RegQueryValueEx(hkeyFilter, NULL, // Read (Default) value
|
||||
NULL, NULL, pbFilename, &dwSize);
|
||||
|
||||
if (rc == ERROR_SUCCESS)
|
||||
{
|
||||
TCHAR szFilename[MAX_PATH];
|
||||
wsprintf(szFilename, TEXT("%s\0"), pbFilename);
|
||||
m_StrFilename.SetWindowText(szFilename);
|
||||
}
|
||||
|
||||
rc = RegCloseKey(hkeyFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CSysEnumDlg::OnClose()
|
||||
{
|
||||
// Free any stored CLSID pointers (in listbox item data ptr area)
|
||||
ClearFilterList();
|
||||
ClearDeviceList();
|
||||
|
||||
// Release system device enumerator and close COM
|
||||
SAFE_RELEASE(m_pSysDevEnum);
|
||||
CoUninitialize();
|
||||
|
||||
CDialog::OnClose();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: SysEnumDlg.h
|
||||
//
|
||||
// Desc: DirectShow sample code - header file for device enumeration dialog.
|
||||
//
|
||||
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include <dshow.h>
|
||||
|
||||
|
||||
#if !defined(AFX_SYSENUMDLG_H__A96832BF_0309_4844_9B33_5E72285C3F3E__INCLUDED_)
|
||||
#define AFX_SYSENUMDLG_H__A96832BF_0309_4844_9B33_5E72285C3F3E__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
//
|
||||
// Macros
|
||||
//
|
||||
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
|
||||
|
||||
//
|
||||
// Global data structure for storing CLSIDs and friendly strings
|
||||
//
|
||||
typedef struct _category_info
|
||||
{
|
||||
const CLSID *pclsid;
|
||||
TCHAR szName[128];
|
||||
|
||||
} CATEGORY_INFO_DS;
|
||||
|
||||
// The DirectShow reference documentation lists a set of filter categories
|
||||
// for which you can enumerate corresponding filters. See 'Filter Categories'
|
||||
// under 'DirectShow->Reference->Constants and GUIDS' in the DirectX docs.
|
||||
const CATEGORY_INFO_DS categories[] = {
|
||||
|
||||
&CLSID_AudioInputDeviceCategory, TEXT("Audio Capture Devices"),
|
||||
&CLSID_AudioCompressorCategory, TEXT("Audio Compressors"),
|
||||
&CLSID_AudioRendererCategory, TEXT("Audio Renderers"),
|
||||
&CLSID_LegacyAmFilterCategory, TEXT("DirectShow Filters"),
|
||||
&CLSID_MidiRendererCategory, TEXT("Midi Renderers"),
|
||||
&CLSID_VideoInputDeviceCategory, TEXT("Video Capture Devices"),
|
||||
&CLSID_VideoCompressorCategory, TEXT("Video Compressors"),
|
||||
};
|
||||
|
||||
#define NUM_CATEGORIES (sizeof(categories) / sizeof(CATEGORY_INFO_DS))
|
||||
|
||||
#define STR_CLASSES TEXT("System Device Classes")
|
||||
#define STR_FILTERS TEXT("Registered Filters")
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSysEnumDlg dialog
|
||||
|
||||
class CSysEnumDlg : public CDialog
|
||||
{
|
||||
// Construction
|
||||
public:
|
||||
ICreateDevEnum * m_pSysDevEnum;
|
||||
CSysEnumDlg(CWnd* pParent = NULL); // standard constructor
|
||||
HRESULT EnumFilters(IEnumMoniker *pEnumCat);
|
||||
void FillCategoryList(void);
|
||||
void DisplayFullCategorySet(void);
|
||||
void AddFilterCategory(const TCHAR *szCatDesc, const GUID *pCatGuid);
|
||||
void AddFilter(const TCHAR *szFilterName, const GUID *pCatGuid);
|
||||
void ClearDeviceList(void);
|
||||
void ClearFilterList(void);
|
||||
void SetNumClasses(int nClasses);
|
||||
void SetNumFilters(int nFilters);
|
||||
void ShowFilenameByCLSID(REFCLSID clsid);
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(CSysEnumDlg)
|
||||
enum { IDD = IDD_SYSENUM_DIALOG };
|
||||
CStatic m_StrFilename;
|
||||
CStatic m_StrFilters;
|
||||
CStatic m_StrClasses;
|
||||
CListBox m_FilterList;
|
||||
CListBox m_DeviceList;
|
||||
BOOL m_bShowAllCategories;
|
||||
//}}AFX_DATA
|
||||
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CSysEnumDlg)
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
protected:
|
||||
HICON m_hIcon;
|
||||
|
||||
// Generated message map functions
|
||||
//{{AFX_MSG(CSysEnumDlg)
|
||||
virtual BOOL OnInitDialog();
|
||||
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
||||
afx_msg void OnPaint();
|
||||
afx_msg HCURSOR OnQueryDragIcon();
|
||||
afx_msg void OnSelchangeListDevices();
|
||||
afx_msg void OnClose();
|
||||
afx_msg void OnCheckShowall();
|
||||
afx_msg void OnSelchangeListFilters();
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_SYSENUMDLG_H__A96832BF_0309_4844_9B33_5E72285C3F3E__INCLUDED_)
|
||||
@@ -0,0 +1,18 @@
|
||||
DirectShow Sample -- SysEnum
|
||||
----------------------------
|
||||
|
||||
Demonstrates the use of the system device enumerator for enumerating devices
|
||||
and DirectShow filters installed on your system.
|
||||
|
||||
By default, the application lists several system device classes by CLSID.
|
||||
If you select "Show All Filter Categories", it will emulate the behavior of
|
||||
GraphEdit to enumerate all system device classes in the system.
|
||||
|
||||
When you select a device class, SysEnum will enumerate all installed filters
|
||||
that relate to the selected class. When you select a filter, its filename
|
||||
and disk location will be displayed.
|
||||
|
||||
|
||||
For more information, see "Enumerating Devices and Filters" in the DirectShow
|
||||
Tutorials section of the DirectX 8 SDK.
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// SYSENUM.RC2 - resources Microsoft Visual C++ does not edit directly
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#error this file is not editable by Microsoft Visual C++
|
||||
#endif //APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Add manually edited resources here...
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@@ -0,0 +1,26 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by SysEnum.rc
|
||||
//
|
||||
#define IDM_ABOUTBOX 0x0010
|
||||
#define IDD_ABOUTBOX 100
|
||||
#define IDS_ABOUTBOX 101
|
||||
#define IDD_SYSENUM_DIALOG 102
|
||||
#define IDR_MAINFRAME 128
|
||||
#define IDC_LIST_DEVICES 1000
|
||||
#define IDC_CHECK_SHOWALL 1001
|
||||
#define IDC_LIST_FILTERS 1002
|
||||
#define IDC_STATIC_CLASSES 1003
|
||||
#define IDC_STATIC_FILTERS 1004
|
||||
#define IDC_STATIC_FILENAME 1006
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 129
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
#define _APS_NEXT_CONTROL_VALUE 1005
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user