home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
PRG
/
ListPrint.sit
/
ListPrint
/
ListPrint.c
< prev
next >
Wrap
Text File
|
1995-07-25
|
12KB
|
469 lines
//******************************************************************************
//* *
//* Macintosh プログラム作成の勉強 *
//* This Program is lesson for Macintohs. *
//* *
//* Symantec C++ Ver 6.0 (Symantec THINK C Ver 5.0.4 から) *
//* *
//* リスト印刷を行うプログラム *
//* ① ファイル選択・取り消し *
//* ② 文字フォント設定 *
//* ③ 文字サイズ設定 *
//* ④ タブサイズ設定 *
//* ⑤ 行番号の有無設定 *
//* ⑥ 行間隔設定 *
//* ⑦ 用紙サイズ・方向(縦・横) *
//* ⑧ 印刷 *
//* *
//* 参考資料 *
//* Symantec THINK C 5.0.4 *
//* サンプルプログラム *
//* *
//* 漢字Talk7プログラミング THINK C *
//* 著 者:新居 雅行 *
//* 発行所:株式会社ビー・エヌ・エヌ *
//* *
//* Macintoshツールボックス *
//* 著 者:J.C.メイ J.B.ホイットル *
//* 発行所:株式会社トッパン *
//* *
//* Macintoshプログラミングライブラリ *
//* 改訂版TOOLBOX 100の定石 *
//* 著 者:小池 邦人 *
//* 発行所:株式会社アスキー *
//* *
//* *
//* 1994/ 1/26 By SAGAWA KAZUYOSHI 作成(調査)開始日 *
//* 1994/ 4/26 By SAGAWA KAZUYOSHI *
//* 1994/ 9/20 By SAGAWA KAZUYOSHI *
//* 1994/11/12 By SAGAWA KAZUYOSHI Symantec THINK C Ver 5.0.4 から *
//* Symantec C++ Ver 6.0 に変更 *
//* 注) C++ に変換したわけではない *
//* 1995/02/09 カラーアイコンボタン *
//* 1995/02/24 カーソル形状設定 *
//* *
//* *
//******************************************************************************
// 1 2 3 4 5 6 7 8
//345678901234567890123456789012345678901234567890123456789012345678901234567890
//***********************************************************************
//*
//* FUC 機能説明(FUNCTION)
//*
//* IN 入力情報(INPUT)
//* OT 出力情報(OUTPUT)
//* EX 外部エリア(EXTERNAL) 参照・更新
//*
//***********************************************************************
/*
* インクルード
*/
#include "Constants.h"
#include <PrintTraps.h>
#include "ListPrint.h"
//**************************************************************************
//*
//* 本モジュールの中だけで使用されている関数プロトタイプ宣言
//*
//**************************************************************************
void ListPrint_MacInitial (void);
void EventLoop (void);
void DoMouse (void);
void DoKey (void);
void DoUpdate (void);
void DoActivate (void);
void DoDeactivate (void);
void DoMenuDown (void);
//void DoMenu (long);
void DoAppMenu (int);
void DoFileMenu (int);
void DoStyleMenu (int);
void DoSourceMenu (int);
void DoResume (void);
void DoSuspend (void);
/*
* 外部ワーク定義
*/
WindowRecord wRecord; /* */
EventRecord event; /* イベント取得用[ローレベルイベント] */
//WindowPtr masterWindow;
WindowPtr CurrentWindow;
Boolean finish = false;
int fontItemNow, sizeItemNow, tabsItemNow; /* 現在選択されている項目番号*/
ControlHandle hControl[controlNumber]; /* コントロール部品ハンドル値の保存用 */
ListInfoData listData; /* スクローリングリスト情報データ */
THPrint hPrint = NULL; /* プリントレコード */
Handle hFileIn; /* ファイル読み込み用ハンドル */
TEHandle TEHtab; /* タブ値(テキストエディットハンドル) */
Rect destRect = { 100, 180, 125, 205 };/* 文字列を表示する枠をRectで指定 */
Rect viewRect; /* TextEditを表示する枠をRectで指定 */
CiconInfoData cIconData[colorIconNumber]; /* カラーアイコン情報データ */
//int linesInFolder;
ControlHandle vScroll;
//##############################################################################
//# #
//# FUC 関数メイン #
//# #
//# IN 無し #
//# OT 無し #
//# #
//##############################################################################
void main(void)
{
int r, i, j;
long theNum;
Str255 theString;
Boolean isEvent, isWNE;
ListPrint_MacInitial();
r = ListPrint_window_SetUp();
for (i = 0; i < controlNumber; i++) /* 部品ハンドル保存 */
hControl[i] = GetNewControl(removeCntlID+i, CurrentWindow);
/* 選択ファイル情報保存ハンドル */
listData.hStFl = (SelectFileInfo **) NewHandle(sizeof(SelectFileInfo));
(*listData.hStFl)->nextFile = 0;
SetCtlValue(hControl[fontCntlNumber], fontItemNow); /* PopUpMenuの表示を変更 */
SetCtlValue(hControl[sizeCntlNumber], sizeItemNow); /* PopUpMenuの表示を変更 */
TEActivate(TEHtab);
for (i = 0; i < colorIconNumber; i++) { /* カラーアイコンボタン */
cIconData[i].ciHandle[0] = GetCIcon(printIconID+i); /* ハンドル */
cIconData[i].ciHandle[1] = GetCIcon(printIconID+i+colorIconOffSet);
for (j = 1; j <= 4; j++) { /* 表示位置 */
GetIndString(theString, cIconRectSTRid, i*4+j);
StringToNum(theString, &theNum);
if (j == 1) cIconData[i].rect.top = theNum;
else if (j == 2) cIconData[i].rect.left = theNum;
else if (j == 3) cIconData[i].rect.bottom = theNum;
else if (j == 4) cIconData[i].rect.right = theNum;
}
}
isWNE = true;
while ( !finish ) {
TEIdle(TEHtab); /* 挿入ポインタの点滅 */
if ( isWNE )
isEvent = WaitNextEvent(everyEvent, &event, 2, 0);
else {
isEvent = GetNextEvent(everyEvent, &event);
}
if (isEvent) EventLoop();
SystemTask(); /* DAに一定時間を配分する */
};
DisposeHandle( (Handle)listData.hStFl );
// SetPort(CurrentWindow);
// DisposeWindow( CurrentWindow ); 7.5 だとエラー終了する
}
void ListPrintScreenDisp(void)
{
int i;
Str255 Title;
Point Local;
Rect tempRect;
Cell theCell;
Handle hICON;
DrawControls (CurrentWindow); /* コントロールを全て描く */
for (i = 0; i < colorIconNumber; i++) { /* カラーアイコンボタン */
PlotCIcon(&cIconData[i].rect, cIconData[i].ciHandle[0]);
}
// LDoDraw(true, listData.hList);
// LUpdate(&CurrentWindow->visRgn, listData.hList);
tempRect = (*listData.hList)->rView; /* スクローリングリスト枠描画 */
InsetRect(&tempRect, -1, -1), FrameRect(&tempRect);
Local.v = tempRect.top - 2;
Local.h = tempRect.left + 5;
MoveTo(Local.h, Local.v), DrawString("¥p印刷対象ファイル");
GetCTitle(hControl[fontCntlNumber], Title);
Local.v = (**hControl[fontCntlNumber]).contrlRect.top + 15;
Local.h = (**hControl[fontCntlNumber]).contrlRect.left - 35;
MoveTo(Local.h, Local.v), DrawString(Title); /* Locate printf */
GetCTitle(hControl[sizeCntlNumber], Title);
Local.v = (**hControl[sizeCntlNumber]).contrlRect.top + 15;
Local.h = (**hControl[sizeCntlNumber]).contrlRect.left - 35;
MoveTo(Local.h, Local.v), DrawString(Title);
Local.v = (**TEHtab).viewRect.top + 10;
Local.h = (**TEHtab).viewRect.left - 40;
MoveTo(Local.h, Local.v), DrawString("¥pTabs:");
Local.v = (*hControl[lineSpaceNormalCntlNumber])->contrlRect.top + 15;
Local.h = (*hControl[lineSpaceNormalCntlNumber])->contrlRect.left - 35;
MoveTo(Local.h, Local.v), DrawString("¥p行間隔");
// TEActivate(TEHtab);
TEUpdate(&viewRect, TEHtab);
//// (**TEHtab).isSelect = true; /* 選択フラグON */
//// i = (**TEHtab).active;
FrameRect(&destRect); /* 箱を描画する */
theCell.h = 0;
for (i = 0; i <= listData.CellNum; i++) {
theCell.v = i;
LDraw(theCell, listData.hList);
}
}
/*
* マックマネージャー初期化
*/
void ListPrint_MacInitial(void)
{
InitGraf(&thePort); /* Quick Draw(現在のgraph portへのPointer) */
InitFonts(); /* Font Manager */
FlushEvents(everyEvent, 0); /* イベントキュークリアー */
InitWindows(); /* ウィンドウManager */
InitMenus(); /* Menu Manager */
TEInit(); /* テキストエディット */
InitDialogs(0L); /* Dialog Manager */
InitCursor(); /* 矢印カーソルを設定 */
MaxApplZone(); /* Appl Heapの大きさを上限まで広げる */
}
/**************************************************************************
*
* FUC システムカーソル設定
*
* IN カーソル形状
* OT 無し
* EX 無し
*
* 1995/02/24 新規作成
*************************************************************************/
void ListPrint_SetSystemCursor(int form)
{
CursHandle hCur;
if (form >= iBeamCursor && form <= watchCursor) {
hCur = GetCursor(form);
SetCursor(*hCur);
}
// else { 矢印は印刷処理(System)が設定しているので不用
// SetCursor(&arrow);
// }
}
/**************************************************************************
*
* FUC イベント種別判定と実行
*
* IN 無し
* OT 無し
* EX event.what
*
*************************************************************************/
void EventLoop(void)
{
switch(event.what) {
case/*1*/ mouseDown: DoMouse(); break;
case/*3*/ keyDown: DoKey(); break;
case autoKey: DoKey(); break;
case/*6*/ updateEvt: DoUpdate(); break;
case/*8*/ activateEvt:
if( BitAnd(event.modifiers, activeFlag) != 1 )
DoDeactivate();
else
DoActivate();
break;
}
}
void DoMouse(void)
{
int Click;
WindowPtr whichWindow;
Click = FindWindow(event.where, &whichWindow);
switch(Click) {
case/*1*/ inMenuBar: DoMenuDown(); break;
case/*2*/ inSysWindow: SystemClick(&event, whichWindow); break;
case/*3*/ inContent: DoContent(whichWindow); break;
case/*4*/ inDrag: DoDrag(whichWindow); break;
case/*5*/ inGrow: DoGrow(whichWindow); break;
case/*6*/ inGoAway: DoGoAway(whichWindow, event.where); break;
case/*7*/ inZoomIn:
case/*8*/ inZoomOut: DoZoom(whichWindow, event.where, Click); break;
}
}
void DoKey(void)
{
long itemID;
char theChar;
if (BitAnd(event.modifiers, cmdKey)) {
itemID = MenuKey(BitAnd(event.message, charCodeMask));
if(itemID) DoMenu(itemID);
}
else {
theChar = event.message & charCodeMask;
if ( (**TEHtab).active ) {
DoTab(theChar);
}
else {
DoScrollList(theChar);
}
}
}
void DoUpdate(void)
{
WindowPtr TargetWindow;
TargetWindow = (WindowPtr)event.message;
SetPort (TargetWindow);
/* FillRect (&TargetWindow->portRect, (ConstPatternParam)&gray);*/
BeginUpdate (TargetWindow);
EraseRect (&TargetWindow->portRect);
// DrawTextList ();
ListPrintScreenDisp();
DoButtonHilite();
EndUpdate (TargetWindow);
}
void DoActivate(void)
{
WindowPtr TargetWindow;
TargetWindow = FrontWindow();
SetPort(TargetWindow);
}
void DoDeactivate(void)
{
WindowPtr TargetWindow;
TargetWindow = FrontWindow();
SetPort(TargetWindow);
// DrawGrowIcon(TargetWindow);
}
/*
* メニュー選択
*/
void DoMenuDown(void)
{
long itemID;
itemID = MenuSelect(event.where);
if(itemID) DoMenu(itemID); /* 選択されたら処理を行う */
}
void DoMenu(long item)
{
int MenuID, SelectID;
MenuID = HiWord(item);
SelectID = LoWord(item);
switch(MenuID) {
case appleMenuID: DoAppMenu (SelectID); break;
case fileMenuID: DoFileMenu (SelectID); break;
case styleMenuID: DoStyleMenu(SelectID); break;
case fontMenuID: CheckFontMenu (SelectID); break;
case sizeMenuID: CheckSizeMenu (SelectID); break;
case sourceMenuID: DoSourceMenu(SelectID); break;
default: break;
}
HiliteMenu(0);
}
void DoAppMenu(int ID)
{
int DAstat;
Str255 DAname;
switch(ID) {
case aboutItem: CautionAlert(aboutAlertID, 0); break;
default: GetItem(GetMHandle(appleMenuID), ID, DAname);
DAstat = OpenDeskAcc(DAname);
break;
}
}
void DoFileMenu(int ID)
{
switch(ID) {
case openItem: DoOpenCommand(); break;
case printItem: DoPrintCommand(); break;
case pageSetupItem: DoPageSetupCommand(); break;
case quitItem: DoQuitCommand();
finish = true; break;
default: break;
}
}
void DoStyleMenu(int ID)
{
switch(ID) {
// case fontItem: この項目が選択された場合、FontMenuID値が返される為
// case sizeItem: ここには飛んでこない。
case setTabsFontItem: SetTabsFontDialog(); break;
case addItem: DoAddDialog(); break;
case removeItem: if ( ScrollListDelCell(&listData) )
SelectFileDelete(listData.DelCell.v, &listData);
DoButtonHilite();
break;
default: break;
}
}
void DoSourceMenu(int ID)
{
switch(ID) {
case sAddItem: DoAddDialog();
break;
case sRemoveItem: if ( ScrollListDelCell(&listData) )
SelectFileDelete(listData.DelCell.v, &listData);
DoButtonHilite();
break;
default: break;
}
}
/*
*
*/
void DoResume(void)
{
DoActivate();
}
void DoSuspend(void)
{
DoDeactivate();
}