home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2002 January
/
VPR0201B.ISO
/
APUPDATE
/
VC
/
TXC0601S
/
TXC0601S.LZH
/
_LIST.H
< prev
next >
Wrap
C/C++ Source or Header
|
2001-04-09
|
18KB
|
456 lines
#ifndef _LIST_H
#define _LIST_H
//##LIST
typedef struct tagLISTITEM {
struct tagLISTITEM* next; //WZ4.00Bj 990815 nextをoffset=0にした。高速化
struct tagLISTITEM* prev;
WORD sizeitem; // WZ MAILでは、itemのサイズをセットすること
WORD iNest:7; // for Tree表示 //991220 8->7
WORD fSelect:1; // 選択中
WORD fBold:1; // 太字で表示
WORD iMultiString:4; //981017 fMultiString時の現在のindex
WORD iColor:3; // 色分けindex //WZ4.00Ca 991220 new
#define LIST_MAXCOLOR 8 // この色数の色分けが可能。将来変更する場合あり。
} LISTITEM;
typedef struct tagTREEITEM {
struct tagLISTITEM* next; //WZ4.00Bj 990815 nextをoffset=0にした。高速化
struct tagLISTITEM* prev;
// 以上、LISTITEMと共通
// status
HTREEITEM tvitem; // 対応するHTREEITEM
// 以下、ユーザ直接指定。中途変更可
BYTE iHeadline; // 見出しレベル(0:本文,1:見出し1...)
mchar* szName; // 見出し名(malloced) listがfreeする。
BYTE iImage;
BYTE iSelectedImage;
// 以上、ユーザ直接指定
} TREEITEM;
typedef struct {
HBITMAP hBitmap;
WORD index;
} HBITMAP_INDEX;
typedef struct {
BYTE type; // 項目内容のタイプ
#define LISTITEM_SZ 1 // (mchar [])
#define LISTITEM_SZP 2 // (mchar *)
#define LISTITEM_INT 3 // (int)
#define LISTITEM_FILETIME 4 // (FILETIME)
#define LISTITEM_INTB 5 // (BYTE)
#define LISTITEM_CHOICEB 6 // (BYTE)index
#define LISTITEM_MESSAGEID 7 // (MESSAGEID* )
#define LISTITEM_HBITMAP 8 // HBITMAP(ハンドルの解放はクライアントが行う)
#define LISTITEM_HBITMAP_INDEX 9// HBITMAP_INDEX(ハンドルの解放はクライアントが行う)
#define LISTITEM_SIZE 10 // (UINT)bytes //WZ4.00Ca 991210 new
#define LISTITEM_WSZ 11 // (wchar []) //WZ4.00Ca 991210 new !UNICODE環境ではANSIに変換して表示。
#define LISTITEM_WSZP 12 // (wchar *) //WZ4.00Ca 991210 new !UNICODE環境ではANSIに変換して表示。
#define LISTITEM_INTW 13 // (WORD) //WZ4.00Ea 000925 new
#define LISTITEM_CHOICE 14 // (DWORD)index //WZ4.00Ea 001118 new
UINT offset; // 項目内容のLISTITEMの先頭からのオフセット
int cx; // 幅
// 0なら全く表示しない(セル間の余白も表示しない)
// -1なら右端までをこのセルの幅とする
HBITMAP* tHbitmap; //WZ3.90I 981004 LISTITEM_CHOICE/LISTITEM_CHOICEBなら、まずこれを見る。
// これがNULLならtszIndexを見る
#if WZFUNC_MAILBASE ////とりあえず
HIMAGELIST imagelist;// tHbitmapと同列。 //WZ4.00Ed 010309 new
#endif
mchar** tszIndex; // for index
mchar* cszIndex; // tszIndexがNULLならこちらを見る(カンマ区切り)
WORD fSkipRe:1; // ソート時にstrSkipReする?
WORD fDateOnly:1; // LISTITEM_FILETIMEで時刻を表示しない
WORD fNoYear:1; // LISTITEM_FILETIMEで年を表示しない
WORD fCenter:1; // とりあえずtHbitmapのみ対応
WORD fRight:1; // 右揃え?
WORD fLeftSpace:1; // 左端に余白を空ける? //WZ4.00Cb 000116 new
WORD fGuideBitmap:1;// szGuideはHBITMAPである?
WORD fIndexAZ:1; // cszIndexを0と'A','B',...でindexする? //WZ4.00Ea 001118 new
WORD fMultiString; //WZ3.90I 981017 |で区切った複数の文字列
#if !WINDOWSCE // header
mchar szGuide[30];
#endif
} SUBLISTITEMATR;
#define MAX_SUBLISTITEM 15
typedef struct {
COLORREF rgb;
} LISTCOLOR; // この構造体メンバは増加する可能性があるので0クリアしてから使用すること。
typedef struct tagLIST {
// for data handle
LISTITEM* top;
LISTITEM* end; // 正確ではないことがある
// listFlushEndで正確になる
int n; // データ数
WORD fTypeTree:1; //WZ4.00Bj 990815 TREELIST ?
WORD fTypeTail:1; // iCur = nのジャンプができるかどうか?
WORD fTypeFilelist:1; //WZ4.00Cb 000117 ファイルリスト用
WORD fCalendar:1; //WZ4.00Ea 001105 カレンダー表示モード? WZFUNC_MAILBASE用
// for select
BOOL fSelect; // 選択中?
int nSelect; // 選択されたデータ数(0の場合もあり)
int iCurSelect; // 選択開始時のiCur
int iCur; // 現在のindex
// 以上、TREELISTと共通
// for item認識
int nSubitem;
SUBLISTITEMATR tSubitem[MAX_SUBLISTITEM];
// config
COLORREF rgbBackSelect; // 選択色
COLORREF rgbTextSelect;
COLORREF rgbBackCurUnfocus; // フォーカスを持たないときのカーソル色
COLORREF rgbTextCurUnfocus;
COLORREF rgbBack; // 通常色
COLORREF rgbText;
LISTCOLOR* tColor; // iColorによる色分けを行う場合は、LIST_MAXCOLOR個のLISTCOLORをアロケートしてセットすること。
// for display
HWND hwnd; // (TREELIST)TREELISTではユーザ直接指定。
CBOOL fUndisp; // (TREELIST)
HBRUSH hbrushBackSelect;
HBRUSH hbrushBackCurUnfocus;
HBRUSH hbrushBack;
int idd; // 自分自身のIDD
HFONT hfont;
HWND hwndHeader; // ヘッダ付きの場合はヘッダーコントロールのHWNDのコピー
int cxChar;
int cyChar;
int cxClient;
int cyClient;
SIGNED_WORD cxDigit; //WZ4.00Cb 000117 数字の幅
SIGNED_WORD cxSlash; //WZ4.00Cc 000122 '/'の幅
SIGNED_WORD cxColon; //WZ4.00Cc 000122 ':'の幅
SIGNED_WORD cxSpace; //WZ4.00Cc 000122 ' 'の幅
SIGNED_WORD cxItemSpace;//WZ4.00Cc 000122 項目間の余白。デフォルト値が設定される。
int xbase; //WZ4.00Be 990512 横スクロール中なら!=0
int iScreentop; // スクリーン上端のindex
int lcyWindow; // 行内容をすべて表示できる行数
int ly; // 現在のindexのly(0 <= ly < lcyWindowならindexは画面内)
int lyAtMinimized; // 最小化したときのly //WZ3.90M 981128
BBOOL fUndispFocus; // 現在行を反転表示しない
BBOOL fHaveFocus; // フォーカスを持っている?
BBOOL fImeWasOn; // フォーカスを得たときのIMEの状態
int color0;
BBOOL fListFlushScrollBarPosted;
// for fMultiString
HWND hwndCombobox;
// sort
WORD fSortBreakable:1; // ShiftまたはEscでソートの中止が可能?
WORD fSortBreaked:1; // 前回のソートで中止した
// user data
DWORD custdata;
BBOOL fNeedFlushSortid;
// クライアント直接設定
BYTE modeKey; //WZ4.00Ca 991218 (ME_WINまたはME_VZ)
UINT dlgcode; // 初期値DLGC_WANTARROWS
WORD fNoScrollBarH:1; //WZ4.00Be 990512 横スクロールバーは付けない
WORD fNoHeaderTrack:1; //WZ4.00Cb 000117 ヘッダカラム幅の変更を禁止?
WORD fNoSelect:1; //WZ4.00Db 000213 選択をしない?
void (*listitemOnFree)(LISTITEM* item); // listitemが解放されるときに呼び出すクライアント定義関数。
// TREELIST status
WORD fRemaking:3; // listTvDispAll中?
IFILE adrSearch; // 検索中のアドレス
DWORD nEdit; // text->nEditと比較。
// 以下、TREELISTユーザ直接指定
WORD fImageList:1; // イメージを使用?
WORD fOwnerDrawText:1; // オーナドロー?
WORD fMemo:1; // WZ MEMO用
WORD fMemoText:1; // WZ MEMO用(新しいメモファイルフォーマットを使用?)
// これをセットする場合はfMemoもセットすること。
WORD modeMemoDispDate:2;// WZ MEMO用
BYTE iHeadlineMin; // 最小の見出し番号(0:見出し1,1:見出し2...)
int lcxMaskName; // szNameのマスク
TX* text; // アウトラインを抽出するテキスト
TX* textClip; // カットアンドペースト用
int iMove; // 移動先(-1:指定なし)
// 以上、TREELISTユーザ直接指定
#if WZFUNC_MAILBASE////とりあえず
// カレンダー表示モード //WZ4.00Ea 001105
int iSubitemCalendar; // カレンダー表示するLISTITEM_FILETIMEのiSUBITEM
UINT offsetFiletime; // カレンダー表示するLISTITEM_FILETIMEのアイテムoffset
UINT offsetSubject; // カレンダー表示するLISTITEM_SZ/LISTITEM_SZPのアイテムoffset
UINT offsetFtTerm; // カレンダー表示するLISTITEM_FILETIMEで期限のアイテムoffset
// 0の場合は期限なし。
BYTE typeSubject; // offsetSubjectのLISTITEM_xxx
FILETIME ftCur; // カーソル位置の日時
FILETIME ftPreDisp; // 前回表示したときの表示開始ft
FILETIME ftFlush; // fDispFlushOneで表示する日にち
WORD wDay0; // CalendarPageUp/PageDown開始したときの日付
WORD fDispFlushOne:1; // ftFlushのみ表示?
WORD fDispAlled:1; // fDispFlushOneで結局DispAllした?
WORD fOnSelchangeDate:1;// 内部フラグ
// クライアント直接設定
WORD fMondayTop:1; // TRUE=月曜を先頭、FALSE:日曜を先頭
WORD viewCarendar:3;
#define LISTVIEW_MONTH 0
#define LISTVIEW_2WEEK 1
#define LISTVIEW_WEEK 2
#define LISTVIEW_DAY 3 // 未完成
#define LISTVIEW_N 3 // 種類数
#endif
} LIST;
#define WM_LIST_FLUSHSCROLLBAR (WM_TXUSER+0)
#define WM_LIST_DRAGSTART (WM_TXUSER+1) //WZ3.90I 981026
typedef struct {
NMHDR hdr; //PWZ2BETA0.3 980523 hdrが先頭にないといけなかった
#define LISTN_SELCHANGE 10
#define LISTN_SELCHANGEPRE 11
#define LISTN_FORWARD 12 //WZ4.00Ca 991212
#define LISTN_DRAGSTART 13 //WZ3.90I 981026
#define LISTN_SELECTCHANGE 14 //WZ4.00Ca 991214 選択状態が変化した?
#define LISTN_FTCHANGE 15 //WZ4.00Ea 001112 fCalendar:日付が変化した
LIST* list;
int iCur;
int iSublistitem; // WM_LBUTTONDBLCLKのときはマウスクリックされたペイン番号
// for LISTN_FORWARD
UINT message; // LISTN_FORWARDでないときは0
WPARAM wParam;
LPARAM lParam;
// for LISTN_FTCHANGE
#if WZFUNC_MAILBASE////とりあえず
FILETIME ft; // 変更後の日付
#endif
// クライアントの指示
BYTE fCapture:1; // LISTN_FORWARD:KEYDOWN/SYSKEYDOWNでlist標準の処理をしない?
// ダイアログボックス用。WM_NOTIFYでTRUEを返せないので。
} LISTNOTIFY;
typedef WORD SECONDS; //WZ4.00Ea 001107
#if !__TXC__
extern wchar wszclassList[];
extern mchar szclassList[];
#endif
//PWZ2BETA0.9A 980623 listウィンドウを作成するときは必ずLIST_WS_DEFAULTも指定してください
#define LIST_WS_DEFAULT WS_VSCROLL
#define WSLIST_HEADER 0x0001 //WZ4.00Bl 990924 ヘッダウィンドウを付ける?
#define listFromHwnd(hwnd) ((LIST*)hwndGetContext(hwnd))
#define listJumpTail(list) {list->iCur = list->n;}
#define listCurIsTail(list) (list->iCur == list->n)
#if __TXC__
#define LISTITEM void
#endif
LIST* TXAPI_(1013) listNew(void);
void TXAPI_(1014) listDelete(LIST* list);
LIST* listNewEx(HWND hwndParent,DWORD ws);
// 追加・挿入
void TXAPI_(1015) listAdd(LIST* list,LISTITEM* item);
void TXAPI_(1121) listAddItem(LIST* list,LISTITEM* item,LISTITEM* insert);
void TXAPI_(1016) listInsert(LIST* list,LISTITEM* item);
void TXAPI_(1017) listInsertItem(LIST* list,LISTITEM* item,LISTITEM* insert);
void TXAPI_(1018) listItemLink(LIST* list,LISTITEM* itemPrev,LISTITEM* item);
// 削除
BOOL TXAPI_(1019) listDel(LIST* list,LISTITEM* item);
void TXAPI_(1020) listDelAll(LIST* list);
void TXAPI_(1021) listDelCur(LIST* list);
void TXAPI_(1022) listItemRelease(LIST* list,LISTITEM* item);
// 表示
void TXAPI_(1023) listDisp(LIST* list,int ly);
void TXAPI_(1024) listDispI(LIST* list,int i);
void TXAPI_(1025) listDispCur(LIST* list);
void TXAPI_(1026) listDispAll(LIST* list);
void TXAPI_(1027) listSetUndisp(LIST* list);
void TXAPI_(1028) listSetDisp(LIST* list);
void TXAPI_(1029) listSetLy(LIST* list,int ly);
void TXAPI_(1030) listSetLyCenter(LIST* list);
void TXAPI_(1031) listJump(LIST* list,int iCur);
void TXAPI_(1032) listJumpItem(LIST* list,LISTITEM* item);
void TXAPI_(1033) listJumpTop(LIST* list);
void TXAPI_(1034) listJumpEnd(LIST* list);
BOOL TXAPI_(1035) listJumpPrev(LIST* list);
BOOL TXAPI_(1036) listJumpNext(LIST* list);
void TXAPI_(1037) listSetFont(LIST* list,mchar* lfFaceName,int lfHeight);
void TXAPI_(1038) listSetHfont(LIST* list,HFONT hfont);
BOOL TXAPI_(1039) listFind(LIST* list,mchar* szFind);
// フラッシュ
void TXAPI_(1040) listFlushLcy(LIST* list);
void TXAPI_(1041) listFlushEnd(LIST* list);
void TXAPI_(1131) listFlushColor(LIST* list);
// 情報取得
LPVOID TXAPI_(1042) listRead(LIST* list,int iMailhead);
LPVOID TXAPI_(1043) listReadCur(LIST* list);
int TXAPI_(1044) listGetIndex(LIST* list,LISTITEM* listitem);
LISTITEM* TXAPI_(1045) listGetLastSameNest(LISTITEM* now,LISTITEM* end);
// 編集・ソート
BOOL TXAPI_(1046) listMoveUp(LIST* list);
BOOL TXAPI_(1047) listMoveDown(LIST* list);
BOOL TXAPI_(1048) listMoveTop(LIST* list,LISTITEM* item);
typedef struct {
int iSubitem1;
BOOL fLargetop1;
int iSubitem2;
BOOL fLargetop2;
int iTop; // ソート範囲(開始i)(SORTBLOCK時のみ対応) iTop=iEnd=0なら全てソート
int iEnd; // ソート範囲(終了i)(SORTBLOCK時のみ対応)
WORD fSortFileext:1; // 拡張子順・名前順にソート?(LISTITEM_WSZ,LISTITEM_WSZPのみ対応)
WORD fNoSenseCase:1; // 大文字・小文字を区別しない?(LISTITEM_WSZ,LISTITEM_WSZPのみ対応)
} LISTSORTARG;
#define listSortEx(list,item1,f1,item2,f2) {LISTSORTARG arg;structClear(arg);arg.iSubitem1=item1;arg.fLargetop1=f1;arg.iSubitem2=item2;arg.fLargetop2=f2;listSortArg(list,&arg);}
void TXAPI_(1049) listSortArg(LIST* list,LISTSORTARG* arg);
void TXAPI_(1050) listSort(LIST* list,int iSubitem,BOOL fLargetop);
// 選択
BOOL TXAPI_(1051) listGetSelect(LIST* list);
void TXAPI_(1052) listSelectQuit(LIST* list);
BOOL TXAPI_(1053) listSelectStartFlag(LIST* list);
void TXAPI_(1054) listSelectAll(LIST* list);
void TXAPI_(1129) listSelectSwitch(LIST* list);
void TXAPI_(1055) listSelectSwitchAll(LIST* list);
void TXAPI_(1056) listSelectCur(LIST* list);
void TXAPI_(1057) listSelectItem(LIST* list,LISTITEM* item);
void TXAPI_(1125) listSelectSetItem(LIST* list,LISTITEM* item,BOOL fSet);
LISTITEM* TXAPI_(1058) listWalkStart(LIST* list);
LISTITEM* TXAPI_(1059) listWalkNext(LIST* list,LISTITEM* now);
// ユーザ操作
BOOL TXAPI_(1074) listUserUp(LIST* list);
BOOL TXAPI_(1075) listUserDown(LIST* list);
void TXAPI_(1132) listUserPrevPage(LIST* list);
void TXAPI_(1133) listUserNextPage(LIST* list);
// その他
void TXAPI_(1073) listNotifySelchange(LIST* list);
void TXAPI_(1076) listGetItemRect(LIST* list,RECT* r);
int TXAPI_(1077) dtcxListString(LIST* list,mchar* _sz);
int TXAPI_(1114) dtcxList(LIST* list,int _dtcx);
void listRegister(void);
int dtcyList(LIST* list,int _dtcy);
void TXAPI_(1078) listHeaderSetup(LIST* list);
int TXAPI_(1079) listHeaderConvertIndex(LIST* list,int iItem);
#if __TXC__
#undef LISTITEM
#endif
//##listh
#if !__TXC__
extern wchar wszclassListH[]; //WZ4.00Be 990512
extern mchar szclassListH[];
#endif
HWND TXAPI_(1113) listh_GetListWindow(HWND hwnd);
LIST* TXAPI_(1072) listh_GetList(HWND hwnd);
//##TREELIST
// 見出し
BOOL check_iHeadline(int iHeadline);
// TreeView
LIST* listTvNew(void);
BOOL listTvDispAll(LIST* list);
TREEITEM* listTvSearch(LIST* list,HTREEITEM tvitem);
TREEITEM* listTvSearchNearest(LIST* list,HTREEITEM tvitem);
TREEITEM* listTvGetCur(LIST* list);
TREEITEM* listTvSetCur(LIST* list);
TREEITEM* listTvJump(LIST* list,int iCur);
// iHeadline処理
TREEITEM* listJumpSameNestTop(LIST* list,int nNest);
TREEITEM* listJumpSameNestEnd(LIST* list,int nNest);
TREEITEM* listJumpSameNestTail(LIST* list,int nNest);
int listGetCurNestChilds(LIST* list);
// Outline of list->text
typedef struct {
TREEITEM head; // メモの場合、head.szNameには頭に日付が入る場合がある。
NPARA npara;
mchar szMemoAtr[30]; // メモの作成日:更新日
mchar* szName; // 純粋な見出しの名前(メモ以外はhead.szNameと同じ)
} OUTLINEITEM;
BOOL olGetText(LIST* list,TX* textContent,HWND hwndEdit);
BOOL olSetText(LIST* list,TX* textContent,HWND hwndEdit);
void olClear(LIST* list);
void olCut(LIST* list);
void olCopy(LIST* list);
void olCutWithClip(LIST* list);
void olCopyWithClip(LIST* list);
BOOL olPaste(LIST* list);
BOOL olPasteText(LIST* list,TX* textClip);
BOOL olMovePrim(LIST* list,int src,int nitem,int dst,BOOL fAdjustHeadline);
void olMoveUp(LIST* list);
void olMoveDown(LIST* list);
void olMoveTop(LIST* list);
void olMoveEnd(LIST* list);
void olFlush(LIST* list);
BOOL olSetName(LIST* list,OUTLINEITEM* item,mchar* szName);
OUTLINEITEM* olSearch(LIST* list,mchar* szName,int iHeadline);
OUTLINEITEM* olNparaToItem(LIST* list,NPARA npara);
BOOL oluiSearch(LIST* list);
BOOL olSearchNext(LIST* list);
BOOL olSearchPrev(LIST* list);
BOOL olAddHeadline(LIST* list,int add,BOOL fChild);
OUTLINEITEM* olInsert(LIST* list,OUTLINEITEM* itemPrev,mchar* szName,int iHeadline,UINT mode,...);
#define OLI_CONTENT 0x0001 // itemPrevの内容を新しい項目の内容として引き継ぐ。
#define OLI_NEXT 0x0002 // itemPrev以降のiHeadlineの次に挿入する。
#define OLI_INSERTPREV 0x0004 // itemPrevの直前に挿入する。
#define OLI_CFUNC 0x0008 // Cの関数定義の場合は関数本体も挿入する。
#define OLI_INSERTCONTENT 0x0010 // modeの後に指定されたtextContentを内容として挿入する。
BOOL olSaveEdited(LIST* list,BOOL fQuery);
void olCurTextToTv(LIST* list);
void olCurTvToText(LIST* list);
BOOL oluiSetMoveto(LIST* list);
BOOL olMove(LIST* list);
#define ITEM_ROOT ((LPVOID)0xFFFF0000) //WZ4.00Ca 991213 TVI_ROOTから変更
#define TVS_TREELIST (WS_GROUP|WS_TABSTOP|WS_BORDER|WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS)
void olFlush(LIST* list);
//##LISTFILE
typedef struct {
LISTITEM head;
// mydata
FILETIME filetime;
BYTE fFolder; // ディレクトリ?
wchar wszfilename[CCHPATHNAME];
UINT size;
} FILEITEM;
typedef struct {
LIST* list;
HWND hwndinfo; // 情報ウィンドウ
wchar wszpath[CCHPATHNAME]; // カレントパス・マスク
// 内部設定(read only)
WORD fAllocList:1; // listはlistfileがallocした?
WORD fOpen:1; // openされた?
WORD fOnSelectOp:1; // 選択処理中?
DWORD sizeSelect; // 選択されている合計バイト数
int nFolder; // 現在のフォルダ数。フォルダは必ずlistの先頭部分に入れる
int idmSort; // 現在のソートモード
// 外部設定
WORD lfBold;
WORD fFileopen:1; // 「ファイルを開く」用?
WORD fJumpFiletop:1; // フォルダのロード時にカーソル位置をファイルリストの頭に移動?
WORD fJumpSaveOnLoad:1; //WZ4.00Cc 000122 listfileLoadでファイルが見つからないときはiCur位置にジャンプ?
WORD fFolderOnly:1; // フォルダ一覧のみを読み込む。
WORD fFilelistRight:1; //WZ4.00Cb 000116 ファイル名一覧を右側に表示?
WORD fFolderSortByName:1;//WZ4.00Db 000210 フォルダは名前順で表示?
} LISTFILE;
LISTFILE* listfileNew(void);
void listfileSetWindow(LISTFILE* listfile,LIST* list);
BOOL listfileSearch(LISTFILE* listfile,wchar* wszfilename);
BOOL listfileGetFilename(LISTFILE* listfile,wchar* wszfilename);
void listfileSort(LISTFILE* listfile,int idm);
BOOL listfileMovePath(LISTFILE* listfile,wchar* _wszname);
void listfileSetupList(LISTFILE* listfile);
BOOL listfileSetPath(LISTFILE* listfile,wchar* wszpath);
BOOL listfileOpen(LISTFILE* listfile);
BOOL listfileSearchAccessKey(LISTFILE* listfile,int key);
#endif // _LIST_H