トップページ > 過去ログ > 記事閲覧
ダイアログでLoadGraph
名前:Cir 日時: 2010/09/11 22:57

ダイアログプロシージャ内で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にすると、ダイアログは閉じてくるようです。これは仕様でしょうか?

Page: 1 |

Re: ダイアログでLoadGraph ( No.1 )
名前:管理人 日時:2010/09/17 22:25

> SetAlwaysRunFlagをTRUEにすると、ダイアログは閉じてくるようです。これは仕様でしょうか? はい、仕様となります DXライブラリは初期状態ではDXライブラリが作成したウインドウ以外のウインドウが アクティブになっている場合に画像の読み込みや描画、入力の処理が行われた場合は DXライブラリが作成したウインドウがアクティブになるまで処理を止めるようになっています なので以前お使い頂いていたバージョンがバグっていたということになります、すみません・・・
Re: ダイアログでLoadGraph ( No.2 )
名前:Cir 日時:2010/09/22 19:22

そうでしたか。 SetAlwaysRunFlagで画像が読み込めるので、これを利用することにします。 ご対応ありがとうございました!

Page: 1 |