;---------- ---------- ---------- ---------- ---------- ; 作成者のURL ---> http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- #include "kernel32.as" #include "user32.as" #include "gdi32.as" #include "comctl32.as" ;---------- ---------- ---------- ---------- ---------- #define DFC_CAPTION 1 ;タイトルバーのボタン #define DFC_MENU 2 ;メニュー #define DFC_SCROLL 3 ;スクロールバー #define DFC_BUTTON 4 ;ボタン #define DFC_POPUPMENU 5 ;ポップアップメニュー #define DFCS_CAPTIONCLOSE 0 ;閉じるボタン #define DFCS_CAPTIONMIN 1 ;最小化ボタン #define DFCS_CAPTIONMAX 2 ;最大化ボタン #define DFCS_CAPTIONRESTORE 3 ;元に戻すボタン #define DFCS_CAPTIONHELP 4 ;ヘルプボタン #define DFCS_MENUARROW 0 ;サブメニュー矢印 #define DFCS_MENUCHECK 1 ;チェックマーク #define DFCS_MENUBULLET 2 ;オプションマーク #define DFCS_MENUARROWRIGHT 4 ;矢印 #define DFCS_BUTTONCHECK 0 ;チェックボックス #define DFCS_BUTTONRADIOIMAGE 1 ;ラジオボタンのイメージ #define DFCS_BUTTONRADIOMASK 2 ;ラジオボタンのマスク #define DFCS_BUTTONRADIO 4 ;ラジオボタン #define DFCS_BUTTON3STATE 8 ;3ステートボタン #define DFCS_BUTTONPUSH 0x10 ;ボタン #define DFCS_SCROLLUP 0 ;上 #define DFCS_SCROLLDOWN 1 ;下 #define DFCS_SCROLLLEFT 2 ;左 #define DFCS_SCROLLRIGHT 3 ;右 #define DFCS_SCROLLCOMBOBOX 5 ;コンボボックスタイプ #define DFCS_SCROLLSIZEGRIP 8 ;サイズ変更グリップ #define DFCS_SCROLLSIZEGRIPRIGHT 0x10;左サイズ変更グリップ #define DFCS_INACTIVE 0x100 ;無効(淡色表示) #define DFCS_PUSHED 0x200 ;押された状態 #define DFCS_CHECKED 0x400 ;チェックされた状態 #define DFCS_TRANSPARENT 0x800 ;背景を透過して描画 #define DFCS_HOT 0x1000 ;ホットトラッキング状態で描画 #define DFCS_ADJUSTRECT 0x2000 ;境界を調節してボタンの周囲の辺を除外 #define DFCS_FLAT 0x4000 ;平らなデザイン #define DFCS_MONO 0x8000 ;モノクロの境界 ;---------- ---------- ---------- ---------- ---------- #define BDR_RAISEDOUTER 1 ;外側を隆起させる #define BDR_SUNKENOUTER 2 ;外側をくぼませる #define BDR_RAISEDINNER 4 ;内側を隆起させる #define BDR_SUNKENINNER 8 ;内側をくぼませる #const EDGE_BUMP ( BDR_RAISEDOUTER | BDR_SUNKENINNER ) #const EDGE_ETCHED ( BDR_SUNKENOUTER | BDR_RAISEDINNER ) #const EDGE_RAISED ( BDR_RAISEDOUTER | BDR_RAISEDINNER ) #const EDGE_SUNKEN ( BDR_SUNKENOUTER | BDR_SUNKENINNER ) #define BF_LEFT 1 #define BF_TOP 2 #define BF_RIGHT 4 #define BF_BOTTOM 8 #const BF_TOPLEFT (BF_TOP|BF_LEFT) #const BF_TOPRIGHT (BF_TOP|BF_RIGHT) #const BF_BOTTOMLEFT (BF_BOTTOM|BF_LEFT) #const BF_BOTTOMRIGHT (BF_BOTTOM|BF_RIGHT) #const BF_RECT (BF_LEFT|BF_TOP|BF_RIGHT|BF_BOTTOM) #define BF_DIAGONAL 16 ;対角線を描画 #const BF_DIAGONAL_ENDTOPRIGHT (BF_DIAGONAL|BF_TOP|BF_RIGHT) #const BF_DIAGONAL_ENDTOPLEFT (BF_DIAGONAL|BF_TOP|BF_LEFT) #const BF_DIAGONAL_ENDBOTTOMLEFT (BF_DIAGONAL|BF_BOTTOM|BF_LEFT) #const BF_DIAGONAL_ENDBOTTOMRIGHT (BF_DIAGONAL|BF_BOTTOM|BF_RIGHT) #define BF_MIDDLE 0x800 ;長方形の内側を塗りつぶす #define BF_SOFT 0x1000 ;ソフトなデザインのボタンを描画 #define BF_ADJUST 0x2000 #define BF_FLAT 0x4000 ;ソフトなデザインのボタンを描画 #define BF_MONO 0x8000 ;立体効果を持たない境界を描画 ;---------- ---------- ---------- ---------- ---------- ; LoadImage #define global IMAGE_BITMAP 0 ;ビットマップ #define global IMAGE_ICON 1 ;アイコン #define global IMAGE_CURSOR 2 ;カーソル #define global IMAGE_ENHMETAFILE 3 ;拡張メタファイル #define global LR_CREATEDIBSECTION 0x2000 ;デバイス独立ビットマップとしてロードする #define global LR_DEFAULTCOLOR 0x0 ;デフォルト #define global LR_DEFAULTSIZE 0x40 ;幅・高さの指定がゼロであれば、システムメトリック値のサイズを採用する #define global LR_LOADFROMFILE 0x10 ;外部ファイルからロードする #define global LR_LOADMAP3DCOLORS 0x1000 ;カラーテーブルを走査して、3Dカラーをシステム値に置き換える #define global LR_LOADTRANSPARENT 0x20 ;最初のピクセルデータを背景色と見なし、システム値に置き換える #define global LR_MONOCHROME 0x1 ;白黒イメージとしてロード #define global LR_SHARED 0x8000 ;イメージハンドルを固定する #define global LR_COPYFROMSOURCE 0x4000 ;リソースから読み込む // カーソル ID #const global IDC_APPSTARTING 0x00007F8A ; 砂時計付き矢印カーソル #const global IDC_ARROW 0x00007F00 ; 標準矢印カーソル #const global IDC_CROSS 0x00007F03 ; 十字カーソル #const global IDC_HAND 0x00007F89 ; Windows 98/Me/2000/XP:ハンドカーソル #const global IDC_HELP 0x00007F8B ; クエスチョンマーク付き矢印カーソル #const global IDC_IBEAM 0x00007F01 ; アイビーム (縦線) カーソル #const global IDC_NO 0x00007F88 ; 禁止カーソル #const global IDC_SIZEALL 0x00007F86 ; 4 方向矢印カーソル #const global IDC_SIZENESW 0x00007F83 ; 斜め左下がりの両方向矢印カーソル #const global IDC_SIZENS 0x00007F85 ; 上下両方向矢印カーソル #const global IDC_SIZENWSE 0x00007F82 ; 斜め右下がりの両方向矢印カーソル #const global IDC_SIZEWE 0x00007F84 ; 左右両方向矢印カーソル #const global IDC_UPARROW 0x00007F04 ; 垂直の矢印カーソル #const global IDC_WAIT 0x00007F02 ; 砂時計カーソル // システムアイコン ID #define global IDI_APPLICATION 32512 ;アプリケーションアイコン #define global IDI_HAND 32513 ;ストップ印のアイコン #define global IDI_ERROR 32513 ;上に同じ #define global IDI_QUESTION 32514 ;疑問符のアイコン #define global IDI_WARNING 32515 ;上に同じ #define global IDI_EXCLAMATION 32515 ;感嘆符のアイコン #define global IDI_ASTERISK 32516 ;アスタリスクのアイコン (吹き出しの中に i の文字) #define global IDI_INFORMATION 32516 ;上に同じ #define global IDI_WINLOGO 32517 ;Windows ロゴアイコン #define global OBM_CLOSE 32754 #define global OBM_UPARROW 32753 #define global OBM_DNARROW 32752 #define global OBM_RGARROW 32751 #define global OBM_LFARROW 32750 #define global OBM_REDUCE 32749 #define global OBM_ZOOM 32748 #define global OBM_RESTORE 32747 #define global OBM_REDUCED 32746 #define global OBM_ZOOMD 32745 #define global OBM_RESTORED 32744 #define global OBM_UPARROWD 32743 #define global OBM_DNARROWD 32742 #define global OBM_RGARROWD 32741 #define global OBM_LFARROWD 32740 #define global OBM_MNARROW 32739 #define global OBM_COMBO 32738 #define global OBM_UPARROWI 32737 #define global OBM_DNARROWI 32736 #define global OBM_RGARROWI 32735 #define global OBM_LFARROWI 32734 #define global OBM_OLD_CLOSE 32767 #define global OBM_SIZE 32766 #define global OBM_OLD_UPARROW 32765 #define global OBM_OLD_DNARROW 32764 #define global OBM_OLD_RGARROW 32763 #define global OBM_OLD_LFARROW 32762 #define global OBM_BTSIZE 32761 #define global OBM_CHECK 32760 #define global OBM_CHECKBOXES 32759 #define global OBM_BTNCORNERS 32758 #define global OBM_OLD_REDUCE 32757 #define global OBM_OLD_ZOOM 32756 #define global OBM_OLD_RESTORE 32755 #define global OBM_MOUSE_WHEEL_move 32661 #define global OBM_MOUSE_WHEEL_cols 32660 ;横方向 #define global OBM_MOUSE_WHEEL_rows 32559 ;縦方向 ;---------- ---------- ---------- ---------- ---------- #define global TB_ADDBITMAP 0x0413 #define global TB_ADDBUTTONS 0x0414 ;新しいボタンを複数追加 #const global TB_GETIMAGELIST ( 0x0400 + 49 ) #define global IDB_STD_SMALL_COLOR 0 ;小さいカラー標準ビットマップ #define global IDB_STD_LARGE_COLOR 1 ;大きいカラー標準ビットマップ #define global IDB_VIEW_SMALL_COLOR 4 ;小さいカラービュービットマップ #define global IDB_VIEW_LARGE_COLOR 5 ;大きいカラービュービットマップ #module ;---------- ---------- ---------- ---------- ---------- ; ボタンやスクロールバー等のフレームコントロールを描画 ;---------- ---------- ---------- ---------- ---------- #deffunc draw_framecontrol int p1, int p2 mref bm, 67 rect = ginfo_cx, ginfo_cy, ginfo_cx + bm.29, ginfo_cy + bm.30 DrawFrameControl hdc, varptr(rect), p1, p2 : redraw 1 pos ginfo_cx + bm.29, ginfo_cy return ;---------- ---------- ---------- ---------- ---------- ; エッジを描画 ;---------- ---------- ---------- ---------- ---------- #deffunc draw_edge int p1, int p2 mref bm, 67 rect = ginfo_cx, ginfo_cy, ginfo_cx + bm.29, ginfo_cy + bm.30 DrawEdge hdc, varptr(rect), p1, p2 : redraw 1 pos ginfo_cx + bm.29, ginfo_cy return ;---------- ---------- ---------- ---------- ---------- ; フォーカスを描画 ;---------- ---------- ---------- ---------- ---------- #deffunc draw_focus int p1, int p2, int p3, int p4 rect = p1, p2, p1+p3, p2+p4 DrawFocusRect hdc, varptr(rect) : redraw 1 return ;---------- ---------- ---------- ---------- ---------- ; LoadImage を使用して描画 ;---------- ---------- ---------- ---------- ---------- #deffunc drawImage int p1, int p2 LoadImage 0, p2, p1, 0, 0, LR_DEFAULTSIZE | LR_SHARED hImage = stat if( p1 == IMAGE_BITMAP ){ dim bitmap, 6 GetObject hImage, 24, varptr(bitmap) CreateCompatibleDC hdc hCompatDC = stat SelectObject hCompatDC, hImage hPrevBitmap = stat BitBlt hdc, ginfo_cx, ginfo_cy, bitmap(1), bitmap(2), hCompatDC, 0, 0, 0xCC0020 redraw 1 // 破棄 SelectObject hCompatDC, hPrevBitmap DeleteObject hImage DeleteDC hCompatDC return } if( p1 != IMAGE_ENHMETAFILE ){ DrawIconEx hdc, ginfo_cx, ginfo_cy, hImage, 0,0, 0,0, 0xF redraw 1 } return ;---------- ---------- ---------- ---------- ---------- ; Toolbar のビットマップを描画 ;---------- ---------- ---------- ---------- ---------- #deffunc drawToolbarImage int p1, int p2 imgx = ginfo_cx imgy = ginfo_cy winobj "ToolbarWindow32","",0,0 : objID = stat hTool = objinfo(objID, 2) ; ( TBADDBITMAP 構造体 ) を送信 tbb = -1, p1 sendmsg hTool, TB_ADDBITMAP, 1, varptr(tbb) sendmsg hTool, TB_GETIMAGELIST, 0,0 hImage = stat ImageList_Draw hImage, p2, hdc, imgx, imgy, 0x0001 ImageList_Destroy hImage redraw 1 : clrobj objID : pos imgx, imgy return ;---------- ---------- ---------- ---------- ---------- #global ; オブジェクトのサイズ objsize 20, 20 ; ----- DFC_BUTTON ----- pos 0, 0 : mes "DrawFrameControl (DFC_BUTTON)" draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_INACTIVE draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_PUSHED draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_CHECKED draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_TRANSPARENT draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_HOT draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_ADJUSTRECT draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_FLAT draw_framecontrol DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_MONO pos 185, ginfo_cy draw_framecontrol DFC_BUTTON, DFCS_BUTTONRADIOIMAGE draw_framecontrol DFC_BUTTON, DFCS_BUTTONRADIOMASK draw_framecontrol DFC_BUTTON, DFCS_BUTTONRADIO draw_framecontrol DFC_BUTTON, DFCS_BUTTON3STATE pos 270, ginfo_cy draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_INACTIVE draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_PUSHED draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_CHECKED draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_TRANSPARENT draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_HOT draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_ADJUSTRECT draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_FLAT draw_framecontrol DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_MONO ; ----- DFC_CAPTION ----- pos 0, ginfo_cy + 25 : mes "DrawFrameControl (DFC_CAPTION)" draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_INACTIVE draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_PUSHED draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_CHECKED draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_TRANSPARENT draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_HOT draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_ADJUSTRECT draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_FLAT draw_framecontrol DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_MONO pos 185, ginfo_cy draw_framecontrol DFC_CAPTION, DFCS_CAPTIONMIN draw_framecontrol DFC_CAPTION, DFCS_CAPTIONMAX draw_framecontrol DFC_CAPTION, DFCS_CAPTIONRESTORE draw_framecontrol DFC_CAPTION, DFCS_CAPTIONHELP ; ----- DFC_MENU ----- pos 350, ginfo_cy - 18 : mes "DrawFrameControl (DFC_MENU)" draw_framecontrol DFC_MENU, DFCS_MENUARROW draw_framecontrol DFC_MENU, DFCS_MENUCHECK draw_framecontrol DFC_MENU, DFCS_MENUBULLET draw_framecontrol DFC_MENU, DFCS_MENUARROWRIGHT ; ----- DFC_SCROLL ----- pos 0, ginfo_cy + 25 : mes "DrawFrameControl (DFC_SCROLL)" draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_INACTIVE draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_PUSHED draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_CHECKED draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_TRANSPARENT draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_HOT draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_ADJUSTRECT draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_FLAT draw_framecontrol DFC_SCROLL, DFCS_SCROLLUP | DFCS_MONO pos 185, ginfo_cy draw_framecontrol DFC_SCROLL, DFCS_SCROLLDOWN draw_framecontrol DFC_SCROLL, DFCS_SCROLLLEFT draw_framecontrol DFC_SCROLL, DFCS_SCROLLRIGHT draw_framecontrol DFC_SCROLL, DFCS_SCROLLCOMBOBOX draw_framecontrol DFC_SCROLL, DFCS_SCROLLSIZEGRIP pos ginfo_cx+5, ginfo_cy draw_framecontrol DFC_SCROLL, DFCS_SCROLLSIZEGRIPRIGHT ; ----- DFC_POPUPMENU ----- pos 350, ginfo_cy - 18 : mes "DrawFrameControl (DFC_POPUPMENU)" draw_framecontrol DFC_POPUPMENU, 0 draw_framecontrol DFC_POPUPMENU, 1 draw_framecontrol DFC_POPUPMENU, 2 draw_framecontrol DFC_POPUPMENU, 3 draw_framecontrol DFC_POPUPMENU, 4 ; ----- エッジの描画 ----- pos 0, ginfo_cy + 25 : mes "DrawEdge" draw_edge EDGE_BUMP, BF_RECT draw_edge EDGE_ETCHED, BF_RECT draw_edge EDGE_RAISED, BF_RECT draw_edge EDGE_SUNKEN, BF_RECT pos ginfo_cx+5, ginfo_cy draw_edge EDGE_BUMP , BF_RECT | BF_DIAGONAL draw_edge EDGE_ETCHED, BF_RECT | BF_DIAGONAL draw_edge EDGE_RAISED, BF_RECT | BF_DIAGONAL draw_edge EDGE_SUNKEN, BF_RECT | BF_DIAGONAL pos ginfo_cx+5, ginfo_cy draw_edge EDGE_BUMP , BF_RECT | BF_MIDDLE draw_edge EDGE_ETCHED, BF_RECT | BF_MIDDLE draw_edge EDGE_RAISED, BF_RECT | BF_MIDDLE draw_edge EDGE_SUNKEN, BF_RECT | BF_MIDDLE pos ginfo_cx+5, ginfo_cy draw_edge EDGE_BUMP , BF_RECT | BF_SOFT draw_edge EDGE_ETCHED, BF_RECT | BF_SOFT draw_edge EDGE_RAISED, BF_RECT | BF_SOFT draw_edge EDGE_SUNKEN, BF_RECT | BF_SOFT pos ginfo_cx+5, ginfo_cy draw_edge EDGE_BUMP , BF_RECT | BF_MONO draw_edge EDGE_ETCHED, BF_RECT | BF_MONO draw_edge EDGE_RAISED, BF_RECT | BF_MONO draw_edge EDGE_SUNKEN, BF_RECT | BF_MONO ; ----- フォーカスの描画 ----- pos 450, ginfo_cy - 18 : mes "DrawFocusRect" draw_focus ginfo_cx, ginfo_cy, 20, 20 ; ----- LoadImage (IMAGE_BITMAP) ----- pos 0, ginfo_cy + 30 : mes "LoadImage (IMAGE_BITMAP)" dim obm, 36 obm( 0) = OBM_UPARROW, OBM_DNARROW, OBM_RGARROW, OBM_LFARROW, OBM_REDUCE, OBM_ZOOM, OBM_RESTORE, OBM_REDUCED obm( 8) = OBM_ZOOMD, OBM_RESTORED, OBM_UPARROWD, OBM_DNARROWD, OBM_RGARROWD, OBM_LFARROWD, OBM_MNARROW, OBM_COMBO obm(16) = OBM_UPARROWI, OBM_DNARROWI, OBM_RGARROWI, OBM_LFARROWI, OBM_SIZE, OBM_BTSIZE, OBM_CHECK, OBM_BTNCORNERS obm(24) = OBM_CHECKBOXES, OBM_MOUSE_WHEEL_move, OBM_MOUSE_WHEEL_cols, OBM_MOUSE_WHEEL_rows, OBM_CLOSE repeat 25 : pos cnt*20, ginfo_cy : drawImage IMAGE_BITMAP, obm(cnt) : loop : pos 0, ginfo_cy + 20 repeat 4 : pos cnt*50, ginfo_cy : drawImage IMAGE_BITMAP, obm(cnt+25) : loop ; ----- LoadImage (IMAGE_CURSOR) ----- pos 0, ginfo_cy + 35 : mes "LoadImage (IMAGE_CURSOR)" dim idc, 14 idc(0) = IDC_APPSTARTING, IDC_ARROW, IDC_CROSS, IDC_HAND, IDC_HELP, IDC_IBEAM, IDC_NO, IDC_SIZEALL idc(8) = IDC_SIZENESW, IDC_SIZENS, IDC_SIZENWSE, IDC_SIZEWE, IDC_UPARROW, IDC_WAIT repeat length(idc) : pos cnt*32, ginfo_cy : drawImage IMAGE_CURSOR, idc(cnt) : loop ; ----- LoadImage (IMAGE_ICON) ----- pos 0, ginfo_cy + 37 : mes "LoadImage (IMAGE_ICON)" dim idi, 6 idi(0) = IDI_APPLICATION, IDI_HAND, IDI_QUESTION, IDI_EXCLAMATION, IDI_ASTERISK, IDI_WINLOGO repeat length(idi) : pos cnt*32, ginfo_cy : drawImage IMAGE_ICON, idi(cnt) : loop ; ----- ToolbarImage ----- pos 0, ginfo_cy + 37 : mes "ToolbarImage" repeat 15 : pos cnt*30, ginfo_cy : drawToolbarimage IDB_STD_SMALL_COLOR , cnt : loop : pos 0, ginfo_cy + 16 repeat 15 : pos cnt*30, ginfo_cy : drawToolbarimage IDB_STD_LARGE_COLOR , cnt : loop : pos 0, ginfo_cy + 32 repeat 15 : pos cnt*30, ginfo_cy : drawToolbarimage IDB_VIEW_SMALL_COLOR, cnt : loop : pos 0, ginfo_cy + 16 repeat 15 : pos cnt*30, ginfo_cy : drawToolbarimage IDB_VIEW_LARGE_COLOR, cnt : loop