ダイアログプロシージャ内でLoadGraph関数を使用すると、おかしな動作をしてしまいます。
具体的には、ダイアログ上のボタンを押したときにLoadGraphを使用して画像を読み込んだ後、
EndDialog関数でダイアログを閉じるようにしたのですが、なぜかダイアログが閉じてくれません。
以前のDXライブラリのバージョン(バージョンがいくつだったかは忘れてしまいました…)では
ダイアログを閉じることは出来ていました。
開発環境はVisualStudio2008で、DXライブラリのバージョンは3.03aです。
以下は実際に試してみたソースです。
//main.cpp
#include "DxLib.h"
#include "resource.h"
#include <windowsx.h>
int handle;
LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg)
{
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wp, lp))
{
case IDOK:
handle = LoadGraph("test.bmp");
EndDialog(hWnd, IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hWnd, IDCANCEL);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hWnd, IDOK);
return TRUE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
// handle = LoadGraph("test.bmp");
DialogBox(GetTaskInstance(), MAKEINTRESOURCE(IDD_DIALOG_MAIN), GetMainWindowHandle(), (DLGPROC)DlgProc);
while(ProcessMessage() == 0)
{
ClearDrawScreen();
DrawString(0, 0, "DIALOG TEST", GetColor(255, 255, 255));
DrawGraph(100, 100, handle, TRUE);
ScreenFlip();
}
return 0;
}
//リソースファイル
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 日本語 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG_MAIN DIALOGEX 0, 0, 316, 185
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,205,164,50,14
PUSHBUTTON "キャンセル",IDCANCEL,259,164,50,14
PUSHBUTTON "Button1",IDC_BUTTON1,24,18,90,36
EDITTEXT IDC_EDIT1,24,66,114,36,ES_AUTOHSCROLL
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DIALOG_MAIN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 309
TOPMARGIN, 7
BOTTOMMARGIN, 178
END
END
#endif // APSTUDIO_INVOKED
#endif // 日本語 resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
※SetAlwaysRunFlagをTRUEにすると、ダイアログは閉じてくるようです。これは仕様でしょうか?