source: dev/trunk/ab5.0/abdev/abdev/DialogBoxes.cpp @ 717

Last change on this file since 717 was 717, checked in by dai, 14 years ago

#188への対応。UserSettingディレクトリを廃止し、正規のユーザ空間ディレクトリを取り入れた。

File size: 71.1 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5//タブ用
6BOOL SetSwitch[32];
7
8
9void SetPosCenter(HWND hParent,HWND hwnd){
10    RECT owrect,rect;
11    int x,y;
12
13    if(IsWindow(hParent)) GetWindowRect(hParent,&owrect);
14    else{
15        owrect.left=0;
16        owrect.top=0;
17        owrect.right=ScreenX;
18        owrect.bottom=ScreenY;
19    }
20    GetWindowRect(hwnd,&rect);
21    x=((owrect.right-owrect.left)-(rect.right-rect.left))/2+owrect.left;
22    y=((owrect.bottom-owrect.top)-(rect.bottom-rect.top))/2+owrect.top;
23    SetWindowPos(hwnd,0,x,y,0,0,SWP_NOSIZE);
24}
25void SetPosCenter(HWND hwnd){
26    SetPosCenter(hOwner,hwnd);
27}
28BOOL SetFontDialog(HWND hwnd,LOGFONT *lf,BOOL bFixedPitchOnly,int *lpiPointSize){
29    CHOOSEFONT cf;
30    LOGFONT lfDummy;
31
32    lfDummy=*lf;
33    memset(&cf,0,sizeof(CHOOSEFONT));
34    cf.lStructSize=sizeof(CHOOSEFONT);
35    cf.hwndOwner=hwnd;
36    cf.lpLogFont=&lfDummy;
37    cf.Flags=CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT;
38    if(bFixedPitchOnly) cf.Flags|=CF_FIXEDPITCHONLY|CF_NOVERTFONTS;
39    cf.nFontType=SCREEN_FONTTYPE;
40    lstrcpy((char *)cf.lpTemplateName,"Font select");
41
42    if(!ChooseFont(&cf)) return 0;
43
44    memcpy(lf,&lfDummy,sizeof(LOGFONT));
45
46    if(lpiPointSize) *lpiPointSize=cf.iPointSize;
47
48    return 1;
49}
50
51
52
53//////////////////////////////////
54// プロジェクト新規作成ウィザード
55//////////////////////////////////
56
57//プロジェクト作成項目
58#if defined(JPN)
59//日本語
60#define TEXT_BASE_NORMAL    "ノーマル ウィンドウをベースに、GUIアプリケーションを作成します。"
61#define TEXT_BASE_PROMPT    "プロンプト ウィンドウをベースに、N88BASIC互換プログラムを作成します。"
62#define TEXT_BASE_DOSPROMPT "コンソール アプリケーションを作成します。Windows上で稼動するDOSプロンプトでの入出力が可能になります。"
63#define TEXT_NOBASE         "空のプロジェクトを作成します。"
64#define TEXT_DIRECTX        "DirectXに対応したアプリケーションを作成します。2Dまたは3Dの描画を高速に行うことができ、ゲームアプリケーションなどの開発に最適です。"
65#define TEXT_DLL            "ダイナミック リンク ライブラリ(DLL)を作成します。"
66#define TEXT_SLL            "静的 リンク ライブラリ(lib)を作成します。"
67#else
68//英語
69#define TEXT_BASE_NORMAL    "You can make a GUI application of a normal window base."
70#define TEXT_BASE_PROMPT    "You can make a N88 compatible program of a prompt window base."
71#define TEXT_BASE_DOSPROMPT "You can make a console application."
72#define TEXT_NOBASE         "Empty project is created."
73#define TEXT_DIRECTX        "You can make a DirectX application. It can draw 2D or 3D graphics at high speed and it is useful to a game programing."
74#define TEXT_DLL            "You can make a DLL(Dynamic Link Library)."
75#endif
76
77void GetCheckTextBuffer(char *buffer){
78    extern NEWPROJECTINFO NewProjectInfo;
79    int i;
80
81#if defined(JPN)
82    //日本語
83    lstrcpy(buffer,"作成するプロジェクトの内容を確認して \"完了\" ボタンを押して下さい。\r\n\r\n");
84    i=lstrlen(buffer);
85    sprintf(buffer+i,"プロジェクト名: \"%s\"\r\n",NewProjectInfo.name);
86    i+=lstrlen(buffer+i);
87    sprintf(buffer+i,"ワーク ディレクトリ: \"%s\\%s\"\r\n\r\n",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
88    i+=lstrlen(buffer+i);
89
90    if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
91        lstrcpy(buffer+i,"ノーマル ウィンドウを持つEXE形式の実行ファイルを作成します。\r\n\r\n");
92        i+=lstrlen(buffer+i);
93        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
94        i+=lstrlen(buffer+i);
95        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
96        i+=lstrlen(buffer+i);
97        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
98        i+=lstrlen(buffer+i);
99        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
100        i+=lstrlen(buffer+i);
101        sprintf(buffer+i,"%s.wnd … ウィンドウ デザイン保存用\r\n",NewProjectInfo.name);
102        i+=lstrlen(buffer+i);
103        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
104        i+=lstrlen(buffer+i);
105        sprintf(buffer+i,"MainWnd.ab … メイン ウィンドウのイベント プロシージャ用\r\n",NewProjectInfo.name);
106    }
107    else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
108        lstrcpy(buffer+i,"プロンプト ウィンドウを持つEXE形式の実行ファイルを作成します。\r\n\r\n");
109        i+=lstrlen(buffer+i);
110        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
111        i+=lstrlen(buffer+i);
112        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
113        i+=lstrlen(buffer+i);
114        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
115        i+=lstrlen(buffer+i);
116        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
117        i+=lstrlen(buffer+i);
118        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
119    }
120    else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
121        lstrcpy(buffer+i,"EXE形式のコンソール アプリケーションを作成します。\r\n\r\n");
122        i+=lstrlen(buffer+i);
123        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
124        i+=lstrlen(buffer+i);
125        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
126        i+=lstrlen(buffer+i);
127        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
128        i+=lstrlen(buffer+i);
129        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
130        i+=lstrlen(buffer+i);
131        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
132    }
133    else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
134        lstrcpy(buffer+i,"EXE形式の実行ファイルを作成します。\r\n\r\n");
135        i+=lstrlen(buffer+i);
136        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
137        i+=lstrlen(buffer+i);
138        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
139        i+=lstrlen(buffer+i);
140        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
141        i+=lstrlen(buffer+i);
142        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
143        i+=lstrlen(buffer+i);
144        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
145    }
146    else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
147        lstrcpy(buffer+i,"EXE形式の実行ファイルを作成します。同時に、DirectXの操作に必要なソースコードを生成します。\r\n\r\n");
148        i+=lstrlen(buffer+i);
149        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
150        i+=lstrlen(buffer+i);
151        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
152        i+=lstrlen(buffer+i);
153        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
154        i+=lstrlen(buffer+i);
155        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
156        i+=lstrlen(buffer+i);
157        lstrcpy(buffer+i,"dx_graphics.sbp … DirectGraphicsサポート用ソースコード ファイル\r\n");
158        i+=lstrlen(buffer+i);
159        lstrcpy(buffer+i,"dx_input.sbp … DirectInputサポート用ソースコード ファイル\r\n");
160        i+=lstrlen(buffer+i);
161        lstrcpy(buffer+i,"dx_music.sbp … DirectMusicサポート用ソースコード ファイル\r\n");
162        i+=lstrlen(buffer+i);
163        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
164    }
165    else if(NewProjectInfo.dwTypeID==IDC_DLL){
166        lstrcpy(buffer+i,"ダイナミック リンク ライブラリ(DLL)を作成します。\r\n\r\n");
167        i+=lstrlen(buffer+i);
168        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
169        i+=lstrlen(buffer+i);
170        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
171        i+=lstrlen(buffer+i);
172        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
173        i+=lstrlen(buffer+i);
174        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
175        i+=lstrlen(buffer+i);
176        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
177    }
178    else if(NewProjectInfo.dwTypeID==IDC_SLL){
179        lstrcpy(buffer+i,"静的 リンク ライブラリ(lib)を作成します。\r\n\r\n");
180        i+=lstrlen(buffer+i);
181        lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
182        i+=lstrlen(buffer+i);
183        sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
184        i+=lstrlen(buffer+i);
185        sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
186        i+=lstrlen(buffer+i);
187        sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
188        i+=lstrlen(buffer+i);
189        sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
190    }
191#else
192    //英語
193    lstrcpy(buffer,"Please check following points and click the \"Finish\" button.\r\n\r\n");
194    i=lstrlen(buffer);
195    sprintf(buffer+i,"Project Name: \"%s\"\r\n",NewProjectInfo.name);
196    i+=lstrlen(buffer+i);
197    sprintf(buffer+i,"Work Directory: \"%s\\%s\"\r\n\r\n",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
198    i+=lstrlen(buffer+i);
199
200    if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
201        sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_NORMAL);
202        i+=lstrlen(buffer+i);
203        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
204        i+=lstrlen(buffer+i);
205        sprintf(buffer+i,"%s.pj … Project file\r\n",NewProjectInfo.name);
206        i+=lstrlen(buffer+i);
207        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
208        i+=lstrlen(buffer+i);
209        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
210        i+=lstrlen(buffer+i);
211        sprintf(buffer+i,"%s.wnd … Data of Window Design\r\n",NewProjectInfo.name);
212        i+=lstrlen(buffer+i);
213        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
214        i+=lstrlen(buffer+i);
215        sprintf(buffer+i,"MainWnd.ab … Data of Event Procedures of the Main Window\r\n",NewProjectInfo.name);
216    }
217    else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
218        sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_PROMPT);
219        i+=lstrlen(buffer+i);
220        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
221        i+=lstrlen(buffer+i);
222        sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
223        i+=lstrlen(buffer+i);
224        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
225        i+=lstrlen(buffer+i);
226        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
227        i+=lstrlen(buffer+i);
228        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
229    }
230    else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
231        sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_DOSPROMPT);
232        i+=lstrlen(buffer+i);
233        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
234        i+=lstrlen(buffer+i);
235        sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
236        i+=lstrlen(buffer+i);
237        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
238        i+=lstrlen(buffer+i);
239        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
240        i+=lstrlen(buffer+i);
241        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
242    }
243    else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
244        sprintf(buffer+i,"%s\r\n\r\n",TEXT_NOBASE);
245        i+=lstrlen(buffer+i);
246        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
247        i+=lstrlen(buffer+i);
248        sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
249        i+=lstrlen(buffer+i);
250        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
251        i+=lstrlen(buffer+i);
252        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
253        i+=lstrlen(buffer+i);
254        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
255    }
256    else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
257        sprintf(buffer+i,"%s\r\n\r\n",TEXT_DIRECTX);
258        i+=lstrlen(buffer+i);
259        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
260        i+=lstrlen(buffer+i);
261        sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
262        i+=lstrlen(buffer+i);
263        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
264        i+=lstrlen(buffer+i);
265        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
266        i+=lstrlen(buffer+i);
267        lstrcpy(buffer+i,"dx_graphics.sbp … DirectGraphics is supported at this source file\r\n");
268        i+=lstrlen(buffer+i);
269        lstrcpy(buffer+i,"dx_input.sbp … DirectInput is supported at this source file\r\n");
270        i+=lstrlen(buffer+i);
271        lstrcpy(buffer+i,"dx_music.sbp … DirectMusic is supported at this source file\r\n");
272        i+=lstrlen(buffer+i);
273        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
274    }
275    else if(NewProjectInfo.dwTypeID==IDC_DLL){
276        sprintf(buffer+i,"%s\r\n\r\n",TEXT_DLL);
277        i+=lstrlen(buffer+i);
278        lstrcpy(buffer+i,"--- Creation Files ---\r\n");
279        i+=lstrlen(buffer+i);
280        sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
281        i+=lstrlen(buffer+i);
282        sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
283        i+=lstrlen(buffer+i);
284        sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
285        i+=lstrlen(buffer+i);
286        sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
287    }
288#endif
289}
290BOOL CALLBACK DlgNewProject_Page3(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
291    char buffer[GENERAL_SIZE];
292    LPPSHNOTIFY lpPshNotify;
293    switch(message){
294        case WM_NOTIFY:
295            lpPshNotify=(LPPSHNOTIFY)lParam;
296            switch(lpPshNotify->hdr.code){
297                case PSN_SETACTIVE:
298                    PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_FINISH|PSWIZB_BACK);
299
300                    GetCheckTextBuffer(buffer);
301
302                    SetDlgItemText(hwnd,IDC_PROJECTINFO,buffer);
303                    SetTimer(hwnd,1,10,0);
304                    return 1;
305                case PSN_WIZFINISH:
306                    MakeNewProject();
307                    return 1;
308            }
309            break;
310        case WM_TIMER:
311            KillTimer(hwnd,1);
312            SendDlgItemMessage(hwnd,IDC_PROJECTINFO,EM_SETSEL,0,0);
313            return 1;
314    }
315    return 0;
316}
317BOOL CALLBACK DlgNewProject_Page2(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
318    extern NEWPROJECTINFO NewProjectInfo;
319    LPPSHNOTIFY lpPshNotify;
320    switch(message){
321        case WM_INITDIALOG:
322
323            break;
324        case WM_NOTIFY:
325            lpPshNotify=(LPPSHNOTIFY)lParam;
326            switch(lpPshNotify->hdr.code){
327                case PSN_SETACTIVE:
328                    //DirectXアプリのときはMMSYSをチェック
329                    if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
330                        SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_SETCHECK,BST_CHECKED,0);
331                        EnableWindow(GetDlgItem(hwnd,IDC_API_MMSYS),0);
332                    }
333                    else{
334                        EnableWindow(GetDlgItem(hwnd,IDC_API_MMSYS),1);
335                    }
336
337                    PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_NEXT|PSWIZB_BACK);
338                    return 1;
339                case PSN_WIZNEXT:
340                    NewProjectInfo.dwOption=PJ_OP_RC_MANIFEST;
341                    if(SendDlgItemMessage(hwnd,IDC_UNICODE,BM_GETCHECK,0,0))
342                        NewProjectInfo.dwOption|=PJ_OP_UNICODE;
343                    if(SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_GETCHECK,0,0))
344                        NewProjectInfo.dwOption|=PJ_OP_COMMCTRL;
345                    if(SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_GETCHECK,0,0))
346                        NewProjectInfo.dwOption|=PJ_OP_MMSYSTEM;
347                    if(SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_GETCHECK,0,0))
348                        NewProjectInfo.dwOption|=PJ_OP_RICHEDIT;
349                    if(SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_GETCHECK,0,0))
350                        NewProjectInfo.dwOption|=PJ_OP_WINSOCK;
351                    return 1;
352            }
353            break;
354    }
355    return 0;
356}
357void AppImage_ShowOrHide(HWND hDlg,int id){
358    int nCmd;
359
360    if(id==IDC_EXE_WINDOWBASE) nCmd=SW_SHOW;
361    else nCmd=SW_HIDE;
362    ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_WINDOW),nCmd);
363
364    if(id==IDC_EXE_PROMPTBASE) nCmd=SW_SHOW;
365    else nCmd=SW_HIDE;
366    ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_PROMPT),nCmd);
367
368    if(id==IDC_EXE_DOSPROMPTBASE) nCmd=SW_SHOW;
369    else nCmd=SW_HIDE;
370    ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_DOSPROMPT),nCmd);
371
372    if(id==IDC_EXE_NOBASE) nCmd=SW_SHOW;
373    else nCmd=SW_HIDE;
374    ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_NON),nCmd);
375
376    if(id==IDC_EXE_DIRECTX) nCmd=SW_SHOW;
377    else nCmd=SW_HIDE;
378    ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_DIRECTX),nCmd);
379}
380BOOL CALLBACK DlgNewProject_Page1(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
381    extern NEWPROJECTINFO NewProjectInfo;
382    int i;
383    char temporary[MAX_PATH];
384    LPPSHNOTIFY lpPshNotify;
385
386    switch(message){
387        case WM_INITDIALOG:
388            SetPosCenter(GetParent(hwnd));
389
390            SetDlgItemText(hwnd,IDC_DIRPATH,pobj_nv->ProjectSaveDir);
391            SendDlgItemMessage(hwnd,IDC_EXE_WINDOWBASE,BM_SETCHECK,BST_CHECKED,0);
392            SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_NORMAL);
393            break;
394        case WM_COMMAND:
395            if(HIWORD(wParam)==EN_CHANGE){
396                if(GetWindowTextLength(GetDlgItem(hwnd,IDC_PROJECTNAME))==0||
397                    GetWindowTextLength(GetDlgItem(hwnd,IDC_DIRPATH))==0){
398                    PropSheet_SetWizButtons(GetParent(hwnd),0);
399                }
400                else PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_NEXT);
401            }
402            switch(LOWORD(wParam)){
403                case IDC_PATHBROWSE:
404                    //"ディレクトリを選択して下さい"
405                    if(!GetFolder(hwnd,temporary,STRING_DIRECTORY_SELECT)) return 1;
406                    SetDlgItemText(hwnd,IDC_DIRPATH,temporary);
407                    return 1;
408                case IDC_EXE_WINDOWBASE:
409                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
410
411                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_NORMAL);
412                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
413                    return 1;
414                case IDC_EXE_PROMPTBASE:
415                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
416
417                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_PROMPT);
418                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
419                    return 1;
420                case IDC_EXE_DOSPROMPTBASE:
421                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
422
423                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_DOSPROMPT);
424                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
425                    return 1;
426                case IDC_EXE_NOBASE:
427                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
428
429                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_NOBASE);
430                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
431                    return 1;
432                case IDC_EXE_DIRECTX:
433                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
434
435                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_DIRECTX);
436                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
437                    return 1;
438                case IDC_DLL:
439                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
440
441                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_DLL);
442                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
443                    return 1;
444                case IDC_SLL:
445                    AppImage_ShowOrHide(hwnd,LOWORD(wParam));
446
447                    SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_SLL);
448                    EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
449                    return 1;
450            }
451            break;
452        case WM_NOTIFY:
453            lpPshNotify=(LPPSHNOTIFY)lParam;
454            switch(lpPshNotify->hdr.code){
455                case PSN_SETACTIVE:
456                    SendMessage(hwnd,WM_COMMAND,MAKELONG(0,EN_CHANGE),0);
457                    return 1;
458                case PSN_WIZNEXT:
459                    GetDlgItemText(hwnd,IDC_PROJECTNAME,NewProjectInfo.name,MAX_PATH);
460                    if(!IsVariableTopChar(NewProjectInfo.name[0])){
461                        //"プロジェクト名の先頭文字はアルファベット(A~Z、a~z)またはアンダーバー(_)でなければなりません。"
462                        MessageBox(hwnd,STRING_ERROR_PROJECTTOPCHAR,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
463                        SetWindowLongPtr(hwnd,DWLP_MSGRESULT,-1);
464                        return 1;
465                    }
466                    for(i=1;;i++){
467                        if(NewProjectInfo.name[i]=='\0') break;
468                        if(!IsVariableChar(NewProjectInfo.name[i])){
469                            //"プロジェクト名に不正な文字コードが含まれています。"
470                            MessageBox(hwnd,STRING_ERROR_PROJECTNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
471                            SetWindowLongPtr(hwnd,DWLP_MSGRESULT,-1);
472                            return 1;
473                        }
474                    }
475                    GetDlgItemText(hwnd,IDC_DIRPATH,pobj_nv->ProjectSaveDir,MAX_PATH);
476
477                    //ベース選択
478                    if(SendDlgItemMessage(hwnd,IDC_EXE_WINDOWBASE,BM_GETCHECK,0,0))
479                        NewProjectInfo.dwTypeID=IDC_EXE_WINDOWBASE;
480                    else if(SendDlgItemMessage(hwnd,IDC_EXE_PROMPTBASE,BM_GETCHECK,0,0))
481                        NewProjectInfo.dwTypeID=IDC_EXE_PROMPTBASE;
482                    else if(SendDlgItemMessage(hwnd,IDC_EXE_DOSPROMPTBASE,BM_GETCHECK,0,0))
483                        NewProjectInfo.dwTypeID=IDC_EXE_DOSPROMPTBASE;
484                    else if(SendDlgItemMessage(hwnd,IDC_EXE_NOBASE,BM_GETCHECK,0,0))
485                        NewProjectInfo.dwTypeID=IDC_EXE_NOBASE;
486                    else if(SendDlgItemMessage(hwnd,IDC_EXE_DIRECTX,BM_GETCHECK,0,0))
487                        NewProjectInfo.dwTypeID=IDC_EXE_DIRECTX;
488                    else if(SendDlgItemMessage(hwnd,IDC_DLL,BM_GETCHECK,0,0))
489                        NewProjectInfo.dwTypeID=IDC_DLL;
490                    else if(SendDlgItemMessage(hwnd,IDC_SLL,BM_GETCHECK,0,0))
491                        NewProjectInfo.dwTypeID=IDC_SLL;
492
493                    //"Hello World!"を表示するか
494                    if(SendDlgItemMessage(hwnd,IDC_SHOWHELLOWORLD,BM_GETCHECK,0,0)) NewProjectInfo.ShowHelloWorld=1;
495                    else NewProjectInfo.ShowHelloWorld=0;
496                    return 1;
497            }
498            break;
499    }
500    return 0;
501}
502void DlgNewProjectWizard(HWND hwnd){
503#define MAX_NEWPROJECTPAGE 3
504    PROPSHEETHEADER psh;
505    PROPSHEETPAGE psp;
506    HPROPSHEETPAGE hpsp[MAX_NEWPROJECTPAGE];
507    int i;
508
509    psp.dwSize=sizeof(PROPSHEETPAGE);
510    psp.hInstance=hResInst;
511    psp.dwFlags=PSP_DEFAULT;
512
513    //各ページのセッティング
514    i=0;
515    psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE1);
516    psp.pfnDlgProc=(DLGPROC)DlgNewProject_Page1;
517    hpsp[i]=CreatePropertySheetPage(&psp);
518    i++;
519    psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE2);
520    psp.pfnDlgProc=(DLGPROC)DlgNewProject_Page2;
521    hpsp[i]=CreatePropertySheetPage(&psp);
522    i++;
523    psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE3);
524    psp.pfnDlgProc=(DLGPROC)DlgNewProject_Page3;
525    hpsp[i]=CreatePropertySheetPage(&psp);
526
527    memset(&psh,0,sizeof(PROPSHEETHEADER));
528    psh.dwSize=sizeof(PROPSHEETHEADER);
529    psh.dwFlags=PSH_WIZARD;
530    psh.phpage=hpsp;
531    psh.hwndParent=hwnd;
532    psh.nPages=MAX_NEWPROJECTPAGE;
533    PropertySheet(&psh);
534}
535
536#define CATEGORY_TEXT_BASIC "Basic"
537#define CATEGORY_TEXT_TEXT  "テキスト"
538#define CATEGORY_TEXT_OTHER "その他"
539
540#define CATEGORY_BASIC  1
541#define CATEGORY_TEXT   2
542#define CATEGORY_OTHER  3
543void ResetNewFileTypeListView(HWND hListView,int fCategory){
544    ListView_DeleteAllItems(hListView);
545
546    LV_ITEM lvItem;
547    lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
548    lvItem.iItem=0;
549    lvItem.iSubItem=0;
550
551    if(fCategory==CATEGORY_BASIC){
552        lvItem.pszText="Basic ソース ファイル";
553        lvItem.iImage=0;
554        lvItem.lParam=FT_BASICPROGRAM;
555        ListView_InsertItem(hListView,&lvItem);
556        lvItem.iItem++;
557
558        lvItem.pszText="プロジェクト";
559        lvItem.iImage=2;
560        lvItem.lParam=FT_PROJECT;
561        ListView_InsertItem(hListView,&lvItem);
562    }
563    else if(fCategory==CATEGORY_TEXT){
564        lvItem.pszText="テキスト ファイル";
565        lvItem.iImage=3;
566        lvItem.lParam=FT_TEXT;
567        ListView_InsertItem(hListView,&lvItem);
568        lvItem.iItem++;
569
570        lvItem.pszText="HTML ファイル";
571        lvItem.iImage=4;
572        lvItem.lParam=FT_HTML;
573        ListView_InsertItem(hListView,&lvItem);
574    }
575    else if(fCategory==CATEGORY_OTHER){
576        lvItem.pszText="アイコン ファイル";
577        lvItem.iImage=5;
578        lvItem.lParam=FT_ICON;
579        ListView_InsertItem(hListView,&lvItem);
580    }
581
582    ListView_SetItemState(hListView,0,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
583}
584
585#ifndef THETEXT
586BOOL CALLBACK DlgNewFile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
587    extern char NewFileName[MAX_PATH];
588
589    static HIMAGELIST hImageList;
590    static HWND hTree;
591    static HWND hListView;
592    int i;
593    LVITEM lvItem;
594    switch(message){
595        case WM_INITDIALOG:
596            SetPosCenter(hwnd);
597
598
599            ///////////////////////////////////
600            // カテゴリツリービューを初期化
601            ///////////////////////////////////
602            HTREEITEM hBasicTreeItem;
603
604            hTree=GetDlgItem(hwnd,IDC_CATEGORY_TREE);
605
606            TV_INSERTSTRUCT tv;
607            tv.hInsertAfter=TVI_LAST;
608            tv.item.mask=TVIF_TEXT;
609            tv.hParent=TVI_ROOT;
610
611            tv.item.pszText=CATEGORY_TEXT_BASIC;
612            hBasicTreeItem=TreeView_InsertItem(hTree,&tv);
613            tv.item.pszText=CATEGORY_TEXT_TEXT;
614            TreeView_InsertItem(hTree,&tv);
615            tv.item.pszText=CATEGORY_TEXT_OTHER;
616            TreeView_InsertItem(hTree,&tv);
617
618            TreeView_SelectItem(hTree,hBasicTreeItem);
619
620
621
622            /////////////////////////////////////////
623            // ファイルタイプ リストビューを初期化
624            /////////////////////////////////////////
625
626            hListView=GetDlgItem(hwnd,IDC_FILETYPELIST);
627
628            hImageList=ImageList_Create(32, 32, ILC_COLOR24|ILC_MASK, 6, 0);
629            ListView_SetImageList(hListView, hImageList, LVSIL_NORMAL);
630            ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_BAS)));
631            ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_SBP)));
632            ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_PJ)));
633            ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_TEXT)));
634            ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_HTML)));
635            ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_ICON)));
636
637
638            ResetNewFileTypeListView(hListView,CATEGORY_BASIC);
639
640
641            SetFocus(GetDlgItem(hwnd,IDC_FILETYPELIST));
642
643            if( projectInfo.IsOpened() ){
644                SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_SETCHECK,BST_CHECKED,0);
645            }
646
647            SendMessage(hwnd,WM_COMMAND,IDC_ADDTOPROJECT,0);
648            break;
649        case WM_COMMAND:
650            switch(LOWORD(wParam)){
651                case IDOK:
652                    for(i=0;i<ListView_GetItemCount(hListView);i++){
653                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
654                            lvItem.mask=LVIF_PARAM;
655                            lvItem.iItem=i;
656                            lvItem.iSubItem=0;
657                            ListView_GetItem(hListView,&lvItem);
658                            break;
659                        }
660                    }
661                    if(i==ListView_GetItemCount(hListView)) return 1;
662
663                    //ファイルタイプ
664                    i=lvItem.lParam;
665
666                    //プロジェクトへ追加するかどうか
667                    if(IsWindowEnabled(GetDlgItem(hwnd,IDC_ADDTOPROJECT))){
668                        if(SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_GETCHECK,0,0)){
669                            i|=0x00008000;
670                            GetDlgItemText(hwnd,IDC_FILENAME,NewFileName,MAX_PATH);
671
672                            if(NewFileName[0]=='\0'){
673                                MessageBox(hwnd,"ファイル名を入力してください。",APPLICATION_NAME,MB_OK);
674                                return 1;
675                            }
676                        }
677                    }
678
679                    EndDialog(hwnd,i);
680                    return 1;
681                case IDCANCEL:
682                    EndDialog(hwnd,-1);
683                    return 1;
684                case IDC_ADDTOPROJECT:
685                    if(IsWindowEnabled(GetDlgItem(hwnd,IDC_ADDTOPROJECT))&&
686                        SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_GETCHECK,0,0)){
687                        EnableWindow(GetDlgItem(hwnd,IDC_FILENAME),1);
688                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_FILENAME),1);
689                    }
690                    else{
691                        EnableWindow(GetDlgItem(hwnd,IDC_FILENAME),0);
692                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_FILENAME),0);
693                    }
694                    return 1;
695            }
696            break;
697
698        case WM_NOTIFY:
699            NMHDR *hdr;
700            hdr=(NMHDR *)lParam;
701            if(hdr->hwndFrom==hTree&&hdr->code==TVN_SELCHANGED){
702                NMTREEVIEW *lpnmTree;
703                lpnmTree=(NMTREEVIEW *)lParam;
704
705                char temporary[255];
706                TVITEM tvItem;
707                tvItem.mask=TVIF_TEXT|TVIF_HANDLE;
708                tvItem.hItem=lpnmTree->itemNew.hItem;
709                tvItem.pszText=temporary;
710                tvItem.cchTextMax=255;
711                TreeView_GetItem(hTree,&tvItem);
712
713                if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_BASIC)==0)
714                    ResetNewFileTypeListView(hListView,CATEGORY_BASIC);
715                else if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_TEXT)==0)
716                    ResetNewFileTypeListView(hListView,CATEGORY_TEXT);
717                else if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_OTHER)==0)
718                    ResetNewFileTypeListView(hListView,CATEGORY_OTHER);
719            }
720            if(hdr->hwndFrom==hListView){
721                if(hdr->code==LVN_ITEMCHANGED){
722                    for(i=0;i<ListView_GetItemCount(hListView);i++){
723                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
724                            lvItem.mask=LVIF_PARAM;
725                            lvItem.iItem=i;
726                            lvItem.iSubItem=0;
727                            ListView_GetItem(hListView,&lvItem);
728                            break;
729                        }
730                    }
731                    if(i!=ListView_GetItemCount(hListView)&& projectInfo.IsOpened() &&(
732                        lvItem.lParam==FT_BASICPROGRAM||
733                        lvItem.lParam==FT_SUBPROGRAM
734                        )){
735                        EnableWindow(GetDlgItem(hwnd,IDC_ADDTOPROJECT),1);
736                    }
737                    else EnableWindow(GetDlgItem(hwnd,IDC_ADDTOPROJECT),0);
738
739                    SendMessage(hwnd,WM_COMMAND,IDC_ADDTOPROJECT,0);
740                }
741                else if(hdr->code==NM_DBLCLK){
742                    SendMessage(hwnd,WM_COMMAND,IDOK,0);
743                }
744            }
745            return 0;
746
747        case WM_DESTROY:
748            ImageList_Destroy(hImageList);
749            return 0;
750    }
751    return 0;
752}
753#endif
754
755
756//プロジェクトオプション項目
757#define MAX_PJSETDLG 4
758DWORD temp_dwPjOption;
759char temp_lpszOutputRelease[MAX_PATH];
760char temp_lpszOutputDebug[MAX_PATH];
761char temp_szManifestPath[MAX_PATH];
762char temp_szDebugCmdLine[8192];
763char temp_szDebugExePath[MAX_PATH];
764
765void SaveSetting_DlgPjOption(void){
766    if(SetSwitch[0]){
767        //出力ファイル
768        lstrcpy(projectInfo.lpszOutput_Release,temp_lpszOutputRelease);
769        lstrcpy(projectInfo.lpszOutput_Debug,temp_lpszOutputDebug);
770
771        //コメントの有無
772        projectInfo.dwOption=temp_dwPjOption;
773    }
774    if(SetSwitch[1]){
775        //Win32API
776        projectInfo.dwOption=temp_dwPjOption;
777    }
778    if(SetSwitch[2]){
779        //マニフェスト
780
781        //パス
782        lstrcpy(projectInfo.szManifestPath,temp_szManifestPath);
783
784        projectInfo.dwOption=temp_dwPjOption;
785
786        projectInfo.ModifuOfResource=1;
787    }
788    if(SetSwitch[3]){
789        //デバッグ
790
791        //コマンドライン
792        lstrcpy(projectInfo.szCmdLine,temp_szDebugCmdLine);
793
794        //デバッグセッション用の実行可能ファイル
795        lstrcpy(projectInfo.szExePath,temp_szDebugExePath);
796    }
797
798    projectInfo.modify=1;
799}
800BOOL CALLBACK DlgProjectOption_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
801    NMHDR *nmhdr;
802
803    switch(message){
804        case WM_INITDIALOG:
805            SetPosCenter(GetParent(hwnd));
806
807            SetSwitch[0]=1;
808
809            //出力ファイル
810            SetDlgItemText(hwnd,IDC_EDIT_RELEASE,projectInfo.lpszOutput_Release);
811            SetDlgItemText(hwnd,IDC_EDIT_DEBUG,projectInfo.lpszOutput_Debug);
812
813            //Unicode
814            if(temp_dwPjOption&PJ_OP_UNICODE)
815                SendDlgItemMessage(hwnd,IDC_UNICODE,BM_SETCHECK,BST_CHECKED,0);
816
817            break;
818        case WM_NOTIFY:
819            nmhdr=(NMHDR *)lParam;
820            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
821                GetDlgItemText(hwnd,IDC_EDIT_RELEASE,temp_lpszOutputRelease,MAX_PATH);
822                GetDlgItemText(hwnd,IDC_EDIT_DEBUG,temp_lpszOutputDebug,MAX_PATH);
823
824                //Unicode
825                if(SendDlgItemMessage(hwnd,IDC_UNICODE,BM_GETCHECK,0,0))
826                    temp_dwPjOption|=PJ_OP_UNICODE;
827                else temp_dwPjOption&=~PJ_OP_UNICODE;
828
829                if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
830            }
831            return 1;
832    }
833    return 0;
834}
835BOOL CALLBACK DlgProjectOption_Win32API(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
836    NMHDR *nmhdr;
837
838    switch(message){
839        case WM_INITDIALOG:
840            SetSwitch[1]=1;
841
842            if(temp_dwPjOption&PJ_OP_MMSYSTEM)
843                SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_SETCHECK,BST_CHECKED,0);
844            if(temp_dwPjOption&PJ_OP_COMMCTRL)
845                SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_SETCHECK,BST_CHECKED,0);
846            if(temp_dwPjOption&PJ_OP_RICHEDIT)
847                SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_SETCHECK,BST_CHECKED,0);
848            if(temp_dwPjOption&PJ_OP_WINSOCK)
849                SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_SETCHECK,BST_CHECKED,0);
850            break;
851        case WM_NOTIFY:
852            nmhdr=(NMHDR *)lParam;
853            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
854                if(SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_GETCHECK,0,0))
855                    temp_dwPjOption|=PJ_OP_MMSYSTEM;
856                else temp_dwPjOption&=~PJ_OP_MMSYSTEM;
857                if(SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_GETCHECK,0,0))
858                    temp_dwPjOption|=PJ_OP_COMMCTRL;
859                else temp_dwPjOption&=~PJ_OP_COMMCTRL;
860                if(SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_GETCHECK,0,0))
861                    temp_dwPjOption|=PJ_OP_RICHEDIT;
862                else temp_dwPjOption&=~PJ_OP_RICHEDIT;
863                if(SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_GETCHECK,0,0))
864                    temp_dwPjOption|=PJ_OP_WINSOCK;
865                else temp_dwPjOption&=~PJ_OP_WINSOCK;
866
867                if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
868            }
869            return 1;
870    }
871    return 0;
872}
873BOOL CALLBACK DlgProjectOption_Manifest(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
874    switch(message){
875        case WM_INITDIALOG:
876            SetSwitch[2]=1;
877
878            //パス
879            SetDlgItemText(hwnd,IDC_PATH,projectInfo.szManifestPath);
880
881            //マニフェストをリソースに埋め込む
882            if(temp_dwPjOption&PJ_OP_RC_MANIFEST)
883                SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_SETCHECK,BST_CHECKED,0);
884
885            SendMessage(hwnd,WM_COMMAND,IDC_RC_MANIFEST,0);
886
887            break;
888        case WM_COMMAND:
889            switch(LOWORD(wParam)){
890                case IDC_RC_MANIFEST:
891                    if(SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_GETCHECK,0,0)){
892                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PATH),1);
893                        EnableWindow(GetDlgItem(hwnd,IDC_PATH),1);
894                    }
895                    else{
896                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PATH),0);
897                        EnableWindow(GetDlgItem(hwnd,IDC_PATH),0);
898                    }
899                    return 1;
900            }
901            break;
902        case WM_NOTIFY:
903            NMHDR *nmhdr;
904            nmhdr=(NMHDR *)lParam;
905            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
906
907                //パス
908                GetDlgItemText(hwnd,IDC_PATH,temp_szManifestPath,MAX_PATH);
909
910                //マニフェストをリソースに埋め込む
911                if(SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_GETCHECK,0,0))
912                    temp_dwPjOption|=PJ_OP_RC_MANIFEST;
913                else temp_dwPjOption&=~PJ_OP_RC_MANIFEST;
914
915                if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
916            }
917            return 1;
918    }
919    return 0;
920}
921BOOL CALLBACK DlgProjectOption_Debug(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
922    NMHDR *nmhdr;
923    char temporary[MAX_PATH];
924
925    switch(message){
926        case WM_INITDIALOG:
927            SetSwitch[3]=1;
928
929            if( projectInfo.GetModuleType() != ActiveBasic::Common::TargetModuleType::Dll )
930            {
931                EnableWindow(GetDlgItem(hwnd,IDC_EXE_PATH),0);
932                EnableWindow(GetDlgItem(hwnd,IDC_DIR),0);
933            }
934
935            SetDlgItemText(hwnd,IDC_CMD_LINE,projectInfo.szCmdLine);
936            SetDlgItemText(hwnd,IDC_EXE_PATH,projectInfo.szExePath);
937
938            break;
939        case WM_COMMAND:
940            switch(LOWORD(wParam)){
941                case IDC_DIR:
942                    extern LPSTR ExeFileFilter;
943                    if(!GetFilePathDialog(hwnd,temporary,ExeFileFilter,"DLLデバッグ用の実行可能ファイルを指定してください",1)) break;
944
945                    SetDlgItemText(hwnd,IDC_EXE_PATH,temporary);
946                    return 1;
947            }
948            break;
949        case WM_NOTIFY:
950            nmhdr=(NMHDR *)lParam;
951            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
952                GetDlgItemText(hwnd,IDC_CMD_LINE,temp_szDebugCmdLine,8192);
953                GetDlgItemText(hwnd,IDC_EXE_PATH,temp_szDebugExePath,MAX_PATH);
954
955                if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
956            }
957            return 1;
958    }
959    return 0;
960}
961void DlgProjectOptionSetting(HWND hwnd){
962    PROPSHEETHEADER psh;
963    PROPSHEETPAGE psp[MAX_PJSETDLG];
964    HPROPSHEETPAGE hpsp[MAX_PJSETDLG];
965    int i;
966    memset(&SetSwitch,0,MAX_PJSETDLG);
967
968    //各ページのセッティング
969    i=0;
970    psp[i].dwSize=sizeof(PROPSHEETPAGE);
971    psp[i].dwFlags=PSP_DEFAULT;
972    psp[i].hInstance=hResInst;
973    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION1);
974    psp[i].pfnDlgProc=(DLGPROC)DlgProjectOption_Whole;
975    hpsp[i]=CreatePropertySheetPage(&psp[i]);
976    i++;
977    psp[i].dwSize=sizeof(PROPSHEETPAGE);
978    psp[i].dwFlags=PSP_DEFAULT;
979    psp[i].hInstance=hResInst;
980    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION2);
981    psp[i].pfnDlgProc=(DLGPROC)DlgProjectOption_Win32API;
982    hpsp[i]=CreatePropertySheetPage(&psp[i]);
983    i++;
984    psp[i].dwSize=sizeof(PROPSHEETPAGE);
985    psp[i].dwFlags=PSP_DEFAULT;
986    psp[i].hInstance=hResInst;
987    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION3);
988    psp[i].pfnDlgProc=(DLGPROC)DlgProjectOption_Manifest;
989    hpsp[i]=CreatePropertySheetPage(&psp[i]);
990    i++;
991    psp[i].dwSize=sizeof(PROPSHEETPAGE);
992    psp[i].dwFlags=PSP_DEFAULT;
993    psp[i].hInstance=hResInst;
994    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION4);
995    psp[i].pfnDlgProc=(DLGPROC)DlgProjectOption_Debug;
996    hpsp[i]=CreatePropertySheetPage(&psp[i]);
997
998    temp_dwPjOption=projectInfo.dwOption;
999
1000    memset(&psh,0,sizeof(PROPSHEETHEADER));
1001    psh.dwSize=sizeof(PROPSHEETHEADER);
1002    psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
1003    psh.phpage=hpsp;
1004    psh.hwndParent=hwnd;
1005    psh.pszCaption=STRING_PROJECTOPTION;    //"プロジェクト オプション"
1006    psh.nPages=MAX_PJSETDLG;
1007    psh.nStartPage=0;
1008    psh.ppsp=psp;
1009    PropertySheet(&psh);
1010}
1011
1012
1013/////////////////////
1014// オプション項目
1015/////////////////////
1016
1017BOOL bOptionWhole;
1018BOOL bOptionEditor;
1019BOOL bOptionColor;
1020BOOL bOptionToolbar;
1021BOOL bOptionRad;
1022BOOL bOptionWeb;
1023BOOL temp_bSaveCheckProject;
1024BOOL temp_bLineAdjust;
1025BOOL temp_bSaveTabToHead;
1026LOGFONT temp_lf,temp_HintFont;
1027int temp_TabSize;
1028BOOL temp_bEditor_LineNumber;
1029BOOL temp_bEditor_Ruler;
1030BOOL temp_bEditor_CaretLine_BackGround;
1031int temp_iMaxOneLineTextLength;
1032BOOL temp_bAutoIndent;
1033BOOL temp_bPasteIndent;
1034DWORD temp_dwParameterHint;
1035BOOL temp_bShowComplementWnd;
1036int temp_BackNum_PairStatementComplement;
1037BOOL temp_bSaveFindStr;
1038
1039CTheme obj_temp_Theme;
1040
1041BOOL temp_bCtrlKeyHyperLink;
1042BOOL temp_bSaveWebFindStr;
1043CDBDomain *pobj_temp_DBDomain;
1044
1045void SaveSetting(void){
1046    int i;
1047    if(bOptionWhole){
1048        //実行時の、プロジェクトの保存確認の有無
1049        pobj_nv->bSaveCheckProject=temp_bSaveCheckProject;
1050
1051        //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1052        pobj_nv->bSaveTabToHead=temp_bSaveTabToHead;
1053    }
1054    if(bOptionEditor){
1055        //フォント
1056        pobj_nv->lf=temp_lf;
1057
1058        //タブサイズ
1059        pobj_nv->TabSize=temp_TabSize;
1060
1061        //エディタの行番号を表示するかどうか
1062        pobj_nv->bEditor_LineNumber=temp_bEditor_LineNumber;
1063
1064        //エディタのルーラーを表示するかどうか
1065        pobj_nv->bEditor_Ruler=temp_bEditor_Ruler;
1066
1067        //カーソル行を強調表示するかどうか
1068        pobj_nv->bEditor_CaretLine_BackGround=temp_bEditor_CaretLine_BackGround;
1069
1070        //自動折り返し時の一行あたりの文字数
1071        pobj_nv->iMaxOneLineTextLength=temp_iMaxOneLineTextLength;
1072
1073        //コード補完機能
1074        pobj_nv->bShowComplementWnd=temp_bShowComplementWnd;
1075
1076        pobj_nv->BackNum_PairStatementComplement=temp_BackNum_PairStatementComplement;
1077
1078        //パラメータ ヒント
1079        pobj_nv->dwParameterHint=temp_dwParameterHint;
1080
1081        //パラメータ ヒント フォント
1082        extern METHODCHECKINFO MethodCheckInfo;
1083        MethodCheckInfo.LogFont=temp_HintFont;
1084        DeleteObject(MethodCheckInfo.hFont);
1085        DeleteObject(MethodCheckInfo.hBoldFont);
1086
1087        MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
1088        i=MethodCheckInfo.LogFont.lfWeight;
1089        MethodCheckInfo.LogFont.lfWeight=FW_BOLD;
1090        MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
1091        MethodCheckInfo.LogFont.lfWeight=i;
1092
1093        //自動インデント
1094        pobj_nv->bAutoIndent=temp_bAutoIndent;
1095
1096        //貼り付け時のインデント調整
1097        pobj_nv->bPasteIndent=temp_bPasteIndent;
1098
1099        //検索・置換文字列を保存するかどうか
1100        pobj_nv->bSaveFindStr=temp_bSaveFindStr;
1101
1102        RedrawAllWindow();      //すべてのウィンドウを再描画
1103    }
1104    if(bOptionColor){
1105        //カラーデザインを更新
1106        CTheme *pobj_Theme;
1107        pobj_Theme=pobj_DBTheme->dupli_check(obj_temp_Theme.m_name);
1108        *pobj_Theme=obj_temp_Theme;
1109        if(lstrcmp(pobj_Theme->m_name,THEMENAME_USER)==0){
1110            //ユーザー設定の場合は自動的にファイルに保存する
1111            pobj_Theme->save();
1112        }
1113
1114        //再描画
1115        SetTextEditColorDesign(&tci,pobj_Theme,1);
1116    }
1117    if(bOptionRad){
1118        //ライン アジャスタ
1119        pobj_nv->bLineAdjust=temp_bLineAdjust;
1120    }
1121    if(bOptionWeb){
1122        pobj_nv->bCtrlKeyHyperLink=temp_bCtrlKeyHyperLink;
1123
1124        pobj_nv->bSaveWebFindStr=temp_bSaveWebFindStr;
1125
1126        //SideWebウィンドウを再表示
1127        //delete pobj_SideWeb;
1128        //pobj_SideWeb=new CSideWeb(hOwner);
1129        //ActiveBasic::IDE::Program::mainFrame.Resized();
1130    }
1131    return;
1132}
1133BOOL CALLBACK Dlg_Option_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1134    NMHDR *nmhdr;
1135    switch(message){
1136        case WM_INITDIALOG:
1137            SetPosCenter(GetParent(hwnd));
1138
1139            bOptionWhole=1;
1140
1141            //実行時の、プロジェクトの保存確認の有無
1142            if(pobj_nv->bSaveCheckProject) SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_SETCHECK,BST_CHECKED,0);
1143
1144            //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1145            if(pobj_nv->bSaveTabToHead) SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_SETCHECK,BST_CHECKED,0);
1146
1147            break;
1148        case WM_COMMAND:
1149            switch(LOWORD(wParam)){
1150                case IDC_LINKFILE:
1151                    ExtensionLink(hwnd);
1152                    return 1;
1153            }
1154            break;
1155        case WM_NOTIFY:
1156            nmhdr=(NMHDR *)lParam;
1157            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1158                //実行時の、プロジェクトの保存確認の有無
1159                if(SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_GETCHECK,0,0)) temp_bSaveCheckProject=1;
1160                else temp_bSaveCheckProject=0;
1161
1162                //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1163                if(SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_GETCHECK,0,0)) temp_bSaveTabToHead=1;
1164                else temp_bSaveTabToHead=0;
1165
1166                if(nmhdr->code==PSN_APPLY) SaveSetting();
1167            }
1168            return 1;
1169        case WM_HELP:
1170            HELPINFO *lpHelpInfo;
1171            lpHelpInfo = (HELPINFO *)lParam;
1172
1173            HH_POPUP hp;
1174            memset(&hp, 0, sizeof(HH_POPUP));
1175            hp.cbStruct = sizeof(HH_POPUP);
1176            hp.pt.x = lpHelpInfo->MousePos.x;
1177            hp.pt.y = lpHelpInfo->MousePos.y+10;
1178            hp.clrForeground = RGB(0, 0, 0);
1179            hp.clrBackground = -1;
1180            hp.rcMargins.left = -1;
1181            hp.rcMargins.right = -1;
1182            hp.rcMargins.top = -1;
1183            hp.rcMargins.bottom = -1;
1184            hp.idString = 0;
1185            hp.pszFont="MS Sans Serif,10";
1186
1187            switch(lpHelpInfo->iCtrlId){
1188                case IDC_SAVECHECK:
1189#if defined(JPN)
1190                    //日本語
1191                    hp.pszText="このチェックボックスをオンにすると、プロジェクトが未保存の状態であるとき、コンパイル時に保存確認のダイアログボックスが表示されるようになります。\nチェックをオフにすると、プロジェクトはコンパイル時に自動的に保存されます(デフォルトはオフです)。";
1192#else
1193                    //英語
1194                    hp.pszText="When the compiling button is clicked, if this check is on, the DialogBox to save modification is displayed.\nIf this check is off, the project is saved automatically(Default).";
1195#endif
1196                    break;
1197                case IDC_LINKFILE:
1198#if defined(JPN)
1199                    //日本語
1200                    hp.pszText="ファイルの関連付けを行います。";
1201#else
1202                    //英語
1203                    hp.pszText="Relate the files.";
1204#endif
1205                    break;
1206                default:
1207                    hp.pszText="";
1208                    break;
1209            }
1210            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1211            return 1;
1212    }
1213    return 0;
1214}
1215BOOL CALLBACK Dlg_Option_Editor(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1216    extern METHODCHECKINFO MethodCheckInfo;
1217    char str[255];
1218    NMHDR *nmhdr;
1219    switch(message){
1220        case WM_INITDIALOG:
1221            bOptionEditor=1;
1222
1223            //フォント
1224            sprintf(str,"%s",pobj_nv->lf.lfFaceName);
1225            SetDlgItemText(hwnd,IDC_SETFONT,str);
1226            temp_lf=pobj_nv->lf;
1227
1228            //タブサイズ
1229            sprintf(str,"%d",pobj_nv->TabSize);
1230            SetDlgItemText(hwnd,IDC_TABSIZE,str);
1231
1232            //エディタの行番号を表示するかどうか
1233            if(pobj_nv->bEditor_LineNumber) SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_SETCHECK,BST_CHECKED,0);
1234
1235            //エディタのルーラーを表示するかどうか
1236            if(pobj_nv->bEditor_Ruler) SendDlgItemMessage(hwnd,IDC_RULER,BM_SETCHECK,BST_CHECKED,0);
1237
1238            //カーソル行を強調表示するかどうか
1239            if(pobj_nv->bEditor_CaretLine_BackGround) SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_SETCHECK,BST_CHECKED,0);
1240
1241#ifdef THETEXT
1242            //自動折り返し時の一行あたりの文字数
1243            sprintf(str,"%d",pobj_nv->iMaxOneLineTextLength);
1244            SetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str);
1245#endif
1246
1247            //自動インデント
1248            if(pobj_nv->bAutoIndent) SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_SETCHECK,BST_CHECKED,0);
1249
1250            //貼り付け時のインデント調整
1251            if(pobj_nv->bPasteIndent) SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_SETCHECK,BST_CHECKED,0);
1252
1253            //コード補完
1254            if(pobj_nv->bShowComplementWnd)
1255                SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_SETCHECK,BST_CHECKED,0);
1256
1257            //ペアステートメント補完
1258            SendDlgItemMessage(hwnd,IDC_BACKNUM,EM_SETLIMITTEXT,4,0);
1259            if(pobj_nv->BackNum_PairStatementComplement){
1260                SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_SETCHECK,BST_CHECKED,0);
1261                sprintf(str,"%d",pobj_nv->BackNum_PairStatementComplement);
1262                SetDlgItemText(hwnd,IDC_BACKNUM,str);
1263            }
1264
1265            SendMessage(hwnd,WM_COMMAND,IDC_COMPLEMENT,0);
1266
1267            //パラメータ ヒント
1268            if(pobj_nv->dwParameterHint){
1269                SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_SETCHECK,BST_CHECKED,0);
1270                if(pobj_nv->dwParameterHint==1)
1271                    SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1272                else
1273                    SendDlgItemMessage(hwnd,IDC_STATUSBAR,BM_SETCHECK,BST_CHECKED,0);
1274                SendMessage(hwnd,WM_COMMAND,IDC_PARAMHINT,0);
1275            }
1276            else SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1277
1278            //パラメータ ヒント フォント
1279            sprintf(str,"%s",MethodCheckInfo.LogFont.lfFaceName);
1280            SetDlgItemText(hwnd,IDC_HINTFONT,str);
1281            temp_HintFont=MethodCheckInfo.LogFont;
1282
1283            //検索・置換文字列を保存するかどうか
1284            if(pobj_nv->bSaveFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_SETCHECK,BST_CHECKED,0);
1285
1286            break;
1287        case WM_COMMAND:
1288            switch(LOWORD(wParam)){
1289                case IDC_SETFONT:
1290                    if(!SetFontDialog(hwnd,&temp_lf,1)) return 1;
1291                    sprintf(str,"%s",temp_lf.lfFaceName);
1292                    SetDlgItemText(hwnd,IDC_SETFONT,str);
1293                    return 1;
1294                case IDC_HINTFONT:
1295                    if(!SetFontDialog(hwnd,&temp_HintFont,0)) return 1;
1296                    sprintf(str,"%s",temp_HintFont.lfFaceName);
1297                    SetDlgItemText(hwnd,IDC_HINTFONT,str);
1298                    return 1;
1299
1300                case IDC_ISAUTOINDENT:
1301                case IDC_COMPLEMENT:
1302                    if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)&&
1303                        SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0)){
1304                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),1);
1305                        SendMessage(hwnd,WM_COMMAND,IDC_PAIRSTATEMENT,0);
1306                    }
1307                    else{
1308                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),0);
1309                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1310                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1311                    }
1312                    return 1;
1313
1314                case IDC_PAIRSTATEMENT:
1315                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1316                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),1);
1317                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),1);
1318
1319                        if(GetWindowTextLength(GetDlgItem(hwnd,IDC_BACKNUM))==0)
1320                            SetDlgItemText(hwnd,IDC_BACKNUM,"100");
1321                    }
1322                    else{
1323                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1324                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1325                    }
1326                    return 1;
1327
1328                case IDC_PARAMHINT:
1329                    if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1330                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),1);
1331                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),1);
1332                        if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)){
1333                            EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1334                            EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1335                        }
1336                    }
1337                    else{
1338                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),0);
1339                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),0);
1340                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1341                        EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1342                    }
1343                    return 1;
1344                case IDC_POPUP:
1345                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1346                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1347                    return 1;
1348                case IDC_STATUSBAR:
1349                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1350                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1351                    return 1;
1352            }
1353            break;
1354        case WM_NOTIFY:
1355            nmhdr=(NMHDR *)lParam;
1356            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1357                GetDlgItemText(hwnd,IDC_TABSIZE,str,255);
1358                sscanf(str,"%d",&temp_TabSize);
1359
1360                //エディタの行番号を表示するかどうか
1361                if(SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_GETCHECK,0,0)) temp_bEditor_LineNumber=1;
1362                else temp_bEditor_LineNumber=0;
1363
1364                //エディタのルーラーを表示するかどうか
1365                if(SendDlgItemMessage(hwnd,IDC_RULER,BM_GETCHECK,0,0)) temp_bEditor_Ruler=1;
1366                else temp_bEditor_Ruler=0;
1367
1368                //カーソル行を強調表示するかどうか
1369                if(SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_GETCHECK,0,0)) temp_bEditor_CaretLine_BackGround=1;
1370                else temp_bEditor_CaretLine_BackGround=0;
1371
1372#ifdef THETEXT
1373                //自動折り返し時の一行あたりの文字数
1374                GetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str,255);
1375                sscanf(str,"%d",&temp_iMaxOneLineTextLength);
1376                if(temp_iMaxOneLineTextLength<=0){
1377                    temp_iMaxOneLineTextLength=75;
1378                }
1379#endif
1380
1381                //自動インデント
1382                if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)) temp_bAutoIndent=1;
1383                else temp_bAutoIndent=0;
1384
1385                //貼り付け時のインデント調整
1386                if(SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_GETCHECK,0,0)) temp_bPasteIndent=1;
1387                else temp_bPasteIndent=0;
1388
1389                //コード補完機能
1390                if(SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0))
1391                    temp_bShowComplementWnd=1;
1392                else temp_bShowComplementWnd=0;
1393
1394                //ペアステートメント補完
1395                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_PAIRSTATEMENT))){
1396                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1397                        GetDlgItemText(hwnd,IDC_BACKNUM,str,255);
1398                        sscanf(str,"%d",&temp_BackNum_PairStatementComplement);
1399                    }
1400                    else temp_BackNum_PairStatementComplement=0;
1401                }
1402                else temp_BackNum_PairStatementComplement=0;
1403
1404                //パラメータヒント
1405                if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1406                    if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)) temp_dwParameterHint=1;
1407                    else temp_dwParameterHint=2;
1408                }
1409                else temp_dwParameterHint=0;
1410
1411                if(SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_GETCHECK,0,0))
1412                    temp_bSaveFindStr=1;
1413                else temp_bSaveFindStr=0;
1414
1415                if(nmhdr->code==PSN_APPLY) SaveSetting();
1416            }
1417            return 1;
1418
1419        case WM_HELP:
1420            HELPINFO *lpHelpInfo;
1421            lpHelpInfo = (HELPINFO *)lParam;
1422
1423            HH_POPUP hp;
1424            memset(&hp, 0, sizeof(HH_POPUP));
1425            hp.cbStruct = sizeof(HH_POPUP);
1426            hp.pt.x = lpHelpInfo->MousePos.x;
1427            hp.pt.y = lpHelpInfo->MousePos.y+10;
1428            hp.clrForeground = RGB(0, 0, 0);
1429            hp.clrBackground = -1;
1430            hp.rcMargins.left = -1;
1431            hp.rcMargins.right = -1;
1432            hp.rcMargins.top = -1;
1433            hp.rcMargins.bottom = -1;
1434            hp.idString = 0;
1435            hp.pszFont="MS Sans Serif,10";
1436
1437            switch(lpHelpInfo->iCtrlId){
1438                case IDC_STATIC_SETFONT:
1439                case IDC_SETFONT:
1440#if defined(JPN)
1441                    //日本語
1442                    hp.pszText="エディタで使用するフォントを選択することができます。";
1443#else
1444                    //英語
1445                    hp.pszText="Choose the font displayed on the editor";
1446#endif
1447                    break;
1448                case IDC_STATIC_TABSIZE:
1449                case IDC_TABSIZE:
1450#if defined(JPN)
1451                    //日本語
1452                    hp.pszText="タブサイズを指定します。デフォルト値は4です。";
1453#else
1454                    //英語
1455                    hp.pszText="Set the tab size. Value of default is 4.";
1456#endif
1457                    break;
1458                case IDC_ISAUTOINDENT:
1459#if defined(JPN)
1460                    //日本語
1461                    hp.pszText="このチェックをオンにすると、必要に応じて、自動的にインデント用のタブ文字が挿入されます。";
1462#else
1463                    //英語
1464                    hp.pszText="If this check is on, the indent tabs will be inserted automatically.";
1465#endif
1466                    break;
1467                case IDC_COMPLEMENT:
1468#if defined(JPN)
1469                    //日本語
1470                    hp.pszText="このチェックをオンにすると、クラスまたは構造体のメンバを入力するときに、予想されるキーワードがリスト表示されます。";
1471#else
1472                    //英語
1473                    hp.pszText="If this check is on, the member expected is displayed in a list when inputting the member of the class object.";
1474#endif
1475                    break;
1476                case IDC_PARAMHINT:
1477#if defined(JPN)
1478                    //日本語
1479                    hp.pszText="このチェックをオンにすると、関数またはステートメントを入力するときに、該当するパラメータのヒント文字列が表示されます。文字列の表示方法はポップアップまたはステータスバーのいずれかを選択することができます。";
1480#else
1481                    //英語
1482                    hp.pszText="If this check is on, parameter hint is displayed when inputting a function or a statement.";
1483#endif
1484                    break;
1485                case IDC_POPUP:
1486#if defined(JPN)
1487                    //日本語
1488                    hp.pszText="パラメータヒントをポップアップ表示するときは、ここをチェックします。";
1489#else
1490                    //英語
1491                    hp.pszText="If this check is on, parameter hint is displayed on a popup window.";
1492#endif
1493                    break;
1494                case IDC_STATUSBAR:
1495#if defined(JPN)
1496                    //日本語
1497                    hp.pszText="パラメータヒントをステータスバーに表示するときは、ここをチェックします。";
1498#else
1499                    //英語
1500                    hp.pszText="If this check is on, parameter hint is displayed in a status bar.";
1501#endif
1502                    break;
1503                case IDC_STATIC_HINTFONT:
1504                case IDC_HINTFONT:
1505#if defined(JPN)
1506                    //日本語
1507                    hp.pszText="ポップアップ表示されるパラメータヒントのフォントを指定します。";
1508#else
1509                    //英語
1510                    hp.pszText="Choose the font displayed on the popup hint.";
1511#endif
1512                    break;
1513                default:
1514                    hp.pszText="";
1515                    break;
1516            }
1517            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1518            return 1;
1519    }
1520    return 0;
1521}
1522COLORREF GetColorFromSelection(int iPos,TEXTEDIT_COLOR_INFO *ptci){
1523    if(iPos==0) return ptci->rgbComment;
1524    else if(iPos==1) return ptci->rgbString;
1525    else if(iPos==2) return ptci->rgbDefault;
1526    else if(iPos==3) return ptci->rgbStatement;
1527    else if(iPos==4) return ptci->rgbCursorBack;
1528    else if(iPos==5) return ptci->rgbBackground;
1529    return 0;
1530}
1531void SetColorFromSelection(int iPos,COLORREF rgb,TEXTEDIT_COLOR_INFO *ptci){
1532    if(iPos==0) ptci->rgbComment=rgb;
1533    else if(iPos==1) ptci->rgbString=rgb;
1534    else if(iPos==2) ptci->rgbDefault=rgb;
1535    else if(iPos==3) ptci->rgbStatement=rgb;
1536    else if(iPos==4) ptci->rgbCursorBack=rgb;
1537    else if(iPos==5) ptci->rgbBackground=rgb;
1538}
1539#ifdef THETEXT
1540char szNewThemeName[MAX_PATH];
1541BOOL bThemeOverwirte;
1542BOOL CALLBACK DlgOptionThemeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1543    switch(message){
1544        case WM_INITDIALOG:
1545            SetPosCenter(hwnd);
1546
1547            SendMessage(hwnd,WM_COMMAND,IDC_NAME,0);
1548            SetFocus(GetDlgItem(hwnd,IDC_NAME));
1549            break;
1550        case WM_COMMAND:
1551            switch(LOWORD(wParam)){
1552                case IDOK:
1553                    GetDlgItemText(hwnd,IDC_NAME,szNewThemeName,MAX_PATH);
1554
1555                    if(SendDlgItemMessage(hwnd,IDC_OVERWRITE,BM_GETCHECK,0,0))
1556                        bThemeOverwirte=1;
1557                    else bThemeOverwirte=0;
1558
1559                    if(pobj_DBTheme->dupli_check(szNewThemeName)){
1560                        if(!bThemeOverwirte){
1561                            char temporary[MAX_PATH];
1562                            sprintf(temporary,"テーマ \"%s\" は既に存在します。「上書きを許可する」をチェックした後、保存してください。",szNewThemeName);
1563                            MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK);
1564                            return 1;
1565                        }
1566                    }
1567
1568                    EndDialog(hwnd,1);
1569                    return 1;
1570                case IDCANCEL:
1571                    EndDialog(hwnd,0);
1572                    return 1;
1573                case IDC_NAME:
1574                    if(GetWindowTextLength(GetDlgItem(hwnd,IDC_NAME)))
1575                        EnableWindow(GetDlgItem(hwnd,IDOK),1);
1576                    else EnableWindow(GetDlgItem(hwnd,IDOK),0);
1577                    return 1;
1578            }
1579            break;
1580    }
1581    return 0;
1582}
1583#endif
1584BOOL CALLBACK Dlg_Option_Color(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1585    int iPos;
1586    CTheme *pobj_Theme;
1587    char temporary[MAX_PATH];
1588    switch(message){
1589        case WM_INITDIALOG:
1590            bOptionColor=1;
1591
1592            //一時保存値を初期化
1593            pobj_Theme=pobj_DBTheme->GetActiveTheme();
1594            obj_temp_Theme=*pobj_Theme;
1595
1596            //指定する部分
1597            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"コメント");
1598            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"ダブルクォート内の文字列");
1599            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"通常の文字");
1600            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"特殊ステートメント");
1601            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(カーソル行)");
1602            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(一般)");
1603            SendDlgItemMessage(hwnd,IDC_TARGET,CB_SETCURSEL,0,0);
1604
1605
1606            //テーマ名をコンボボックスにセット
1607            pobj_DBTheme->ResetTheme_ToComboBox(GetDlgItem(hwnd,IDC_THEME));
1608
1609
1610            SendMessage(hwnd,WM_COMMAND,MAKELONG(IDC_THEME,CBN_SELCHANGE),0);
1611            break;
1612
1613        case WM_COMMAND:
1614            switch(LOWORD(wParam)){
1615#ifdef THETEXT
1616                case IDC_SAVE:
1617                    if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_OPTION_THEME_SAVE),hwnd,(DLGPROC)DlgOptionThemeSave)) return 1;
1618
1619                    pobj_Theme=pobj_DBTheme->dupli_check(szNewThemeName);
1620                    if(pobj_Theme){
1621                    }
1622                    else{
1623                        //新規に追加
1624                        pobj_Theme=pobj_DBTheme->add(0,szNewThemeName);
1625                    }
1626                    *pobj_Theme=obj_temp_Theme;
1627                    lstrcpy(pobj_Theme->m_name,szNewThemeName);
1628
1629                    //ファイルに保存
1630                    pobj_Theme->save();
1631
1632                    //テーマ コンボボックスのカーソル位置をセット
1633                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),szNewThemeName);
1634
1635                    return 1;
1636#endif //THETEXT
1637                case IDC_THEME:
1638                    if(HIWORD(wParam)==CBN_SELCHANGE){
1639                        if(!SendDlgItemMessage(hwnd,IDC_THEME,CB_GETLBTEXT,
1640                            SendDlgItemMessage(hwnd,IDC_THEME,CB_GETCURSEL,0,0),
1641                            (LPARAM)temporary)) return 1;
1642
1643                        pobj_Theme=pobj_DBTheme->dupli_check(temporary);
1644                        obj_temp_Theme=*pobj_Theme;
1645
1646                        InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1647                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1648                    }
1649                    return 1;
1650                case IDC_TARGET:
1651                    if(HIWORD(wParam)==CBN_SELCHANGE){
1652                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1653                    }
1654                    return 1;
1655                case IDC_COLOR_BUTTON:
1656                    iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1657
1658                    CHOOSECOLOR cc;
1659                    static COLORREF CustColors[16];
1660                    cc.lStructSize=sizeof(CHOOSECOLOR);
1661                    cc.hwndOwner=hwnd;
1662                    cc.rgbResult=GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo);
1663                    cc.lpCustColors=CustColors;
1664                    cc.Flags=CC_FULLOPEN | CC_RGBINIT;
1665                    if(!ChooseColor(&cc)) return 1;
1666
1667                    SetColorFromSelection(iPos,cc.rgbResult,&obj_temp_Theme.TextColorInfo);
1668
1669                    InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1670                    InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1671
1672                    lstrcpy(obj_temp_Theme.m_name,THEMENAME_USER);
1673
1674                    //ユーザー設定を選択
1675                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),THEMENAME_USER);
1676                    return 1;
1677            }
1678            break;
1679
1680        case WM_NOTIFY:
1681            NMHDR *nmhdr;
1682            nmhdr=(NMHDR *)lParam;
1683
1684            if(nmhdr->code==PSN_APPLY) SaveSetting();
1685            return 1;
1686
1687        case WM_DRAWITEM:
1688            LPDRAWITEMSTRUCT pds;
1689            pds=(LPDRAWITEMSTRUCT)lParam;
1690
1691            HBRUSH hBrush,hOldBrush;
1692
1693            if(wParam==IDC_COLOR_BUTTON){
1694                iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1695
1696                //////////////
1697                // 色を描画
1698                //////////////
1699
1700                //ペンとブラシを生成
1701                HPEN hPen,hOldPen;
1702                hPen=(HPEN)GetStockObject(WHITE_PEN);
1703                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_COLOR_BUTTON)))
1704                    hBrush=CreateSolidBrush(GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo));
1705                else
1706                    hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
1707
1708                //塗りつぶす
1709                hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
1710                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1711                Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
1712                SelectObject(pds->hDC,hOldPen);
1713                SelectObject(pds->hDC,hOldBrush);
1714
1715                //ブラシを破棄
1716                DeleteObject(hBrush);
1717            }
1718            else if(wParam==IDC_SAMPLE){
1719                TEXTEDIT_COLOR_INFO ColorInfo;
1720                ColorInfo=obj_temp_Theme.TextColorInfo;
1721
1722                //背景色で塗りつぶす
1723                hBrush=CreateSolidBrush(ColorInfo.rgbBackground);
1724                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1725                PatBlt(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom,PATCOPY);
1726                SelectObject(pds->hDC,hOldBrush);
1727                DeleteObject(hBrush);
1728
1729                //フォントを選択
1730                extern HFONT hFont_TextEdit;
1731                HFONT hOldFont;
1732                hOldFont=(HFONT)SelectObject(pds->hDC,hFont_TextEdit);
1733
1734                ///////////////////
1735                // サンプルを描画
1736                ///////////////////
1737
1738                extern int font_width,font_height;
1739                int x=0,y=0;
1740
1741#ifdef THETEXT
1742#define SAMPLESTR_STATEMENT "div"
1743#define SAMPLESTR_COMMENT "<!-- この行にカーソルがあります -->"
1744#define SAMPLESTR_DEFAULT "<    style=               >Hello World!</   >"
1745#define SAMPLESTR_STRING "\"color:#123456\""
1746
1747                y+=font_height;
1748
1749                //"<    style=               >Hello World!</   >"
1750                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1751                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1752                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1753
1754                //div
1755                x=font_width*1;
1756                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1757                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1758                x=font_width*41;
1759                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1760
1761                //"color:#123456"
1762                x=font_width*11;
1763                SetTextColor(pds->hDC,ColorInfo.rgbString);
1764                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1765
1766                x=0;
1767                y+=font_height*2;
1768
1769                //"'この行にカーソルがあります
1770                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1771                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1772                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1773                SelectObject(pds->hDC,hOldBrush);
1774                DeleteObject(hBrush);
1775
1776                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1777                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1778                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1779#else
1780#define SAMPLESTR_STATEMENT "#console"
1781#define SAMPLESTR_COMMENT "'この行にカーソルがあります"
1782#define SAMPLESTR_DEFAULT "Print "
1783#define SAMPLESTR_STRING "\"Hello World!\""
1784
1785                //"#console"
1786                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1787                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1788                TextOut(pds->hDC,0,0,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1789                y+=font_height*2;
1790
1791                //"'この行にカーソルがあります
1792                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1793                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1794                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1795                SelectObject(pds->hDC,hOldBrush);
1796                DeleteObject(hBrush);
1797
1798                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1799                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1800                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1801                y+=font_height*2;
1802
1803                //Print
1804                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1805                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1806                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1807                x+=lstrlen(SAMPLESTR_DEFAULT)*font_width;
1808
1809                //"Hello World!"
1810                SetTextColor(pds->hDC,ColorInfo.rgbString);
1811                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1812#endif
1813
1814                SelectObject(pds->hDC,hOldFont);
1815            }
1816            return 0;
1817
1818        case WM_HELP:
1819            HELPINFO *lpHelpInfo;
1820            lpHelpInfo = (HELPINFO *)lParam;
1821
1822            HH_POPUP hp;
1823            memset(&hp, 0, sizeof(HH_POPUP));
1824            hp.cbStruct = sizeof(HH_POPUP);
1825            hp.pt.x = lpHelpInfo->MousePos.x;
1826            hp.pt.y = lpHelpInfo->MousePos.y+10;
1827            hp.clrForeground = RGB(0, 0, 0);
1828            hp.clrBackground = -1;
1829            hp.rcMargins.left = -1;
1830            hp.rcMargins.right = -1;
1831            hp.rcMargins.top = -1;
1832            hp.rcMargins.bottom = -1;
1833            hp.idString = 0;
1834            hp.pszFont="MS Sans Serif,10";
1835
1836            switch(lpHelpInfo->iCtrlId){
1837                case IDC_TARGET:
1838                    hp.pszText="どの部分の色を設定するかを選択します。";
1839                    break;
1840                default:
1841                    hp.pszText="";
1842                    break;
1843            }
1844            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1845            return 1;
1846    }
1847    return 0;
1848}
1849BOOL CALLBACK Dlg_Option_Toolbar(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1850    switch(message){
1851        case WM_INITDIALOG:
1852            bOptionToolbar=1;
1853            break;
1854        case WM_COMMAND:
1855            switch(LOWORD(wParam)){
1856                case IDC_RESETTOOLBAR:
1857                    //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1858                    if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1859
1860                    //レバーコントロールを再生成
1861                    pobj_Rebar->ResetInitRebar();
1862
1863                    //メニュー状態を設定
1864                    ResetState_DocMenu();
1865                    return 1;
1866            }
1867            break;
1868
1869        case WM_HELP:
1870            HELPINFO *lpHelpInfo;
1871            lpHelpInfo = (HELPINFO *)lParam;
1872
1873            HH_POPUP hp;
1874            memset(&hp, 0, sizeof(HH_POPUP));
1875            hp.cbStruct = sizeof(HH_POPUP);
1876            hp.pt.x = lpHelpInfo->MousePos.x;
1877            hp.pt.y = lpHelpInfo->MousePos.y+10;
1878            hp.clrForeground = RGB(0, 0, 0);
1879            hp.clrBackground = -1;
1880            hp.rcMargins.left = -1;
1881            hp.rcMargins.right = -1;
1882            hp.rcMargins.top = -1;
1883            hp.rcMargins.bottom = -1;
1884            hp.idString = 0;
1885            hp.pszFont="MS Sans Serif,10";
1886
1887            switch(lpHelpInfo->iCtrlId){
1888                case IDC_RESETTOOLBAR:
1889#if defined(JPN)
1890                    //日本語
1891                    hp.pszText="ツールバーの配置を初期状態に戻します。";
1892#else
1893                    //英語
1894                    hp.pszText="Reset the state of the toolbar.";
1895#endif
1896                    break;
1897                default:
1898                    hp.pszText="";
1899                    break;
1900            }
1901            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1902            return 1;
1903    }
1904    return 0;
1905}
1906BOOL CALLBACK Dlg_Option_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1907    NMHDR *nmhdr;
1908    switch(message){
1909        case WM_INITDIALOG:
1910
1911            bOptionRad=1;
1912
1913            //ライン アジャスタ
1914            if(pobj_nv->bLineAdjust) SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_SETCHECK,BST_CHECKED,0);
1915
1916            break;
1917        case WM_NOTIFY:
1918            nmhdr=(NMHDR *)lParam;
1919            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1920                if(SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_GETCHECK,0,0)) temp_bLineAdjust=1;
1921                else temp_bLineAdjust=0;
1922
1923                if(nmhdr->code==PSN_APPLY) SaveSetting();
1924            }
1925            return 1;
1926
1927        case WM_HELP:
1928            HELPINFO *lpHelpInfo;
1929            lpHelpInfo = (HELPINFO *)lParam;
1930
1931            HH_POPUP hp;
1932            memset(&hp, 0, sizeof(HH_POPUP));
1933            hp.cbStruct = sizeof(HH_POPUP);
1934            hp.pt.x = lpHelpInfo->MousePos.x;
1935            hp.pt.y = lpHelpInfo->MousePos.y+10;
1936            hp.clrForeground = RGB(0, 0, 0);
1937            hp.clrBackground = -1;
1938            hp.rcMargins.left = -1;
1939            hp.rcMargins.right = -1;
1940            hp.rcMargins.top = -1;
1941            hp.rcMargins.bottom = -1;
1942            hp.idString = 0;
1943            hp.pszFont="MS Sans Serif,10";
1944
1945            switch(lpHelpInfo->iCtrlId){
1946                case IDC_LINEADJUST:
1947#if defined(JPN)
1948                    //日本語
1949                    hp.pszText="このチェックボックスをオンにすると、ラインアジャスタ機能が有効になります。ラインアジャスタ機能をオンにすると、マウスを使ってコントロールの移動を行う際に他のコントロール同士との位置合わせが容易に行えるようになります。";
1950#else
1951                    //英語
1952                    hp.pszText="If this check is on, line adjuster becomes effective.";
1953#endif
1954                    break;
1955                default:
1956                    hp.pszText="";
1957                    break;
1958            }
1959            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1960            return 1;
1961    }
1962    return 0;
1963}
1964char szDomainAdd_Name[255];
1965char szDomainAdd_Domain[255];
1966BOOL CALLBACK Dlg_Option_Web_Domain_Add(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1967    switch(message){
1968        case WM_INITDIALOG:
1969            SetPosCenter(hwnd);
1970            SetFocus(GetDlgItem(hwnd,IDC_NAME));
1971
1972            if(lParam!=-1){
1973                SetWindowText(hwnd,"Web検索用ドメインを編集");
1974                SetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name);
1975                SetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain);
1976            }
1977            break;
1978        case WM_COMMAND:
1979            switch(LOWORD(wParam)){
1980                case IDOK:
1981                    GetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name,255);
1982                    GetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain,255);
1983                    EndDialog(hwnd,1);
1984                    return 1;
1985                case IDCANCEL:
1986                    EndDialog(hwnd,0);
1987                    return 1;
1988            }
1989            return 0;
1990    }
1991    return 0;
1992}
1993BOOL CALLBACK Dlg_Option_Web(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1994    HWND hListView;
1995    NMHDR *nmhdr;
1996    int i;
1997    char temporary[255];
1998    switch(message){
1999        case WM_INITDIALOG:
2000
2001            bOptionWeb=1;
2002
2003
2004            //Ctrlキーによるハイパーリンク
2005            if(pobj_nv->bCtrlKeyHyperLink) SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_SETCHECK,BST_CHECKED,0);
2006
2007            //Web検索文字列を保存するかどうか
2008            if(pobj_nv->bSaveWebFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_SETCHECK,BST_CHECKED,0);
2009
2010
2011            //拡張スタイル
2012            DWORD dwStyle;
2013            hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2014            dwStyle=ListView_GetExtendedListViewStyle(hListView);
2015            dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
2016            ListView_SetExtendedListViewStyle(hListView,dwStyle);
2017
2018            LV_COLUMN ListView_Column;
2019            ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
2020            ListView_Column.fmt=LVCFMT_LEFT;
2021
2022            ListView_Column.cx=80;
2023            ListView_Column.pszText="表示名";
2024            ListView_Column.iSubItem=0;
2025            ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
2026
2027            ListView_Column.cx=200;
2028            ListView_Column.pszText="ドメイン";
2029            ListView_Column.iSubItem++;
2030            ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
2031
2032            //一時オブジェクトにコピー
2033            pobj_temp_DBDomain->copy_get(pobj_nv->pobj_DBDomain);
2034
2035            //ドメインリストにデータをセット
2036            pobj_temp_DBDomain->SetListView(hListView);
2037
2038            break;
2039        case WM_COMMAND:
2040            switch(LOWORD(wParam)){
2041                case IDC_ADD:
2042                    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,-1)) return 1;
2043
2044                    pobj_temp_DBDomain->add(szDomainAdd_Name,szDomainAdd_Domain);
2045                    return 1;
2046                case IDC_DELETE:
2047                    hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2048                    for(i=0;i<ListView_GetItemCount(hListView);i++){
2049                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
2050                            ListView_GetItemText(hListView,i,0,temporary,255);
2051                            pobj_temp_DBDomain->del(temporary);
2052                            break;
2053                        }
2054                    }
2055                    return 1;
2056                case IDC_EDIT:
2057                    hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2058                    for(i=0;i<ListView_GetItemCount(hListView);i++){
2059                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
2060                            ListView_GetItemText(hListView,i,0,temporary,255);
2061
2062                            ListView_GetItemText(hListView,i,0,szDomainAdd_Name,255);
2063                            ListView_GetItemText(hListView,i,1,szDomainAdd_Domain,255);
2064                            lstrcpy(temporary,szDomainAdd_Name);
2065                            if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,i)) return 1;
2066
2067                            pobj_temp_DBDomain->change(temporary,szDomainAdd_Name,szDomainAdd_Domain);
2068                        }
2069                    }
2070                    return 1;
2071            }
2072            return 0;
2073        case WM_NOTIFY:
2074            nmhdr=(NMHDR *)lParam;
2075            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
2076
2077                //Ctrlキーによるハイパーリンク
2078                if(SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_GETCHECK,0,0)) temp_bCtrlKeyHyperLink=1;
2079                else temp_bCtrlKeyHyperLink=0;
2080
2081                //Web検索文字列を保存するかどうか
2082                if(SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_GETCHECK,0,0)) temp_bSaveWebFindStr=1;
2083                else temp_bSaveWebFindStr=0;
2084
2085                if(nmhdr->code==PSN_APPLY) SaveSetting();
2086            }
2087            if(nmhdr->idFrom==IDC_DOMAIN_LIST){
2088                if(nmhdr->code==NM_DBLCLK){
2089                    LPNMLISTVIEW lpnmListView;
2090                    lpnmListView=(LPNMLISTVIEW)lParam;
2091
2092                    char szBeforeName[255];
2093                    ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,0,szDomainAdd_Name,255);
2094                    ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,1,szDomainAdd_Domain,255);
2095                    lstrcpy(szBeforeName,szDomainAdd_Name);
2096                    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,lpnmListView->iItem)) return 1;
2097
2098                    pobj_temp_DBDomain->change(szBeforeName,szDomainAdd_Name,szDomainAdd_Domain);
2099                }
2100            }
2101            return 1;
2102    }
2103    return 0;
2104}
2105void DlgOptionSetting(HWND hwnd){
2106    PROPSHEETHEADER psh;
2107#define MAX_SETDLG 32
2108    PROPSHEETPAGE psp[MAX_SETDLG];
2109    HPROPSHEETPAGE hpsp[MAX_SETDLG];
2110    int i;
2111
2112    bOptionWhole=0;
2113    bOptionEditor=0;
2114    bOptionColor=0;
2115    bOptionToolbar=0;
2116    bOptionRad=0;
2117    bOptionWeb=0;
2118
2119    i=0;
2120
2121    //各ページのセッティング
2122    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2123    psp[i].dwFlags=PSP_DEFAULT;
2124    psp[i].hInstance=hResInst;
2125    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WHOLE);
2126    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Whole;
2127    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2128    i++;
2129    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2130    psp[i].dwFlags=PSP_DEFAULT;
2131    psp[i].hInstance=hResInst;
2132    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_EDITOR);
2133    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Editor;
2134    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2135    i++;
2136    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2137    psp[i].dwFlags=PSP_DEFAULT;
2138    psp[i].hInstance=hResInst;
2139    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_COLOR);
2140    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Color;
2141    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2142    i++;
2143    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2144    psp[i].dwFlags=PSP_DEFAULT;
2145    psp[i].hInstance=hResInst;
2146    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_TOOLBAR);
2147    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Toolbar;
2148    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2149
2150#ifndef THETEXT
2151    //RADツールに関するオプションはProjectEditorのみ表示
2152    i++;
2153    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2154    psp[i].dwFlags=PSP_DEFAULT;
2155    psp[i].hInstance=hResInst;
2156    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_RAD);
2157    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Rad;
2158    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2159#endif
2160
2161    i++;
2162    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2163    psp[i].dwFlags=PSP_DEFAULT;
2164    psp[i].hInstance=hResInst;
2165    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WEB);
2166    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Web;
2167    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2168
2169    i++;
2170
2171
2172
2173    ///////////////////////////
2174    // 一時オブジェクトを生成
2175    ///////////////////////////
2176
2177    pobj_temp_DBDomain=new CDBDomain();
2178
2179
2180
2181    memset(&psh,0,sizeof(PROPSHEETHEADER));
2182    psh.dwSize=sizeof(PROPSHEETHEADER);
2183    psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
2184    psh.phpage=hpsp;
2185    psh.hwndParent=hwnd;
2186    psh.pszCaption=STRING_OPTION;   //"オプション"
2187    psh.nPages=i;
2188    psh.nStartPage=0;
2189    psh.ppsp=psp;
2190    PropertySheet(&psh);
2191
2192
2193
2194    ///////////////////////////
2195    // 一時オブジェクトを破棄
2196    ///////////////////////////
2197
2198    delete pobj_temp_DBDomain;
2199}
2200BOOL CALLBACK DialogAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
2201    if(message==WM_INITDIALOG){
2202        SetPosCenter(hwnd);
2203
2204        SetDlgItemText(hwnd,IDC_STATIC_NAME,VERSION_APPLI_NAME);
2205
2206        char temporary[1024];
2207        sprintf(temporary,"Version %s",VERSION_STRING);
2208        SetDlgItemText(hwnd,IDC_STATIC_VERSION,temporary);
2209
2210
2211#ifndef THETEXT
2212        //ライブラリ開発チーム
2213        LoadString(hResInst,IDS_DEV_GROUP,temporary,1024);
2214        SetDlgItemText(hwnd,IDC_DEV_GROUP,temporary);
2215#endif
2216    }
2217    if(message==WM_COMMAND){
2218        switch(LOWORD(wParam)){
2219            case IDCANCEL:
2220                EndDialog(hwnd,NULL);
2221                return 1;
2222        }
2223    }
2224    return 0;
2225}
Note: See TracBrowser for help on using the repository browser.