Files
Client/Library/dxx8/samples/Multimedia/DirectDraw/Multimon/readme.txt
LGram16 e067522598 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>
2025-11-29 16:24:34 +09:00

75 lines
3.6 KiB
Plaintext

//-----------------------------------------------------------------------------
//
// Sample Name: Multimon Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
Multimon demonstrates some of the techniques that can be used in writing
an application that takes advantage of multiple monitors.
Path
====
Source: DXSDK\Samples\Multimedia\DDraw\Multimon
Executable: DXSDK\Samples\Multimedia\DDraw\Bin
User's Guide
============
Multimon requires no user input. Press the ESC key to quit the program. Two
"sprites" (moving surfaces) are created. "Sprite 1" uses video memory
whenever possible. "Sprite 2" always uses system memory.
Programming Notes
=================
Multimon shows examples of a variety of topics:
- To use the multimonitor APIs such as GetMonitorInfo and MonitorFromRect
on Windows 95, you can include the file multimon.h. In addition, in one
of the C or C++ files, you need to #define COMPILE_MULTIMON_STUBS before
including multimon.h. This allows the multimon APIs to return reasonable
values when running on Windows 95. If your program does not need to be
compatible with Windows 95, or if you do not use any of the multimonitor
APIs, you do not need to include multimon.h or #define
COMPILE_MULTIMON_STUBS.
- When enumerating DirectDraw devices, you can use either DirectDrawEnumerate
or DirectDrawEnumerateEx. DirectDrawEnumerateEx is available on Windows 98
systems with DX5 and later, and all other systems with DX6 or later.
Because not all systems can be assumed to have DirectDrawEnumerateEx,
DirectDraw was set up so programmers had to use LoadLibrary and
GetProcAddress to check for its presence. In DX7, this restriction has
been removed, so you can call DirectDrawEnumerateEx directly in code, but
you should note that this will prevent your program from running on a system
which does not have at least DX7 installed. This sample shows how to do the
LoadLibrary/GetProcAddress technique, and how to fall back on
DirectDrawEnumerate if DirectDrawEnumerateEx is not available.
- Fullscreen, multimonitor apps need to deal with focus and device windows.
The focus window receives user input messages, and the device windows are
used to cover each screen. This program shows how to call
SetCooperativeLevel to properly create and assign these windows.
- Each screen gets its own DirectDraw interface, and DirectDrawSurfaces created
on one DD interface cannot be used by any other DD interface. So creating
graphics that span multiple monitors takes some extra work. This sample
demonstrates two techniques. For best performance, video memory surfaces
should be used. A separate video memory DirectDrawSurface must be created
on each screen. For the cases where a system memory surface is required or
desired, one must still create separate DirectDrawSurfaces for each screen,
but they can be configured to point to the same surface data memory. The
SetSurfaceDesc API can be used to accomplish this. Doing this has no
performance impact, but it avoids unnecessary consumption of system memory.
- Blt calls usually fail when they would cause data to be written outside the
borders of the destination surface. This failure can be avoided by attaching
clipper objects to the destinations. This sample shows how to create a
clipper for each screen and attach it to the front and back buffers so that
the sprite surfaces can be blitted without being manually clipped by the
application first.