トップ «前の日記(2007-04-22 [日]) 最新 次の日記(2007-04-24 [火])» 編集

SewiGの日記

2004|01|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|

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();
}

Copyright © 2004-2008 SewiG All rights reserved.