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

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

MDIINFO構造体をリファクタリング。

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