VIPさん始めまして、DXライブラリの管理人です。
> どうにかしてウィンドウを作成しないような方法はないでしょうか?
方法が無かったので機能を追加しました。
宜しければこちらのバージョンをダウンロードしてください。m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用
(中身を既存のファイルに上書きして、BCCをお使いの場合は『再構築』、
VCをお使いの場合は『リビルド』をして下さい)
こちらのバージョンで、DxLib_Init を呼ぶ前に VIPさんの側で作成
したウインドウのハンドルを SetUserWindow という関数に渡し、さらに
SetNotWinFlag という関数に TRUE を渡すとDXライブラリでは
ウインドウの作成がされなくなり、音関連の機能と入力関連(文字入力は
対応していませんが)の機能だけ使える状態になります。
例:
HWND hWnd;
〜〜〜
hWnd に CreateWindow 等で作成したウインドウハンドルを代入
〜〜〜
SetUserWindow( hWnd ); // 作成したウインドウハンドルをセット
SetNotWinFlag( TRUE ); // ウインドウ関連の処理を行わない
if( DxLib_Init() < 0 ) return 0; // 初期化
因みにウインドウ関連の処理は全く行わないので、ウインドウの
メッセージ処理は VIPさん側のプログラムで行って頂く事になります。
サンプル:
猫でもわかるプログラミング様で公開されているウインドウを作成するサンプルプログラムに
DXライブラリを使って Test.wav の再生や入力キーの表示をしたりするようなプログラムを
書き加えました
// sample01.cpp
#include <windows.h>
#include "DxLib.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
{
int handle;
HDC hdc;
char str[256];
// ウインドウの作成
HWND hWnd;
MSG msg;
WNDCLASS myProg;
if (!hPreInst) {
myProg.style =CS_HREDRAW | CS_VREDRAW;
myProg.lpfnWndProc =WndProc;
myProg.cbClsExtra =0;
myProg.cbWndExtra =0;
myProg.hInstance =hInstance;
myProg.hIcon =NULL;
myProg.hCursor =LoadCursor(NULL, IDC_ARROW);
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
myProg.lpszMenuName =NULL;
myProg.lpszClassName =szClassNme;
if (!RegisterClass(&myProg))
return FALSE;
}
hWnd = CreateWindow(szClassNme,
"猫でもわかるプログラミング",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 作成したウインドウをセット
SetUserWindow( hWnd );
// ウインドウ関連の処理はDXライブラリでは一切行わない
SetNotWinFlag( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// Test.wav の読み込み
handle = LoadSoundMem( "Test.wav" );
// Test.wav の再生
PlaySoundMem( handle, DX_PLAYTYPE_LOOP );
// メッセージループ
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
// メッセージが来た時にジョイパッド1のボタンの押下状態を描画する
hdc = GetDC( hWnd );
sprintf( str, "%x", GetJoypadInputState( DX_INPUT_KEY_PAD1 ) );
TextOut( hdc, 0, 0, str, lstrlen( str ) );
ReleaseDC( hWnd, hdc );
}
// DXライブラリの後始末
DxLib_End();
return (msg.wParam);
}
// メッセージ処理用関数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}
不明な点等ございましたらご質問下さい。m(_ _)m