#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;
}
といった、ちょっとした質問とそれによる動作ぐらいは行うことができます。
一つ上のページに戻る