SCL for Windowsのぺ〜じ

バージョン1.1がでました!!! (更新:2000/03/10)

目次

「SCL for Windows」とは?
動作環境
ダウンロード
インストール
SCL for Windowsがサポートしている関数、その他(2000/03/10)
PC98シリーズのパソコンユーザへ
SCLの互換性
「WinAPI」と「SCL for Windows」
連絡先

「SCL for Windows」とは?

SCL for Windowsとは、高橋智先生が作られた本「MacintoshではじめるC」にあるSCL(Satosi C Libraries)というマッキントシュ上で動くC言語のプログラムをウィンドウズ上でも動くように移植したものです。

もともと、「SCL」自体がマックのウィンドウ上でC言語を使って簡単に絵が描けるようになっているため、ウィンドウズのプログラムを知らない人や、マッキントシュのプログラムをウィンドウズに移植したい人や、C言語をはじめて間も無い人でも「SCL for Windows」を使えば、C言語を少し(?)知っていれば、簡単に絵を描くことが出来ます。

MFCはおろか、C++さえも使っていません。
具体的には、「SCL for Windows」の中で、"windows.h"をインクルードすることで、Win32APIを呼び出しています。
従って、C言語コンパイラ(C言語を翻訳するソフトのこと)がWin32APIをサポートしていないと、「SCL for Windows」は使えません。("windows.h"というファイルを検索してみてください。)
詳しくは、次の動作環境を見てください。
本家本元のSCLについて詳しいことは、こちらを見てください。
目次に戻る

動作環境

for Windows
OSWindows 95,Windows NT3.51の上位互換,Windows 98
メモリコンパイラ依存
(だいたい20MB)
解像度460x340以上
ただし、日本語表示DOSプロンプト対応のため1024x768以上になると、ウィンドウがデスクトップの大きさにフィットしなくなります。
カラー最大24bitTrue Color
(グラフィックウィンドウを保存、印刷する際の最大出力)
動作確認コンパイラVisualC++,BorlandC++,Metrowerks CodeWarriorC/C++
その他109キーボード(Windowsキーやアプリケーションキーがついている),マウス推奨

Window 3.1については、動作の保証が出来ません。
というのもWindows 3.1上で動かすには、Win32sというWin32のサブセットが必要なのですが、これが何処まで使えるのか僕には、分からないわけです。
目次に戻る

ダウンロード

ダウンロードするファイルは、lzh形式になっています。
解凍ソフトを持っていない場合はこちらで用意してください。
「SCL for Windows」には、C言語のコンパイラが別途必要です。

SCL for Windowsのダウンロードサイトはこちらです。Download

目次に戻る

インストール

ヘルプファイルに詳しく書いているのでそちらを見ていただくほうが確実です。

まず、C言語のコンパイラで、プロジェクトファイルを作りますが、プロジェクトの種類をWin32 Console Applicationを選んでください。Win32 ApplicationのほうはWinMainについて知らない人は、選ばないでください。
ダウンロードした、全部のhファイルと2個のcファイルを今作ったプロジェクトファイルと同じディレクトリに置いてください。
プロジェクトにprogram.cを加えます。
program.cを開いて、2行目の#include<SCL.h>を#include"SCL.h"に変えます。
後は、[コンパイル]→[実行]でたいていのコンパイラは、実行する筈です。
もしコンパイルエラーで、[〜関数が見当たりません。]といったエラーが出たなら、そのプロジェクトファイルに必要なライブラリが、入っていません。その関数名を含むライブラリ(.libのファイル)を検索してください。 検索は、Windowsのスタートメニューの検索でライブラリのあるディレクトリを指定したほうが速いです。 見つかれば、そのファイルをプロジェクトに参加させてやれば良いです。
変なエラーが出た場合は、僕の所に連絡してください。
目次に戻る

PC98シリーズのパソコンユーザへ

GetNextEvent関数で、ドライブ情報を得るためには、SCL for Windowsのeventman.hの
char FlopyPathName[10]="a:\\";
char LocalPathName[10]="c:\\";
の部分を適当に変更してください。デフォルトは、DOS/V です。
例えば、PC98のローカルディスクは、Aドライブなので、
char FlopyPathName[10]="c:\\";
char LocalPathName[10]="a:\\";
としておきます。
もちろん、setup /at や、fdisk等を使ってデフォルトの設定を変えている方は、各人の設定で行ってください。
目次に戻る

SCLの互換性

SCL for Windowsで作ったプログラムを、他のOSで動かすには、SCLを手に入れてください。
SCLについて詳しいことは、こちらを見てください。
ここでは、MacintoshとWindowsとのSCLの相違点を挙げておきます。
Difference
SetRect()引数は、int型。
実は、この関数は、WinAPIをそのまま使っています。
Start()StartとStartColor、StartDrawingOnlyとStartDrawingOnlyColorは同じです。
Stop(),
Pause()
キャプスロックキーがききません
シフトキーを使って下さい。
SetTextDrawingBound()DOSプロンプトを使っているため、正常に動作していません。
EventReord.message what=keyDown,KeyUp,autoKey上位1Byteは常に0
what=updateEvt,actineEvtグラフィックウィンドウのHWND
what=diskEvtGetDriveTypeの戻り値(WinAPI)
それ以外はなし
cmdKeyコントロールキーです
optionKey左ウィンドウズキーです
BeginPrinting(),
BeginSaving()
24bitビットマップの印刷、保存
BeginBitMapPrinting(),
BeginBitMapSaving()
白黒ビットマップ
RedrawWindow()#define NO_FORE_DRAW
#include<SCL.h>
として下さい。
EndSavingInPrintingProc()ダミーです。
Patternconst long* 型です。

StartDrawingOnlyを使って、DOSプロンプトのウィンドウをなくしたい場合は、mainではなくて、WinMainを使います。
それには、プロジェクトファイルの種類をWin32 Console Applicationではなくて、Win32 Applicationのほうを選んでください。そして、


#include<SCL.h>
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,
LPSTR lpszArgs,int nWinMode)
{
StartDrawingOnly();
.......
と後は、ごりごり作って下さい。
目次に戻る

「WinAPI」と「SCL for Windows」

SCL.hをインクルードすることで、一部のWinAPIは書き換えられます。例えば、LineToは、SCLでは、void LineTo(short,short)に対して、WinAPIでは、BOOL LineTo(HDC,int,int)になっています。書き換えられたWinAPIを以下に挙げておきます。
LineTo,MoveTo(但しWin16以前),DrawText,FrameRect,InvertRect,FillRect,RedrawWindowです。
目次に戻る

連絡先

うそ、大袈裟、紛らわしいプログラムがあれば、こちらまで。
fujiwara@klingon.math.wani.osaka-u.ac.jp

ブラウザの戻るボタンで戻って下さい。