質問: 画面に絵を出す方法 やっとc言語を少し使えるようになってきました。そこで質問なのですが、画面に絵(玉など)を表示するにはどうしたらいいのでしょうか。あと、それの動かしかたなどを教えていただけないでしょうか。インターネットで探してみると、 #include main() { gl_openwin(-1, -1, 640, 480, 0); getchar(); gl_closewin(); } というソースがあったのですが、実行すると、ノーサーチファイルなどというエラーが出てきます。使っているコンパイラはlsi c-86 試食版です。コンパイラによって使えたり使えなかったりするヘッダファイルがあったりするのでしょうか。教えて下さい。
回答: ★mantis777 さんへ。 ・c 言語は始めたばかりでしたよね。 windows 環境で画面(ウインドウ)に絵(図形)を描くには c 言語を熟知した上で windows の gui(グラフィカル・ユーザ・インターフェイス)によるプログラミングを 行います。この gui はコマンドライン(cui)タイプとは全く別の概念が必要です。 つまりはウインドウ・メッセージ(wm_xxxx)を元に各イベントに対応する処理を 記述していきます。これがマルチタスク処理のプログラムです。 ・以前に簡単なじゃんけんゲームを紹介しましたがその中でゲーム・ループしていますよね。 windows の gui では単純なループを組むのは禁止です。唯一メッセージ・ループが 組める程度です。とにかく gui のウインドウに絵(図形)を描画するには c 言語を 始めたばかりの人にとっては簡単にプログラミングできるものではありません。 理由としてはポインタ、構造体、共用体などでデータを受け取ったり、渡したりを 基本として win32 api という関数が使われます。c 標準関数とはまた別の関数群です。 描画の仕組み: ・簡単に gui での図形の描画方法を紹介します。 (1)wm_paint メッセージに以下の処理を記述。 (2)ウインドウハンドルから描画するデバイスコンテキストのハンドルを取得。 (3)描画用の win32 api 関数を使って図形(点、線、円、長方形など)を描画。 (4)描画の終了を実行。 (5)wm_paint メッセージを処理したので 0 をリターンする。 上記の方法を c ソースで記述すると case wm_paint: { // 描画の開始処理 hdc hdc = beginpaint( hwnd, &ps ); // 図形の描画処理(点、線、円、長方形) setpixelv( hdc, 100, 100, rgb(255,0,0) ); // (100,100)地点に赤い点を描画 // 描画の終了処理 endpaint( hwnd, &ps ); return 0; // リターン } このような感じになります。 ここで beginpaint()、endpaint() や setpixelv() という関数が win32 api の関数です。 この関数群を利用してウインドウ(画面)に図形を描画するのが基本です。 その他: ・まずは c 言語のポインタ、構造体、共用体などを完璧に理解してから windows の プログラミングを行って下さい。この基本がないと win32 api の関数群を使えません。 ちなみに windows プログラミングのお勉強サイトを紹介します。 (1)http://www.geocities.jp/ky_webid/win32c/index.html→『win32api(c言語)編』 (2)http://wisdom.sakura.ne.jp/system/winapi/→『win32 api入門』 (3)http://www.kumei.ne.jp/c_lang/→『猫でもわかるプログラミング』 ※(3)は『windows sdk編 第1部』~『windows sdk編 第4部』を読みます。 まずは上記のサイトを読みあさって下さい。 (1)のサイトでは『第9章』~『第24章』までが描画に関わるページのようです。 ここを読む前に『第0章』~『第8章』を読んだ方が良いでしょう。 ここに書かれている内容がそこそこ理解できたならばまたアドバイスします。 ・以上。(2)で紹介されている本は分かりやすいです。購入する際は本屋でチェック。 参考url:http://www.geocities.jp/ky_webid/win32c/index.html