トップページ > 過去ログ > 記事閲覧
復帰時にDrawFormatStringがずれる
名前:カラス 日時:

以下のプログラムで起こりました 環境はWindow7です #include <DxLib.h> int snd; // sound1.wavをロードするスレッド DWORD WINAPI LoadSound1(void *param) { snd = LoadSoundMem("桜華・白章-Ouka.Hakushou- oukasiro.mp3"); return 0; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ChangeWindowMode(TRUE); // ウィンドウモードで起動 SetMultiThreadFlag(TRUE); SetAlwaysRunFlag(TRUE); if (DxLib_Init() != 0) { return -1; } SetDrawScreen(DX_SCREEN_BACK); const int white = GetColor(255, 255, 255); int grHandle = LoadGraph(_T("w.png")), x = 0, s, e, f=0, a=0, g; DWORD thread_id; // スレッドID DWORD exit_code; // 終了コード HANDLE thread_handle; // スレッドハンドル // スレッド作成 thread_handle = CreateThread(0, 0, LoadSound1, 0, 0, &thread_id); s = GetNowCount(); while (ProcessMessage() == 0 && ClearDrawScreen() == 0) { if (CheckHitKey(KEY_INPUT_ESCAPE)) { break; } // スレッドの終了コード取得 GetExitCodeThread(thread_handle, &exit_code); if (exit_code == STILL_ACTIVE) { DrawString(0, 0, "ロード中..", white); DrawExtendGraph(0, 30, x, 50, grHandle, TRUE); x++; if (CheckHitKey(KEY_INPUT_UP)) { ChangeWindowMode(FALSE); SetGraphMode(1280,720,32); g=LoadGraph(_T("imgbb4b4039a68d625.png")); } } else if (snd == -1) { DrawString(0, 0, "ロード失敗", white); } else if (!CheckSoundMem(snd)) {//CheckSoundMem(snd) if(FALSE == f){ e = GetNowCount(); f = TRUE; } DrawFormatString(0, 0, white, "ロード成功:スペースキー

Page: 1 | 2 |

2011/05/06 21:36 ( No.で再生 TIME = %d", e-s);
DrawGraph(0,30,g,TRUE);
if (CheckHitKey(KEY_INPUT_SPACE)) {
PlaySoundMem(snd, DX_PLAYTYPE_BACK);
}
} else {
DrawFormatString(0, 0, white, "再生中");
}

ScreenFlip();
WaitTimer(1);
}

DxLib_End();

return 0;
}

このプログラムでロード中に上を押してフルスクリーン化します
その状態ならAlt+Tabやウインドウズキーでフルスクリーンを解いて戻しても文字描画はずれません
ここでスペースを押して音楽を再生中にすると
復帰したときに再生中の文字列が1文字分左側にずれてしまいます

どうすればずれなく描画できるのでしょうか? )
名前:218.220.83.235 日時:   <vv.7rB6KA3INc>

Re: 復帰時にDrawFormatStringがずれる ( No.1 )
名前:いっち 日時:2011/05/07 10:22

XP SP3 ですが、私の環境では特に問題ないように見受けられました。 できればスクリーンショット等でご説明いただけますと分かりやすいです。
Re: 復帰時にDrawFormatStringがずれる ( No.2 )
名前:カラス 日時:2011/05/07 11:41

ソースを見返して最後のDrawFormatString()で書式設定をしていなかったので とりあえずDrawFormatString(0, 0, white, "再生中 %d", snd);と修正すると正常に描画されました Alt+Tabやwindowsキーを繰り返しても正常に描画されたのでこれが原因だと思います レスありがとうございました、お騒がせしてすいません
Re: 復帰時にDrawFormatStringがずれる ( No.3 )
名前:管理人 日時:2011/05/08 02:27

DrawFormatString は書式指定がない文字列でも問題なく描画することができます なので貼り付けていただいたプログラムに問題はありません ( あるとすれば g=LoadGraph をする前に DrawGraph で g を使ってしまっていることくらいでしょうか・・・ ) お使いのPCに搭載されているグラフィックスデバイスのドライバのバージョンを最新のものにすることで 直るかもしれませんが、もしかしたらライブラリのプログラムが原因かもしれませんので、 いっちさんも仰られていますがよろしければ文字描画がずれたときのスクリーンショットを いただけないでしょうか? あと、最新版のDXライブラリではでは直っている可能性もありますので、 よろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: 復帰時にDrawFormatStringがずれる ( No.4 )
名前:カラス 日時:2011/05/08 16:29

解決したと思って手元の関連物を消してしまったのでコピペ+最新適用でSSを撮ろうとしたのですが 今度は同じ手順でなくてもAlt+Tab等からフルスクリーンに復帰すると例外がでて必ず応答なしになり 撮れなくなってしまったので文章の説明で申し訳ないですが… 具体的には復帰後フルスクリーン時の再生中の文字列開始位置が1文字分程度左にずれるというだけのものです 他に変わったことといえば撮ったSSですが ずれたものをペイントに貼り付けたのにずれはなくて手作業でずらしたのを覚えています ただちょっと気になって以下のようなフルスクリーンにするだけのプログラムを作って フルスクリーンにした後Alt+Tab等で切り替えてから復帰すると何度やっても応答なしになってしまいます #include <DxLib.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); if(0 != DxLib_Init()) return -1; SetDrawScreen(DX_SCREEN_BACK); while(0 == ProcessMessage() && 0 == ClearDrawScreen()) { if(CheckHitKey(KEY_INPUT_ESCAPE)) { break; } else if(CheckHitKey(KEY_INPUT_UP)) { ChangeWindowMode(FALSE); SetGraphMode(1280, 720, 32); } DrawString(0, 0, _T("テスト"), GetColor(0xff, 0xff, 0xff)); ScreenFlip(); } DxLib_End(); return 0; }

Page: 1 | 2 |