source: dev/trunk/ab5.0/abdev/abdev/IconEditor_Tool.cpp @ 613

Last change on this file since 613 was 613, checked in by dai_9181, 15 years ago

"extern PROJECTINFO ProjectInfo?;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

File size: 7.5 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5char *GetIconEditToolName(DWORD id){
6    char *pTemp=0;
7
8#if defined(JPN)
9    //日本語
10    if(id==IDC_TOOL_SELECT) pTemp="選択";
11    else if(id==IDC_TOOL_PEN) pTemp="ペン";
12    else if(id==IDC_TOOL_LINE) pTemp="線";
13    else if(id==IDC_TOOL_FILL) pTemp="塗りつぶし";
14    else if(id==IDC_TOOL_RECTANGLE) pTemp="四角形";
15    else if(id==IDC_TOOL_FILLRECT) pTemp="縁付き四角形";
16    else if(id==IDC_TOOL_FILLRECT2) pTemp="塗りつぶし四角形";
17    else if(id==IDC_TOOL_ELLIPSE) pTemp="楕円";
18#else
19    //英語
20    if(id==IDC_TOOL_SELECT) pTemp="Tool";
21    else if(id==IDC_TOOL_PEN) pTemp="Pen";
22    else if(id==IDC_TOOL_LINE) pTemp="Line";
23    else if(id==IDC_TOOL_FILL) pTemp="Fill";
24    else if(id==IDC_TOOL_RECTANGLE) pTemp="Rectangle";
25    else if(id==IDC_TOOL_FILLRECT) pTemp="Rectangle with edge";
26    else if(id==IDC_TOOL_FILLRECT2) pTemp="Fill Rectangle";
27    else if(id==IDC_TOOL_ELLIPSE) pTemp="Ellipse";
28#endif
29
30    return pTemp;
31}
32
33BOOL CALLBACK DlgIconButtons(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
34    extern MDIINFO MdiInfo[MAX_WNDNUM];
35    int WndNum;
36    RECT rect;
37#define BMPNUM_ICONTOOLBAR 8
38    TBBUTTON IconToolBar[]={
39        {0,IDC_TOOL_SELECT,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
40        {1,IDC_TOOL_PEN,TBSTATE_ENABLED|TBSTATE_CHECKED,TBSTYLE_CHECKGROUP,0,0},
41        {2,IDC_TOOL_LINE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
42        {3,IDC_TOOL_FILL,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
43        {4,IDC_TOOL_RECTANGLE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
44        {5,IDC_TOOL_FILLRECT,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
45        {6,IDC_TOOL_FILLRECT2,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
46        {7,IDC_TOOL_ELLIPSE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
47    };
48    TOOLTIPTEXT *pTipText;
49    static HWND hToolBar;
50
51    switch(message){
52        case WM_INITDIALOG:
53            MoveWindow(hwnd,20,120,80,200,1);
54
55            hToolBar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS,
56                NULL,
57                BMPNUM_ICONTOOLBAR, /*ビットマップの個数*/
58                hResInst,(unsigned int)MAKEINTRESOURCE(IDR_ICONTOOLBAR),IconToolBar,
59                BMPNUM_ICONTOOLBAR, /*アイテムの個数*/
60                0,0,16,15,sizeof(TBBUTTON));
61
62
63            //Windows9x系OSでの不具合を防ぐため
64            PostMessage(hwnd,WM_USER+120,0,0);
65
66            break;
67        case WM_USER+120:
68            GetClientRect(hwnd,&rect);
69            MoveWindow(hToolBar,0,0,rect.right,rect.bottom,1);
70            return 1;
71        case WM_COMMAND:
72            switch(LOWORD(wParam)){
73                case IDC_TOOL_SELECT:
74                case IDC_TOOL_PEN:
75                case IDC_TOOL_LINE:
76                case IDC_TOOL_FILL:
77                case IDC_TOOL_RECTANGLE:
78                case IDC_TOOL_FILLRECT:
79                case IDC_TOOL_FILLRECT2:
80                case IDC_TOOL_ELLIPSE:
81                    WndNum=GetWndNum(GetParent(GetParent(hwnd)));
82                    if(LOWORD(wParam)!=IDC_TOOL_SELECT&&
83                        MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
84                        MdiInfo[WndNum].MdiIconEditInfo->NowTool=LOWORD(wParam);
85                        if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel){
86                            if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
87                                DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
88                            MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
89                        }
90                        InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
91                    }
92                    else MdiInfo[WndNum].MdiIconEditInfo->NowTool=LOWORD(wParam);
93                    return 1;
94            }
95            break;
96        case WM_NOTIFY:
97            pTipText=(TOOLTIPTEXT *)lParam;
98            if(pTipText->hdr.code==TTN_NEEDTEXT){
99                //ツールチップを表示
100                pTipText->lpszText=GetIconEditToolName(pTipText->hdr.idFrom);
101            }
102            break;
103    }
104    return 0;
105}
106BOOL CALLBACK DlgIconType(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
107    extern MDIINFO MdiInfo[MAX_WNDNUM];
108    int i,WndNum;
109    HWND hList;
110    BOOL bExist[4];
111    char temporary[32];
112
113    switch(message){
114        case WM_INITDIALOG:
115            SetPosCenter(hwnd);
116
117            WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
118
119            memset(bExist,0,sizeof(BOOL)*4);
120            for(i=0;i<MdiInfo[WndNum].MdiIconEditInfo->num;i++){
121                if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==16&&
122                    MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==4){
123                    bExist[0]=1;
124                }
125                if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==16&&
126                    MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==8){
127                    bExist[1]=1;
128                }
129                if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==32&&
130                    MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==4){
131                    bExist[2]=1;
132                }
133                if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==32&&
134                    MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==8){
135                    bExist[3]=1;
136                }
137            }
138
139            hList=GetDlgItem(hwnd,IDC_TYPELIST);
140            if(bExist[0]==0){
141                //"16*16 (16色)"
142                sprintf(temporary,"16*16 (16%s)",STRING_UNIT_COLORS);
143                SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
144            }
145            if(bExist[1]==0){
146                //"16*16 (256色)"
147                sprintf(temporary,"16*16 (256%s)",STRING_UNIT_COLORS);
148                SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
149            }
150            if(bExist[2]==0){
151                //"32*32 (16色)"
152                sprintf(temporary,"32*32 (16%s)",STRING_UNIT_COLORS);
153                SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
154            }
155            if(bExist[3]==0){
156                //"32*32 (256色)"
157                sprintf(temporary,"32*32 (256%s)",STRING_UNIT_COLORS);
158                SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
159            }
160            break;
161        case WM_COMMAND:
162            switch(LOWORD(wParam)){
163                case IDOK:
164                    hList=GetDlgItem(hwnd,IDC_TYPELIST);
165                    SendMessage(hList,LB_GETTEXT,SendMessage(hList,LB_GETCURSEL,0,0),(long)temporary);
166
167                    if(temporary[0]=='1'&&temporary[7]=='1') i=ICONTYPE_16_16;
168                    if(temporary[0]=='1'&&temporary[7]=='2') i=ICONTYPE_16_256;
169                    if(temporary[0]=='3'&&temporary[7]=='1') i=ICONTYPE_32_16;
170                    if(temporary[0]=='3'&&temporary[7]=='2') i=ICONTYPE_32_256;
171                    EndDialog(hwnd,i);
172                    return 1;
173                case IDCANCEL:
174                    EndDialog(hwnd,-1);
175                    return 1;
176            }
177            break;
178    }
179    return 0;
180}
181BOOL CALLBACK DlgIconToolProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
182    extern MDIINFO MdiInfo[MAX_WNDNUM];
183    int i,WndNum;
184
185    switch(message){
186        case WM_COMMAND:
187            switch(LOWORD(wParam)){
188                case IDC_ADD_ICONTYPE:
189                    i=DialogBox(hResInst,MAKEINTRESOURCE(IDD_ICONEDIT_ICONTYPE),GetParent(hwnd),(DLGPROC)DlgIconType);
190                    if(i==-1) return 1;
191
192                    WndNum=GetWndNum(GetParent(hwnd));
193                    AddIconType(WndNum,i);
194
195                    EnableWindow(GetDlgItem(hwnd,IDC_DELETE_ICONTYPE),1);
196                    return 1;
197                case IDC_DELETE_ICONTYPE:
198                    WndNum=GetWndNum(GetParent(hwnd));
199                    DeleteIconType(WndNum);
200
201                    if(MdiInfo[WndNum].MdiIconEditInfo->num<=1)
202                        EnableWindow(GetDlgItem(hwnd,IDC_DELETE_ICONTYPE),0);
203                    return 1;
204                case IDC_ICONTYPECOMBO:
205                    if(HIWORD(wParam)==CBN_SELCHANGE){
206                        WndNum=GetWndNum(GetParent(hwnd));
207
208                        //イメージ選択用のメモリを解放
209                        if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
210                            DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
211                        MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
212
213                        MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum=
214                            SendDlgItemMessage(hwnd,IDC_ICONTYPECOMBO,CB_GETCURSEL,0,0);
215
216                        HBRUSH hOldBrush;
217                        hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,GetStockObject(WHITE_BRUSH));
218                        PatBlt(MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,400,400,PATCOPY);
219                        SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
220                        DrawIconToMemBmp(WndNum,0);
221
222                        InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,1);
223                        InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hColorDlg,NULL,0);
224                    }
225                    return 1;
226            }
227            break;
228    }
229    return 0;
230}
Note: See TracBrowser for help on using the repository browser.