文字をウィンドウに表示したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
長峰
記事: 32
登録日時: 7年前

文字をウィンドウに表示したい

#1

投稿記事 by 長峰 » 7年前

文字をウィンドウに表示したいです。
coutでストリームに出力するやり方を覚えたのですが、コンソール画面にしか出力できず困っています。

ウィンドウに出力するにはどういった処理が必要なのでしょうか。

また、DxLibなどで提供されている関数をcoutの様に記述することは可能でしょうか。

アバター
みけCAT
記事: 6390
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: 文字をウィンドウに表示したい

#2

投稿記事 by みけCAT » 7年前

使用したいOSは何でしょうか?
Windows APIやGTKなど、ウィンドウの出し方はいろいろあります。
長峰 さんが書きました:ウィンドウに出力するにはどういった処理が必要なのでしょうか。
大まかに言うと、ウィンドウを開く処理と、開いたウィンドウに文字を描画する処理です。
Windows APIの場合、メッセージ処理も必要になります。
長峰 さんが書きました:また、DxLibなどで提供されている関数をcoutの様に記述することは可能でしょうか。
適切なラッパを作れば可能だと思います。
「演算子のオーバーロード」を使用します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6390
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: 文字をウィンドウに表示したい

#3

投稿記事 by みけCAT » 7年前

ところで、言語はC++でいいですか?
coutというワードからの推測ですが、私が知らない物があったり、質問者が独自に定義しているかもしれないので。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

長峰
記事: 32
登録日時: 7年前

Re: 文字をウィンドウに表示したい

#4

投稿記事 by 長峰 » 7年前

返信ありがとうございます。

言語はC++でOSはWindows(7)です。
APIはよくわかりませんが今使ってるのは多分Windows 32APIです。
できれば、今後は.NET Frameworkを使っていきたいです。
みけCAT さんが書きました: 大まかに言うと、ウィンドウを開く処理と、開いたウィンドウに文字を描画する処理です。
Windows APIの場合、メッセージ処理も必要になります。
こういった関数はどこで詳しく調べられますか?
みけCAT さんが書きました: 適切なラッパを作れば可能だと思います。
「演算子のオーバーロード」を使用します。
前処理やオーバーロードは関連したクラスを作ってやるのが適切なんでしょうか?
今ひとつイメージがつかめません。

長峰
記事: 32
登録日時: 7年前

Re: 文字をウィンドウに表示したい

#5

投稿記事 by 長峰 » 7年前

書き忘れましたが、coutは既存のものを使っています。独自定義ではないです。

アバター
みけCAT
記事: 6390
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: 文字をウィンドウに表示したい

#6

投稿記事 by みけCAT » 7年前

とりあえずウィンドウを開いて文字を描画するサンプルです。

コード:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam) {
	PAINTSTRUCT ps;
	HDC hdc;
	RECT rt;
	const char* moziretu="阿澄佳奈さん";

	switch (message) {
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc,10,10,moziretu,lstrlen(moziretu));
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
	}

	return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
		LPSTR lpCmdLine,int nCmdShow) {
	MSG msg;
	WNDCLASSEX wcex={};
	HWND hWnd;

	wcex.cbSize = sizeof(WNDCLASSEX); 

	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(NULL,IDI_APPLICATION);
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszClassName	= "MOZI_HYOUZI_CLASS";

	RegisterClassEx(&wcex);

	hWnd = CreateWindow("MOZI_HYOUZI_CLASS",
		"文字を出力するよ", WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
		NULL, NULL, hInstance, NULL);

	if (!hWnd)return FALSE;

	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);

	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}
コンパイル方法の例(上のコードをmhw.cに保存)

コード:

>gcc -O2 -s -o mhw.exe mhw.c -mwindows
長峰 さんが書きました:こういった関数はどこで詳しく調べられますか?
ActiveBasicというソフトのヘルプに関数のリファレンスがついています。
「リファレンス>Win32API」というところと、「その他>(旧)ウィンドウ制御>ウィンドウメッセージ」というところです。
MSDNというのもあるらしいですが、最初はこっちのほうが手軽です。
最初のウィンドウを開くところは、C言語を始めよう!というソフトに付いていたテンプレを使いました。
長峰 さんが書きました:前処理やオーバーロードは関連したクラスを作ってやるのが適切なんでしょうか?
今ひとつイメージがつかめません。
逆にクラスを使わない実装が思いつきません。下手なことは言えなそうですが…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

