#pragma resource "hello.res" /*←BCC5.5初期版でうまくいくためのおまじない*/ #include <windows.h> int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){ MessageBox(NULL, "hello, world", "hello", MB_OK); return 0; }Windowsアプリはmain()ではなくWinMain()で始まります。PASCALと付いているのは関数の呼び出し規約です。 なお、このままコンパイルすると、ほとんどのコンパイラで「パラメータ○○は一度も使用されない」 といった趣旨の警告が出ると思いますが、PASCAL呼び出し規約では引数の型と個数が食い違っていたら 暴走したりしますので、コンソールアプリみたいにmain(void)とmain(int argc, char** argv)のどちらでも 良いというわけにはいきません。C++なら、int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int) のように引数の型情報だけを記述することで、この警告を抑えることができます。 それぞれの引数の意味は、実際に使う時に解説することにします。
MessageBox()は、Windows APIです。APIとは、他のOSではシステムコールと呼ばれているものと、 ほとんど同じ概念です。MessageBoxの第一引数には「親ウィンドウのハンドル」を渡しますが、 今回は親ウインドウが存在しないのでNULLを渡します。第二引数、第三引数は表示される文字列です。 第四引数には、そのメッセージボックスのタイプを指定するフラグを渡します。このへんの詳しいことは、 APIリファレンスを参照してください。
他に、単独で使えるAPIとして、MessageBeep()などがあります。その名の通り、音を出すのに使います。
あと、ついでにアイコンも、つけましょう。アイコンエディタでアイコンをデザインしたら、 hello.icoというファイル名で保存し、hello.rcファイル(リソーススクリプトファイル)に指定します。
#include <windows.h> helloicon ICON "HELLO.ICO"16ビットの場合、リンカへの定義ファイル(DEFファイル)も作成します。以下の内容で、hello.defというファイル名で作成します。
NAME HELLO DESCRIPTION 'HELLO: HELLO WINDOWS WORLD' EXETYPE WINDOWS STUB 'WINSTUB.EXE' CODE PRELOAD MOVEABLE DATA MOVEABLE PRELOAD MULTIPLE HEAPSIZE 4096 STACKSIZE 8192このDEFファイルは、16ビットコンパイラでは必要な場合がありますが、32ビットのコンパイラでは 無くても大丈夫な場合がほとんどです。かえって、存在するとエラーになる場合すらあるようです。
コンパイル方法は、各コンパイラによってまちまちです。
#include <windows.h> #include <stdio.h> char buf[256]; int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){ int i, j; long time, time2; double f=1, d=1; time=GetTickCount(); for (i=0; i<30000; ++i) f+=d; time2=GetTickCount(); sprintf(buf,"doubleの加算%d回 %ld ミリ秒", i, time2-time); MessageBox(NULL, buf, "ベンチマーク", MB_OK); }といった簡単なベンチマークや
#include <windows.h> #include <mmsystem.h> #include <stdio.h> char buf[256]; int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){ int s, r; s = waveOutGetNumDevs();/*再生デバイスの数*/ r = waveInGetNumDevs(); /*録音デバイスの数*/ sprintf(buf,"録音ポート=%d 再生ポート=%d",r,s); MessageBox(NULL, buf, "サウンド機能", MB_OK); return 0; }といった、ちょっとした調査や
#include <windows.h> int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){ if (MessageBox(NULL, "○○します。よろしいですか?", "状態変更", MB_YESNO)){ /*実際の処理*/ MessageBox(NULL, "完了しました", "状態変更", MB_OK); } return 0; }といった、ちょっとした質問とそれによる動作ぐらいは行うことができます。
一つ上のページに戻る