ページ 1 / 1
文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 12:47
by 長峰
文字をウィンドウに表示したいです。
coutでストリームに出力するやり方を覚えたのですが、コンソール画面にしか出力できず困っています。
ウィンドウに出力するにはどういった処理が必要なのでしょうか。
また、DxLibなどで提供されている関数をcoutの様に記述することは可能でしょうか。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 13:21
by みけCAT
使用したいOSは何でしょうか?
Windows APIやGTKなど、ウィンドウの出し方はいろいろあります。
長峰 さんが書きました:ウィンドウに出力するにはどういった処理が必要なのでしょうか。
大まかに言うと、ウィンドウを開く処理と、開いたウィンドウに文字を描画する処理です。
Windows APIの場合、メッセージ処理も必要になります。
長峰 さんが書きました:また、DxLibなどで提供されている関数をcoutの様に記述することは可能でしょうか。
適切なラッパを作れば可能だと思います。
「演算子のオーバーロード」を使用します。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 13:23
by みけCAT
ところで、言語はC++でいいですか?
coutというワードからの推測ですが、私が知らない物があったり、質問者が独自に定義しているかもしれないので。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 13:52
by 長峰
返信ありがとうございます。
言語はC++でOSはWindows(7)です。
APIはよくわかりませんが今使ってるのは多分Windows 32APIです。
できれば、今後は.NET Frameworkを使っていきたいです。
みけCAT さんが書きました:
大まかに言うと、ウィンドウを開く処理と、開いたウィンドウに文字を描画する処理です。
Windows APIの場合、メッセージ処理も必要になります。
こういった関数はどこで詳しく調べられますか?
みけCAT さんが書きました:
適切なラッパを作れば可能だと思います。
「演算子のオーバーロード」を使用します。
前処理やオーバーロードは関連したクラスを作ってやるのが適切なんでしょうか?
今ひとつイメージがつかめません。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 13:54
by 長峰
書き忘れましたが、coutは既存のものを使っています。独自定義ではないです。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 14:53
by みけCAT
とりあえずウィンドウを開いて文字を描画するサンプルです。
コード:
#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言語を始めよう!というソフトに付いていたテンプレを使いました。
長峰 さんが書きました:前処理やオーバーロードは関連したクラスを作ってやるのが適切なんでしょうか?
今ひとつイメージがつかめません。
逆にクラスを使わない実装が思いつきません。下手なことは言えなそうですが…
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 15:44
by 長峰
例を見て、DxLibのありがたみがわかった気がします。
未知の所が多いですが、ウィンドウプロシージャのWM_PAINTのところで処理を作っていく様なイメージが出来ました。
処理をうまく関数化できるよう、ちょっと気合入れてみます。
ダウンロードしたリファレンスは、いつも検索でトップに出てくるMSDNを見て苦しんでいたので非常に助かります。
これを見て理解していきたいと思います。
みけCAT さんが書きました:
逆にクラスを使わない実装が思いつきません。下手なことは言えなそうですが…
クラスで実装してみます。あと、阿澄佳奈さんは私も好きです。
件名であるウィンドウへの表示方法が分かりましたので、解決とさせて頂きます。
みけCATさん丁寧に有難うございました。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月16日(水) 20:54
by softya(ソフト屋)
老婆心ですが、
>できれば、今後は.NET Frameworkを使っていきたいです。
マイクロソフトとしては、GUIでC++/CLI(CLR Windowフォーム)を使ってもらいたくない様なのでC#を検討された方が良いと思います。
→ VS2012から新規作成テンプレート上から消去されました。作れないわけではないですが、今後のサポートが心配です。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月17日(木) 19:41
by 長峰
softya(ソフト屋) さんが書きました:マイクロソフトとしては、GUIでC++/CLI(CLR Windowフォーム)を使ってもらいたくない様なのでC#を検討された方が良いと思います。
老婆心に感謝です。
どの程度までがGUIなのかよく分かりませんが、
C#にも興味がありますので、不便ということでしたら利用していきたいと思います。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月17日(木) 20:32
by softya(ソフト屋)
> どの程度までがGUIなのかよく分かりませんが
.NET FrameWorkを使ったウィンドウ関係全てです。
コンソールアプリやDLLの作成はC++/CLIを使ったCLRでVS2013でも続けて利用可能ですね。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月17日(木) 23:05
by 長峰
softya(ソフト屋) さんが書きました:.NET FrameWorkを使ったウィンドウ関係全てです。
コンソールアプリやDLLの作成はC++/CLIを使ったCLRでVS2013でも続けて利用可能ですね。
つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
早めに使いたかったことを考えると、残念ですが、
いい機会だということでC#もかじっていきたいと思います。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月17日(木) 23:07
by みけCAT
長峰 さんが書きました:つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
Visual Basicでも大丈夫かもしれません。
Re: 文字をウィンドウに表示したい
Posted: 2013年10月17日(木) 23:17
by softya(ソフト屋)
長峰 さんが書きました:
つまり、最新版でウィンドウを使う以上は、C#が必須ということですか。
早めに使いたかったことを考えると、残念ですが、
いい機会だということでC#もかじっていきたいと思います。
新規作成のテンプレートから消えているだけなので、詳しい人ならプロジェクトを新規作成することは出来ます。
あるいはVC++2010でプロジェクトを作ってしまえば、VS2013でもメンテは可能です。
この状況からして、マイクロソフトとしては新規では作って欲しくないって言っているのと同じです。
あえて逆らっても意味は無いんじゃないでしょうか。ということでC#などをおすすめしています。
※ 書籍もVC++2012以降は.NETでのアプリ作成の本は出ていません。
VisualC++ 2012の本で出ているのはWindows8ストアアプリの本だけです。
この場合に使うのはWinRTでWindows8以降専用なのです。