長峰
記事: 32
登録日時: 7年前

Re: 文字をウィンドウに表示したい

#7

投稿記事 by 長峰 » 7年前

例を見て、DxLibのありがたみがわかった気がします。

未知の所が多いですが、ウィンドウプロシージャのWM_PAINTのところで処理を作っていく様なイメージが出来ました。

処理をうまく関数化できるよう、ちょっと気合入れてみます。

ダウンロードしたリファレンスは、いつも検索でトップに出てくるMSDNを見て苦しんでいたので非常に助かります。
これを見て理解していきたいと思います。
みけCAT さんが書きました: 逆にクラスを使わない実装が思いつきません。下手なことは言えなそうですが…
クラスで実装してみます。あと、阿澄佳奈さんは私も好きです。


件名であるウィンドウへの表示方法が分かりましたので、解決とさせて頂きます。
みけCATさん丁寧に有難うございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: 文字をウィンドウに表示したい

#8

投稿記事 by softya(ソフト屋) » 7年前

老婆心ですが、
>できれば、今後は.NET Frameworkを使っていきたいです。
マイクロソフトとしては、GUIでC++/CLI(CLR Windowフォーム)を使ってもらいたくない様なのでC#を検討された方が良いと思います。
 → VS2012から新規作成テンプレート上から消去されました。作れないわけではないですが、今後のサポートが心配です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

長峰
記事: 32
登録日時: 7年前

Re: 文字をウィンドウに表示したい

#9

投稿記事 by 長峰 » 7年前

softya(ソフト屋) さんが書きました:マイクロソフトとしては、GUIでC++/CLI(CLR Windowフォーム)を使ってもらいたくない様なのでC#を検討された方が良いと思います。
老婆心に感謝です。
どの程度までがGUIなのかよく分かりませんが、
C#にも興味がありますので、不便ということでしたら利用していきたいと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: 文字をウィンドウに表示したい

#10

投稿記事 by softya(ソフト屋) » 7年前

> どの程度までがGUIなのかよく分かりませんが

.NET FrameWorkを使ったウィンドウ関係全てです。
コンソールアプリやDLLの作成はC++/CLIを使ったCLRでVS2013でも続けて利用可能ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

長峰
記事: 32
登録日時: 7年前

Re: 文字をウィンドウに表示したい

#11

投稿記事 by 長峰 » 7年前

softya(ソフト屋) さんが書きました:.NET FrameWorkを使ったウィンドウ関係全てです。
コンソールアプリやDLLの作成はC++/CLIを使ったCLRでVS2013でも続けて利用可能ですね。
つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
早めに使いたかったことを考えると、残念ですが、
いい機会だということでC#もかじっていきたいと思います。

アバター
みけCAT
記事: 6390
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: 文字をウィンドウに表示したい

#12

投稿記事 by みけCAT » 7年前

長峰 さんが書きました:つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
Visual Basicでも大丈夫かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: 文字をウィンドウに表示したい

#13

投稿記事 by softya(ソフト屋) » 7年前

長峰 さんが書きました: つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
早めに使いたかったことを考えると、残念ですが、
いい機会だということでC#もかじっていきたいと思います。
新規作成のテンプレートから消えているだけなので、詳しい人ならプロジェクトを新規作成することは出来ます。
あるいはVC++2010でプロジェクトを作ってしまえば、VS2013でもメンテは可能です。
この状況からして、マイクロソフトとしては新規では作って欲しくないって言っているのと同じです。
あえて逆らっても意味は無いんじゃないでしょうか。ということでC#などをおすすめしています。

※ 書籍もVC++2012以降は.NETでのアプリ作成の本は出ていません。
VisualC++ 2012の本で出ているのはWindows8ストアアプリの本だけです。
この場合に使うのはWinRTでWindows8以降専用なのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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