SewiGの日記
2007-04-23 [月] [長年日記]
■ [Mac][Programming] Macでプログラミング(5) - リソースを使わないでウィンドウ表示
今度はリソースを使わないでソースコードでウィンドウを作ってみます。前回と違うのは、ウィンドウの作成に使う関数がNewCWindowになっていることです。戻り値はウィンドウへのポインタです。引数は左からウィンドウ作成のメモリへのポインタ、ウィンドウの大きさを表すRectのポインタ、ウィンドウの名前を表す文字列、初期状態でウィンドウを表示するかどうかを表す真偽値、ウィンドウのアピアランスを表す数値、ウィンドウの配置で最背面は0で最前面は-1、ズームボックスをつけるかどうかの真偽値、最後は何に使うのか良く分かりません…
ShowWindow()までがウィンドウ関連、この後2行が描画関連。MoveTo()で描画位置を指定してDrawString()で文字列を描画します。
今回は偉そうにEventLoop()でイベント処理をしていますが、マウスが押し下げられたらアプリケーションが終了するという点で前回と同じ動作を行っています。
#include <Dialogs.h>
#include <Strings.h>
#include <Fonts.h>
#include <Sound.h>
QDGlobals qd;
void InitToolBox() {
InitGraf(&qd.thePort);
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs(nil);
FlushEvents(everyEvent, 0);
InitCursor();
}
void EventLoop() {
EventRecord event;
for (;;) {
if (WaitNextEvent(everyEvent, &event, 0, 0L) == true) {
switch(event.what) {
case mouseDown:
return;
case autoKey:
case keyDown:
break;
}
}
}
}
void main() {
WindowPtr window;
Rect rect = {50, 50, 360, 340};
InitToolBox();
window = NewCWindow(NULL, &rect, "Hello World", true, 0, (WindowPtr)-1, false, 0);
if (window == NULL)
ExitToShell();
SetPort(window);
ShowWindow(window);
MoveTo(30, 30);
DrawString("Hello");
SysBeep(0);
EventLoop();
DisposeWindow(window);
ExitToShell();
}