ウィンドウに文字が表示されず消えてしまう

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ika

ウィンドウに文字が表示されず消えてしまう

#1

投稿記事 by ika » 7年前

読み込み画面風のウィンドウを表示したのち名前入力画面に進みたいのですが、入力画面に文字が表示されずウィンドウが消えてしまいます。コンパイルはうまくいっていて、下記2番目と3番目のプログラムのどちらか片方だけ起動したときはうまく動いてくれました。当方ほぼ素人なので、ソースコードにおかしい部分があるかもしませんが、よろしくお願いします。
OS : Windows
コンパイラ名 : C++
ライブラリ:Dxライブラリ

コード:

#include "DxLib.h"
#include "Load_Window.h"
#include "Naming.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	Load_Window();

	Naming();

	DxLib_End();

	return 0;
}

コード:

#pragma once 
#include "DxLib.h"
int WINAPI Load_Window()
{
	LPCSTR font_path = "LoveLetter.ttf";
	AddFontResource(font_path);
	if (AddFontResource(font_path) > 0)
	{
		PostMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
	}
	else
	{
		MessageBox(NULL, "フォント読込失敗", "", MB_OK);
	}
	SetWindowStyleMode(2);
	ChangeWindowMode(TRUE);
	SetBackgroundColor(255, 255, 255);
	SetGraphMode(400, 200, 32);
	if (DxLib_Init() != 0) return 0;
	int x = 0;
	int starttime = GetNowCount();
	while (ProcessMessage() == 0)
	{
		x = GetNowCount() - starttime;
		SetFontSize(16);
		ChangeFont("Love Letter Typewriter");
		DrawString(10, 10, "タイトル", GetColor(0, 0, 0));
		DrawBox(0, 175, x / 5, 190, GetColor(200, 200, 200), TRUE);
		if (x == 2500)
		{
			break;
		}
	}
	DxLib_End();
	return 0;
}

コード:

#pragma once
#include "DxLib.h"
#pragma warning(disable:4996)

int WINAPI Naming()
{
	ChangeWindowMode(TRUE);
	SetBackgroundColor(100, 100, 100);
	if (DxLib_Init() != 0) return 0;
	while (ProcessMessage() == 0)
	{
		char Name[31];
		DrawString(20, 170, "本名(名のみ)を入力してください。", GetColor(0, 0, 0));
		KeyInputString(40, 190, 20, Name, FALSE);
		FILE *fp = fopen("Name.dat", "wb");
		fwrite(&Name, sizeof(int), 1, fp);
		fclose(fp);
		ClearDrawScreen();
		while (ProcessMessage() == 0)
		{
			DrawString(20, 170, Name, GetColor(0, 0, 0));
			DrawString(20, 190, "でよろしいですか?", GetColor(0, 0, 0));
			DrawString(50, 250, "決定  入力しなおす", GetColor(0, 0, 0));
			int MouseX, MouseY;
			GetMousePoint(&MouseX, &MouseY);
			if (MouseX < 90 && MouseX > 50 && MouseY < 270 && MouseY > 250)
			{
				DrawString(50, 250, "決定", GetColor(50, 50, 50));
				if (GetMouseInput()& MOUSE_INPUT_LEFT)
				{
					return 0;
				}
			}
			if (MouseX < 220 && MouseX > 110 && MouseY < 270 && MouseY > 250)
			{
				DrawString(50, 250, "    入力しなおす", GetColor(50, 50, 50));
				if (GetMouseInput()& MOUSE_INPUT_LEFT)
				{
					ClearDrawScreen();
					break;
				}
			}
			
		}
	}
	DxLib_End();
	return 0;

かずま

Re: ウィンドウに文字が表示されず消えてしまう

#2

投稿記事 by かずま » 7年前

変なところがいくつかありますが、
最小限、次の変更でどうなりますか?

コード:

Load_Window() の中
 	SetBackgroundColor(100, 100, 100); に変更
 	SetGraphMode(400, 300, 32); に変更
 	DxLib_End(); を削除。

Naming() の中
 		fwrite(Name, strlen(Name) + 1, 1, fp); に変更

ika

Re: ウィンドウに文字が表示されず消えてしまう

#3

投稿記事 by ika » 7年前

返信ありがとうございます。説明が足りていなくて申し訳ないのですが、読み込み画面風のウィンドウ(400×200)が消えた後に名前入力画面のウィンドウ(640×480)が生成されるという風にしたいと思っています。かずま様の回答の通りに修正すると、ウィンドウが消えずに次の名前入力画面が表示されてしまい、うまくいきません。せっかく回答していただいたのに、申し訳ありません。

かずま

Re: ウィンドウに文字が表示されず消えてしまう

#4

投稿記事 by かずま » 7年前

DxLib_End() を実行したら、プログラムを終了するようにと
DXライブラリ 関数リファレンスページ に書かれていますので、
Load_Windows の中の DxLib_End(); は削除すべきでしょう。

次のようにするとどうでしょうか?

コード:

Load_Window() の中
 	DxLib_End(); を削除。

Naming() の中 SetBackgroundColor(255, 255, 255); の後に、
 	SetGraphMode(640, 480, 32); を追加

返信

“C言語何でも質問掲示板” へ戻る