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

Last change on this file since 718 was 718, checked in by dai, 14 years ago
  • Web設定をオプションダイアログから除去した(不要な機能)。
  • Jenga::Common::Environment::GetUserAppDirメソッドを追加。
  • Jenga::Common::Directoryクラスコンストラクタを修正。
File size: 65.5 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 temp_bSaveCheckProject;
1023BOOL temp_bLineAdjust;
1024BOOL temp_bSaveTabToHead;
1025LOGFONT temp_lf,temp_HintFont;
1026int temp_TabSize;
1027BOOL temp_bEditor_LineNumber;
1028BOOL temp_bEditor_Ruler;
1029BOOL temp_bEditor_CaretLine_BackGround;
1030int temp_iMaxOneLineTextLength;
1031BOOL temp_bAutoIndent;
1032BOOL temp_bPasteIndent;
1033DWORD temp_dwParameterHint;
1034BOOL temp_bShowComplementWnd;
1035int temp_BackNum_PairStatementComplement;
1036BOOL temp_bSaveFindStr;
1037
1038CTheme obj_temp_Theme;
1039
1040
1041void SaveSetting(void){
1042    int i;
1043    if(bOptionWhole){
1044        //実行時の、プロジェクトの保存確認の有無
1045        pobj_nv->bSaveCheckProject=temp_bSaveCheckProject;
1046
1047        //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1048        pobj_nv->bSaveTabToHead=temp_bSaveTabToHead;
1049    }
1050    if(bOptionEditor){
1051        //フォント
1052        pobj_nv->lf=temp_lf;
1053
1054        //タブサイズ
1055        pobj_nv->TabSize=temp_TabSize;
1056
1057        //エディタの行番号を表示するかどうか
1058        pobj_nv->bEditor_LineNumber=temp_bEditor_LineNumber;
1059
1060        //エディタのルーラーを表示するかどうか
1061        pobj_nv->bEditor_Ruler=temp_bEditor_Ruler;
1062
1063        //カーソル行を強調表示するかどうか
1064        pobj_nv->bEditor_CaretLine_BackGround=temp_bEditor_CaretLine_BackGround;
1065
1066        //自動折り返し時の一行あたりの文字数
1067        pobj_nv->iMaxOneLineTextLength=temp_iMaxOneLineTextLength;
1068
1069        //コード補完機能
1070        pobj_nv->bShowComplementWnd=temp_bShowComplementWnd;
1071
1072        pobj_nv->BackNum_PairStatementComplement=temp_BackNum_PairStatementComplement;
1073
1074        //パラメータ ヒント
1075        pobj_nv->dwParameterHint=temp_dwParameterHint;
1076
1077        //パラメータ ヒント フォント
1078        extern METHODCHECKINFO MethodCheckInfo;
1079        MethodCheckInfo.LogFont=temp_HintFont;
1080        DeleteObject(MethodCheckInfo.hFont);
1081        DeleteObject(MethodCheckInfo.hBoldFont);
1082
1083        MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
1084        i=MethodCheckInfo.LogFont.lfWeight;
1085        MethodCheckInfo.LogFont.lfWeight=FW_BOLD;
1086        MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
1087        MethodCheckInfo.LogFont.lfWeight=i;
1088
1089        //自動インデント
1090        pobj_nv->bAutoIndent=temp_bAutoIndent;
1091
1092        //貼り付け時のインデント調整
1093        pobj_nv->bPasteIndent=temp_bPasteIndent;
1094
1095        //検索・置換文字列を保存するかどうか
1096        pobj_nv->bSaveFindStr=temp_bSaveFindStr;
1097
1098        RedrawAllWindow();      //すべてのウィンドウを再描画
1099    }
1100    if(bOptionColor){
1101        //カラーデザインを更新
1102        CTheme *pobj_Theme;
1103        pobj_Theme=pobj_DBTheme->dupli_check(obj_temp_Theme.m_name);
1104        *pobj_Theme=obj_temp_Theme;
1105        if(lstrcmp(pobj_Theme->m_name,THEMENAME_USER)==0){
1106            //ユーザー設定の場合は自動的にファイルに保存する
1107            pobj_Theme->save();
1108        }
1109
1110        //再描画
1111        SetTextEditColorDesign(&tci,pobj_Theme,1);
1112    }
1113    if(bOptionRad){
1114        //ライン アジャスタ
1115        pobj_nv->bLineAdjust=temp_bLineAdjust;
1116    }
1117    return;
1118}
1119BOOL CALLBACK Dlg_Option_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1120    NMHDR *nmhdr;
1121    switch(message){
1122        case WM_INITDIALOG:
1123            SetPosCenter(GetParent(hwnd));
1124
1125            bOptionWhole=1;
1126
1127            //実行時の、プロジェクトの保存確認の有無
1128            if(pobj_nv->bSaveCheckProject) SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_SETCHECK,BST_CHECKED,0);
1129
1130            //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1131            if(pobj_nv->bSaveTabToHead) SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_SETCHECK,BST_CHECKED,0);
1132
1133            break;
1134        case WM_COMMAND:
1135            switch(LOWORD(wParam)){
1136                case IDC_LINKFILE:
1137                    ExtensionLink(hwnd);
1138                    return 1;
1139            }
1140            break;
1141        case WM_NOTIFY:
1142            nmhdr=(NMHDR *)lParam;
1143            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1144                //実行時の、プロジェクトの保存確認の有無
1145                if(SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_GETCHECK,0,0)) temp_bSaveCheckProject=1;
1146                else temp_bSaveCheckProject=0;
1147
1148                //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1149                if(SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_GETCHECK,0,0)) temp_bSaveTabToHead=1;
1150                else temp_bSaveTabToHead=0;
1151
1152                if(nmhdr->code==PSN_APPLY) SaveSetting();
1153            }
1154            return 1;
1155        case WM_HELP:
1156            HELPINFO *lpHelpInfo;
1157            lpHelpInfo = (HELPINFO *)lParam;
1158
1159            HH_POPUP hp;
1160            memset(&hp, 0, sizeof(HH_POPUP));
1161            hp.cbStruct = sizeof(HH_POPUP);
1162            hp.pt.x = lpHelpInfo->MousePos.x;
1163            hp.pt.y = lpHelpInfo->MousePos.y+10;
1164            hp.clrForeground = RGB(0, 0, 0);
1165            hp.clrBackground = -1;
1166            hp.rcMargins.left = -1;
1167            hp.rcMargins.right = -1;
1168            hp.rcMargins.top = -1;
1169            hp.rcMargins.bottom = -1;
1170            hp.idString = 0;
1171            hp.pszFont="MS Sans Serif,10";
1172
1173            switch(lpHelpInfo->iCtrlId){
1174                case IDC_SAVECHECK:
1175#if defined(JPN)
1176                    //日本語
1177                    hp.pszText="このチェックボックスをオンにすると、プロジェクトが未保存の状態であるとき、コンパイル時に保存確認のダイアログボックスが表示されるようになります。\nチェックをオフにすると、プロジェクトはコンパイル時に自動的に保存されます(デフォルトはオフです)。";
1178#else
1179                    //英語
1180                    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).";
1181#endif
1182                    break;
1183                case IDC_LINKFILE:
1184#if defined(JPN)
1185                    //日本語
1186                    hp.pszText="ファイルの関連付けを行います。";
1187#else
1188                    //英語
1189                    hp.pszText="Relate the files.";
1190#endif
1191                    break;
1192                default:
1193                    hp.pszText="";
1194                    break;
1195            }
1196            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1197            return 1;
1198    }
1199    return 0;
1200}
1201BOOL CALLBACK Dlg_Option_Editor(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1202    extern METHODCHECKINFO MethodCheckInfo;
1203    char str[255];
1204    NMHDR *nmhdr;
1205    switch(message){
1206        case WM_INITDIALOG:
1207            bOptionEditor=1;
1208
1209            //フォント
1210            sprintf(str,"%s",pobj_nv->lf.lfFaceName);
1211            SetDlgItemText(hwnd,IDC_SETFONT,str);
1212            temp_lf=pobj_nv->lf;
1213
1214            //タブサイズ
1215            sprintf(str,"%d",pobj_nv->TabSize);
1216            SetDlgItemText(hwnd,IDC_TABSIZE,str);
1217
1218            //エディタの行番号を表示するかどうか
1219            if(pobj_nv->bEditor_LineNumber) SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_SETCHECK,BST_CHECKED,0);
1220
1221            //エディタのルーラーを表示するかどうか
1222            if(pobj_nv->bEditor_Ruler) SendDlgItemMessage(hwnd,IDC_RULER,BM_SETCHECK,BST_CHECKED,0);
1223
1224            //カーソル行を強調表示するかどうか
1225            if(pobj_nv->bEditor_CaretLine_BackGround) SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_SETCHECK,BST_CHECKED,0);
1226
1227#ifdef THETEXT
1228            //自動折り返し時の一行あたりの文字数
1229            sprintf(str,"%d",pobj_nv->iMaxOneLineTextLength);
1230            SetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str);
1231#endif
1232
1233            //自動インデント
1234            if(pobj_nv->bAutoIndent) SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_SETCHECK,BST_CHECKED,0);
1235
1236            //貼り付け時のインデント調整
1237            if(pobj_nv->bPasteIndent) SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_SETCHECK,BST_CHECKED,0);
1238
1239            //コード補完
1240            if(pobj_nv->bShowComplementWnd)
1241                SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_SETCHECK,BST_CHECKED,0);
1242
1243            //ペアステートメント補完
1244            SendDlgItemMessage(hwnd,IDC_BACKNUM,EM_SETLIMITTEXT,4,0);
1245            if(pobj_nv->BackNum_PairStatementComplement){
1246                SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_SETCHECK,BST_CHECKED,0);
1247                sprintf(str,"%d",pobj_nv->BackNum_PairStatementComplement);
1248                SetDlgItemText(hwnd,IDC_BACKNUM,str);
1249            }
1250
1251            SendMessage(hwnd,WM_COMMAND,IDC_COMPLEMENT,0);
1252
1253            //パラメータ ヒント
1254            if(pobj_nv->dwParameterHint){
1255                SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_SETCHECK,BST_CHECKED,0);
1256                if(pobj_nv->dwParameterHint==1)
1257                    SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1258                else
1259                    SendDlgItemMessage(hwnd,IDC_STATUSBAR,BM_SETCHECK,BST_CHECKED,0);
1260                SendMessage(hwnd,WM_COMMAND,IDC_PARAMHINT,0);
1261            }
1262            else SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1263
1264            //パラメータ ヒント フォント
1265            sprintf(str,"%s",MethodCheckInfo.LogFont.lfFaceName);
1266            SetDlgItemText(hwnd,IDC_HINTFONT,str);
1267            temp_HintFont=MethodCheckInfo.LogFont;
1268
1269            //検索・置換文字列を保存するかどうか
1270            if(pobj_nv->bSaveFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_SETCHECK,BST_CHECKED,0);
1271
1272            break;
1273        case WM_COMMAND:
1274            switch(LOWORD(wParam)){
1275                case IDC_SETFONT:
1276                    if(!SetFontDialog(hwnd,&temp_lf,1)) return 1;
1277                    sprintf(str,"%s",temp_lf.lfFaceName);
1278                    SetDlgItemText(hwnd,IDC_SETFONT,str);
1279                    return 1;
1280                case IDC_HINTFONT:
1281                    if(!SetFontDialog(hwnd,&temp_HintFont,0)) return 1;
1282                    sprintf(str,"%s",temp_HintFont.lfFaceName);
1283                    SetDlgItemText(hwnd,IDC_HINTFONT,str);
1284                    return 1;
1285
1286                case IDC_ISAUTOINDENT:
1287                case IDC_COMPLEMENT:
1288                    if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)&&
1289                        SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0)){
1290                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),1);
1291                        SendMessage(hwnd,WM_COMMAND,IDC_PAIRSTATEMENT,0);
1292                    }
1293                    else{
1294                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),0);
1295                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1296                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1297                    }
1298                    return 1;
1299
1300                case IDC_PAIRSTATEMENT:
1301                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1302                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),1);
1303                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),1);
1304
1305                        if(GetWindowTextLength(GetDlgItem(hwnd,IDC_BACKNUM))==0)
1306                            SetDlgItemText(hwnd,IDC_BACKNUM,"100");
1307                    }
1308                    else{
1309                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1310                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1311                    }
1312                    return 1;
1313
1314                case IDC_PARAMHINT:
1315                    if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1316                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),1);
1317                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),1);
1318                        if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)){
1319                            EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1320                            EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1321                        }
1322                    }
1323                    else{
1324                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),0);
1325                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),0);
1326                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1327                        EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1328                    }
1329                    return 1;
1330                case IDC_POPUP:
1331                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1332                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1333                    return 1;
1334                case IDC_STATUSBAR:
1335                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1336                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1337                    return 1;
1338            }
1339            break;
1340        case WM_NOTIFY:
1341            nmhdr=(NMHDR *)lParam;
1342            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1343                GetDlgItemText(hwnd,IDC_TABSIZE,str,255);
1344                sscanf(str,"%d",&temp_TabSize);
1345
1346                //エディタの行番号を表示するかどうか
1347                if(SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_GETCHECK,0,0)) temp_bEditor_LineNumber=1;
1348                else temp_bEditor_LineNumber=0;
1349
1350                //エディタのルーラーを表示するかどうか
1351                if(SendDlgItemMessage(hwnd,IDC_RULER,BM_GETCHECK,0,0)) temp_bEditor_Ruler=1;
1352                else temp_bEditor_Ruler=0;
1353
1354                //カーソル行を強調表示するかどうか
1355                if(SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_GETCHECK,0,0)) temp_bEditor_CaretLine_BackGround=1;
1356                else temp_bEditor_CaretLine_BackGround=0;
1357
1358#ifdef THETEXT
1359                //自動折り返し時の一行あたりの文字数
1360                GetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str,255);
1361                sscanf(str,"%d",&temp_iMaxOneLineTextLength);
1362                if(temp_iMaxOneLineTextLength<=0){
1363                    temp_iMaxOneLineTextLength=75;
1364                }
1365#endif
1366
1367                //自動インデント
1368                if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)) temp_bAutoIndent=1;
1369                else temp_bAutoIndent=0;
1370
1371                //貼り付け時のインデント調整
1372                if(SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_GETCHECK,0,0)) temp_bPasteIndent=1;
1373                else temp_bPasteIndent=0;
1374
1375                //コード補完機能
1376                if(SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0))
1377                    temp_bShowComplementWnd=1;
1378                else temp_bShowComplementWnd=0;
1379
1380                //ペアステートメント補完
1381                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_PAIRSTATEMENT))){
1382                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1383                        GetDlgItemText(hwnd,IDC_BACKNUM,str,255);
1384                        sscanf(str,"%d",&temp_BackNum_PairStatementComplement);
1385                    }
1386                    else temp_BackNum_PairStatementComplement=0;
1387                }
1388                else temp_BackNum_PairStatementComplement=0;
1389
1390                //パラメータヒント
1391                if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1392                    if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)) temp_dwParameterHint=1;
1393                    else temp_dwParameterHint=2;
1394                }
1395                else temp_dwParameterHint=0;
1396
1397                if(SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_GETCHECK,0,0))
1398                    temp_bSaveFindStr=1;
1399                else temp_bSaveFindStr=0;
1400
1401                if(nmhdr->code==PSN_APPLY) SaveSetting();
1402            }
1403            return 1;
1404
1405        case WM_HELP:
1406            HELPINFO *lpHelpInfo;
1407            lpHelpInfo = (HELPINFO *)lParam;
1408
1409            HH_POPUP hp;
1410            memset(&hp, 0, sizeof(HH_POPUP));
1411            hp.cbStruct = sizeof(HH_POPUP);
1412            hp.pt.x = lpHelpInfo->MousePos.x;
1413            hp.pt.y = lpHelpInfo->MousePos.y+10;
1414            hp.clrForeground = RGB(0, 0, 0);
1415            hp.clrBackground = -1;
1416            hp.rcMargins.left = -1;
1417            hp.rcMargins.right = -1;
1418            hp.rcMargins.top = -1;
1419            hp.rcMargins.bottom = -1;
1420            hp.idString = 0;
1421            hp.pszFont="MS Sans Serif,10";
1422
1423            switch(lpHelpInfo->iCtrlId){
1424                case IDC_STATIC_SETFONT:
1425                case IDC_SETFONT:
1426#if defined(JPN)
1427                    //日本語
1428                    hp.pszText="エディタで使用するフォントを選択することができます。";
1429#else
1430                    //英語
1431                    hp.pszText="Choose the font displayed on the editor";
1432#endif
1433                    break;
1434                case IDC_STATIC_TABSIZE:
1435                case IDC_TABSIZE:
1436#if defined(JPN)
1437                    //日本語
1438                    hp.pszText="タブサイズを指定します。デフォルト値は4です。";
1439#else
1440                    //英語
1441                    hp.pszText="Set the tab size. Value of default is 4.";
1442#endif
1443                    break;
1444                case IDC_ISAUTOINDENT:
1445#if defined(JPN)
1446                    //日本語
1447                    hp.pszText="このチェックをオンにすると、必要に応じて、自動的にインデント用のタブ文字が挿入されます。";
1448#else
1449                    //英語
1450                    hp.pszText="If this check is on, the indent tabs will be inserted automatically.";
1451#endif
1452                    break;
1453                case IDC_COMPLEMENT:
1454#if defined(JPN)
1455                    //日本語
1456                    hp.pszText="このチェックをオンにすると、クラスまたは構造体のメンバを入力するときに、予想されるキーワードがリスト表示されます。";
1457#else
1458                    //英語
1459                    hp.pszText="If this check is on, the member expected is displayed in a list when inputting the member of the class object.";
1460#endif
1461                    break;
1462                case IDC_PARAMHINT:
1463#if defined(JPN)
1464                    //日本語
1465                    hp.pszText="このチェックをオンにすると、関数またはステートメントを入力するときに、該当するパラメータのヒント文字列が表示されます。文字列の表示方法はポップアップまたはステータスバーのいずれかを選択することができます。";
1466#else
1467                    //英語
1468                    hp.pszText="If this check is on, parameter hint is displayed when inputting a function or a statement.";
1469#endif
1470                    break;
1471                case IDC_POPUP:
1472#if defined(JPN)
1473                    //日本語
1474                    hp.pszText="パラメータヒントをポップアップ表示するときは、ここをチェックします。";
1475#else
1476                    //英語
1477                    hp.pszText="If this check is on, parameter hint is displayed on a popup window.";
1478#endif
1479                    break;
1480                case IDC_STATUSBAR:
1481#if defined(JPN)
1482                    //日本語
1483                    hp.pszText="パラメータヒントをステータスバーに表示するときは、ここをチェックします。";
1484#else
1485                    //英語
1486                    hp.pszText="If this check is on, parameter hint is displayed in a status bar.";
1487#endif
1488                    break;
1489                case IDC_STATIC_HINTFONT:
1490                case IDC_HINTFONT:
1491#if defined(JPN)
1492                    //日本語
1493                    hp.pszText="ポップアップ表示されるパラメータヒントのフォントを指定します。";
1494#else
1495                    //英語
1496                    hp.pszText="Choose the font displayed on the popup hint.";
1497#endif
1498                    break;
1499                default:
1500                    hp.pszText="";
1501                    break;
1502            }
1503            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1504            return 1;
1505    }
1506    return 0;
1507}
1508COLORREF GetColorFromSelection(int iPos,TEXTEDIT_COLOR_INFO *ptci){
1509    if(iPos==0) return ptci->rgbComment;
1510    else if(iPos==1) return ptci->rgbString;
1511    else if(iPos==2) return ptci->rgbDefault;
1512    else if(iPos==3) return ptci->rgbStatement;
1513    else if(iPos==4) return ptci->rgbCursorBack;
1514    else if(iPos==5) return ptci->rgbBackground;
1515    return 0;
1516}
1517void SetColorFromSelection(int iPos,COLORREF rgb,TEXTEDIT_COLOR_INFO *ptci){
1518    if(iPos==0) ptci->rgbComment=rgb;
1519    else if(iPos==1) ptci->rgbString=rgb;
1520    else if(iPos==2) ptci->rgbDefault=rgb;
1521    else if(iPos==3) ptci->rgbStatement=rgb;
1522    else if(iPos==4) ptci->rgbCursorBack=rgb;
1523    else if(iPos==5) ptci->rgbBackground=rgb;
1524}
1525#ifdef THETEXT
1526char szNewThemeName[MAX_PATH];
1527BOOL bThemeOverwirte;
1528BOOL CALLBACK DlgOptionThemeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1529    switch(message){
1530        case WM_INITDIALOG:
1531            SetPosCenter(hwnd);
1532
1533            SendMessage(hwnd,WM_COMMAND,IDC_NAME,0);
1534            SetFocus(GetDlgItem(hwnd,IDC_NAME));
1535            break;
1536        case WM_COMMAND:
1537            switch(LOWORD(wParam)){
1538                case IDOK:
1539                    GetDlgItemText(hwnd,IDC_NAME,szNewThemeName,MAX_PATH);
1540
1541                    if(SendDlgItemMessage(hwnd,IDC_OVERWRITE,BM_GETCHECK,0,0))
1542                        bThemeOverwirte=1;
1543                    else bThemeOverwirte=0;
1544
1545                    if(pobj_DBTheme->dupli_check(szNewThemeName)){
1546                        if(!bThemeOverwirte){
1547                            char temporary[MAX_PATH];
1548                            sprintf(temporary,"テーマ \"%s\" は既に存在します。「上書きを許可する」をチェックした後、保存してください。",szNewThemeName);
1549                            MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK);
1550                            return 1;
1551                        }
1552                    }
1553
1554                    EndDialog(hwnd,1);
1555                    return 1;
1556                case IDCANCEL:
1557                    EndDialog(hwnd,0);
1558                    return 1;
1559                case IDC_NAME:
1560                    if(GetWindowTextLength(GetDlgItem(hwnd,IDC_NAME)))
1561                        EnableWindow(GetDlgItem(hwnd,IDOK),1);
1562                    else EnableWindow(GetDlgItem(hwnd,IDOK),0);
1563                    return 1;
1564            }
1565            break;
1566    }
1567    return 0;
1568}
1569#endif
1570BOOL CALLBACK Dlg_Option_Color(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1571    int iPos;
1572    CTheme *pobj_Theme;
1573    char temporary[MAX_PATH];
1574    switch(message){
1575        case WM_INITDIALOG:
1576            bOptionColor=1;
1577
1578            //一時保存値を初期化
1579            pobj_Theme=pobj_DBTheme->GetActiveTheme();
1580            obj_temp_Theme=*pobj_Theme;
1581
1582            //指定する部分
1583            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"コメント");
1584            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"ダブルクォート内の文字列");
1585            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"通常の文字");
1586            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"特殊ステートメント");
1587            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(カーソル行)");
1588            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(一般)");
1589            SendDlgItemMessage(hwnd,IDC_TARGET,CB_SETCURSEL,0,0);
1590
1591
1592            //テーマ名をコンボボックスにセット
1593            pobj_DBTheme->ResetTheme_ToComboBox(GetDlgItem(hwnd,IDC_THEME));
1594
1595
1596            SendMessage(hwnd,WM_COMMAND,MAKELONG(IDC_THEME,CBN_SELCHANGE),0);
1597            break;
1598
1599        case WM_COMMAND:
1600            switch(LOWORD(wParam)){
1601#ifdef THETEXT
1602                case IDC_SAVE:
1603                    if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_OPTION_THEME_SAVE),hwnd,(DLGPROC)DlgOptionThemeSave)) return 1;
1604
1605                    pobj_Theme=pobj_DBTheme->dupli_check(szNewThemeName);
1606                    if(pobj_Theme){
1607                    }
1608                    else{
1609                        //新規に追加
1610                        pobj_Theme=pobj_DBTheme->add(0,szNewThemeName);
1611                    }
1612                    *pobj_Theme=obj_temp_Theme;
1613                    lstrcpy(pobj_Theme->m_name,szNewThemeName);
1614
1615                    //ファイルに保存
1616                    pobj_Theme->save();
1617
1618                    //テーマ コンボボックスのカーソル位置をセット
1619                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),szNewThemeName);
1620
1621                    return 1;
1622#endif //THETEXT
1623                case IDC_THEME:
1624                    if(HIWORD(wParam)==CBN_SELCHANGE){
1625                        if(!SendDlgItemMessage(hwnd,IDC_THEME,CB_GETLBTEXT,
1626                            SendDlgItemMessage(hwnd,IDC_THEME,CB_GETCURSEL,0,0),
1627                            (LPARAM)temporary)) return 1;
1628
1629                        pobj_Theme=pobj_DBTheme->dupli_check(temporary);
1630                        obj_temp_Theme=*pobj_Theme;
1631
1632                        InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1633                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1634                    }
1635                    return 1;
1636                case IDC_TARGET:
1637                    if(HIWORD(wParam)==CBN_SELCHANGE){
1638                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1639                    }
1640                    return 1;
1641                case IDC_COLOR_BUTTON:
1642                    iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1643
1644                    CHOOSECOLOR cc;
1645                    static COLORREF CustColors[16];
1646                    cc.lStructSize=sizeof(CHOOSECOLOR);
1647                    cc.hwndOwner=hwnd;
1648                    cc.rgbResult=GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo);
1649                    cc.lpCustColors=CustColors;
1650                    cc.Flags=CC_FULLOPEN | CC_RGBINIT;
1651                    if(!ChooseColor(&cc)) return 1;
1652
1653                    SetColorFromSelection(iPos,cc.rgbResult,&obj_temp_Theme.TextColorInfo);
1654
1655                    InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1656                    InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1657
1658                    lstrcpy(obj_temp_Theme.m_name,THEMENAME_USER);
1659
1660                    //ユーザー設定を選択
1661                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),THEMENAME_USER);
1662                    return 1;
1663            }
1664            break;
1665
1666        case WM_NOTIFY:
1667            NMHDR *nmhdr;
1668            nmhdr=(NMHDR *)lParam;
1669
1670            if(nmhdr->code==PSN_APPLY) SaveSetting();
1671            return 1;
1672
1673        case WM_DRAWITEM:
1674            LPDRAWITEMSTRUCT pds;
1675            pds=(LPDRAWITEMSTRUCT)lParam;
1676
1677            HBRUSH hBrush,hOldBrush;
1678
1679            if(wParam==IDC_COLOR_BUTTON){
1680                iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1681
1682                //////////////
1683                // 色を描画
1684                //////////////
1685
1686                //ペンとブラシを生成
1687                HPEN hPen,hOldPen;
1688                hPen=(HPEN)GetStockObject(WHITE_PEN);
1689                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_COLOR_BUTTON)))
1690                    hBrush=CreateSolidBrush(GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo));
1691                else
1692                    hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
1693
1694                //塗りつぶす
1695                hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
1696                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1697                Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
1698                SelectObject(pds->hDC,hOldPen);
1699                SelectObject(pds->hDC,hOldBrush);
1700
1701                //ブラシを破棄
1702                DeleteObject(hBrush);
1703            }
1704            else if(wParam==IDC_SAMPLE){
1705                TEXTEDIT_COLOR_INFO ColorInfo;
1706                ColorInfo=obj_temp_Theme.TextColorInfo;
1707
1708                //背景色で塗りつぶす
1709                hBrush=CreateSolidBrush(ColorInfo.rgbBackground);
1710                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1711                PatBlt(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom,PATCOPY);
1712                SelectObject(pds->hDC,hOldBrush);
1713                DeleteObject(hBrush);
1714
1715                //フォントを選択
1716                extern HFONT hFont_TextEdit;
1717                HFONT hOldFont;
1718                hOldFont=(HFONT)SelectObject(pds->hDC,hFont_TextEdit);
1719
1720                ///////////////////
1721                // サンプルを描画
1722                ///////////////////
1723
1724                extern int font_width,font_height;
1725                int x=0,y=0;
1726
1727#ifdef THETEXT
1728#define SAMPLESTR_STATEMENT "div"
1729#define SAMPLESTR_COMMENT "<!-- この行にカーソルがあります -->"
1730#define SAMPLESTR_DEFAULT "<    style=               >Hello World!</   >"
1731#define SAMPLESTR_STRING "\"color:#123456\""
1732
1733                y+=font_height;
1734
1735                //"<    style=               >Hello World!</   >"
1736                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1737                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1738                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1739
1740                //div
1741                x=font_width*1;
1742                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1743                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1744                x=font_width*41;
1745                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1746
1747                //"color:#123456"
1748                x=font_width*11;
1749                SetTextColor(pds->hDC,ColorInfo.rgbString);
1750                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1751
1752                x=0;
1753                y+=font_height*2;
1754
1755                //"'この行にカーソルがあります
1756                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1757                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1758                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1759                SelectObject(pds->hDC,hOldBrush);
1760                DeleteObject(hBrush);
1761
1762                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1763                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1764                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1765#else
1766#define SAMPLESTR_STATEMENT "#console"
1767#define SAMPLESTR_COMMENT "'この行にカーソルがあります"
1768#define SAMPLESTR_DEFAULT "Print "
1769#define SAMPLESTR_STRING "\"Hello World!\""
1770
1771                //"#console"
1772                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1773                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1774                TextOut(pds->hDC,0,0,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1775                y+=font_height*2;
1776
1777                //"'この行にカーソルがあります
1778                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1779                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1780                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1781                SelectObject(pds->hDC,hOldBrush);
1782                DeleteObject(hBrush);
1783
1784                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1785                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1786                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1787                y+=font_height*2;
1788
1789                //Print
1790                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1791                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1792                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1793                x+=lstrlen(SAMPLESTR_DEFAULT)*font_width;
1794
1795                //"Hello World!"
1796                SetTextColor(pds->hDC,ColorInfo.rgbString);
1797                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1798#endif
1799
1800                SelectObject(pds->hDC,hOldFont);
1801            }
1802            return 0;
1803
1804        case WM_HELP:
1805            HELPINFO *lpHelpInfo;
1806            lpHelpInfo = (HELPINFO *)lParam;
1807
1808            HH_POPUP hp;
1809            memset(&hp, 0, sizeof(HH_POPUP));
1810            hp.cbStruct = sizeof(HH_POPUP);
1811            hp.pt.x = lpHelpInfo->MousePos.x;
1812            hp.pt.y = lpHelpInfo->MousePos.y+10;
1813            hp.clrForeground = RGB(0, 0, 0);
1814            hp.clrBackground = -1;
1815            hp.rcMargins.left = -1;
1816            hp.rcMargins.right = -1;
1817            hp.rcMargins.top = -1;
1818            hp.rcMargins.bottom = -1;
1819            hp.idString = 0;
1820            hp.pszFont="MS Sans Serif,10";
1821
1822            switch(lpHelpInfo->iCtrlId){
1823                case IDC_TARGET:
1824                    hp.pszText="どの部分の色を設定するかを選択します。";
1825                    break;
1826                default:
1827                    hp.pszText="";
1828                    break;
1829            }
1830            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1831            return 1;
1832    }
1833    return 0;
1834}
1835BOOL CALLBACK Dlg_Option_Toolbar(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1836    switch(message){
1837        case WM_INITDIALOG:
1838            bOptionToolbar=1;
1839            break;
1840        case WM_COMMAND:
1841            switch(LOWORD(wParam)){
1842                case IDC_RESETTOOLBAR:
1843                    //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1844                    if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1845
1846                    //レバーコントロールを再生成
1847                    pobj_Rebar->ResetInitRebar();
1848
1849                    //メニュー状態を設定
1850                    ResetState_DocMenu();
1851                    return 1;
1852            }
1853            break;
1854
1855        case WM_HELP:
1856            HELPINFO *lpHelpInfo;
1857            lpHelpInfo = (HELPINFO *)lParam;
1858
1859            HH_POPUP hp;
1860            memset(&hp, 0, sizeof(HH_POPUP));
1861            hp.cbStruct = sizeof(HH_POPUP);
1862            hp.pt.x = lpHelpInfo->MousePos.x;
1863            hp.pt.y = lpHelpInfo->MousePos.y+10;
1864            hp.clrForeground = RGB(0, 0, 0);
1865            hp.clrBackground = -1;
1866            hp.rcMargins.left = -1;
1867            hp.rcMargins.right = -1;
1868            hp.rcMargins.top = -1;
1869            hp.rcMargins.bottom = -1;
1870            hp.idString = 0;
1871            hp.pszFont="MS Sans Serif,10";
1872
1873            switch(lpHelpInfo->iCtrlId){
1874                case IDC_RESETTOOLBAR:
1875#if defined(JPN)
1876                    //日本語
1877                    hp.pszText="ツールバーの配置を初期状態に戻します。";
1878#else
1879                    //英語
1880                    hp.pszText="Reset the state of the toolbar.";
1881#endif
1882                    break;
1883                default:
1884                    hp.pszText="";
1885                    break;
1886            }
1887            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1888            return 1;
1889    }
1890    return 0;
1891}
1892BOOL CALLBACK Dlg_Option_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1893    NMHDR *nmhdr;
1894    switch(message){
1895        case WM_INITDIALOG:
1896
1897            bOptionRad=1;
1898
1899            //ライン アジャスタ
1900            if(pobj_nv->bLineAdjust) SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_SETCHECK,BST_CHECKED,0);
1901
1902            break;
1903        case WM_NOTIFY:
1904            nmhdr=(NMHDR *)lParam;
1905            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1906                if(SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_GETCHECK,0,0)) temp_bLineAdjust=1;
1907                else temp_bLineAdjust=0;
1908
1909                if(nmhdr->code==PSN_APPLY) SaveSetting();
1910            }
1911            return 1;
1912
1913        case WM_HELP:
1914            HELPINFO *lpHelpInfo;
1915            lpHelpInfo = (HELPINFO *)lParam;
1916
1917            HH_POPUP hp;
1918            memset(&hp, 0, sizeof(HH_POPUP));
1919            hp.cbStruct = sizeof(HH_POPUP);
1920            hp.pt.x = lpHelpInfo->MousePos.x;
1921            hp.pt.y = lpHelpInfo->MousePos.y+10;
1922            hp.clrForeground = RGB(0, 0, 0);
1923            hp.clrBackground = -1;
1924            hp.rcMargins.left = -1;
1925            hp.rcMargins.right = -1;
1926            hp.rcMargins.top = -1;
1927            hp.rcMargins.bottom = -1;
1928            hp.idString = 0;
1929            hp.pszFont="MS Sans Serif,10";
1930
1931            switch(lpHelpInfo->iCtrlId){
1932                case IDC_LINEADJUST:
1933#if defined(JPN)
1934                    //日本語
1935                    hp.pszText="このチェックボックスをオンにすると、ラインアジャスタ機能が有効になります。ラインアジャスタ機能をオンにすると、マウスを使ってコントロールの移動を行う際に他のコントロール同士との位置合わせが容易に行えるようになります。";
1936#else
1937                    //英語
1938                    hp.pszText="If this check is on, line adjuster becomes effective.";
1939#endif
1940                    break;
1941                default:
1942                    hp.pszText="";
1943                    break;
1944            }
1945            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1946            return 1;
1947    }
1948    return 0;
1949}
1950void DlgOptionSetting(HWND hwnd){
1951    PROPSHEETHEADER psh;
1952#define MAX_SETDLG 32
1953    PROPSHEETPAGE psp[MAX_SETDLG];
1954    HPROPSHEETPAGE hpsp[MAX_SETDLG];
1955    int i;
1956
1957    bOptionWhole=0;
1958    bOptionEditor=0;
1959    bOptionColor=0;
1960    bOptionToolbar=0;
1961    bOptionRad=0;
1962
1963    i=0;
1964
1965    //各ページのセッティング
1966    psp[i].dwSize=sizeof(PROPSHEETPAGE);
1967    psp[i].dwFlags=PSP_DEFAULT;
1968    psp[i].hInstance=hResInst;
1969    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WHOLE);
1970    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Whole;
1971    hpsp[i]=CreatePropertySheetPage(&psp[i]);
1972    i++;
1973    psp[i].dwSize=sizeof(PROPSHEETPAGE);
1974    psp[i].dwFlags=PSP_DEFAULT;
1975    psp[i].hInstance=hResInst;
1976    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_EDITOR);
1977    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Editor;
1978    hpsp[i]=CreatePropertySheetPage(&psp[i]);
1979    i++;
1980    psp[i].dwSize=sizeof(PROPSHEETPAGE);
1981    psp[i].dwFlags=PSP_DEFAULT;
1982    psp[i].hInstance=hResInst;
1983    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_COLOR);
1984    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Color;
1985    hpsp[i]=CreatePropertySheetPage(&psp[i]);
1986    i++;
1987    psp[i].dwSize=sizeof(PROPSHEETPAGE);
1988    psp[i].dwFlags=PSP_DEFAULT;
1989    psp[i].hInstance=hResInst;
1990    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_TOOLBAR);
1991    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Toolbar;
1992    hpsp[i]=CreatePropertySheetPage(&psp[i]);
1993
1994#ifndef THETEXT
1995    //RADツールに関するオプションはProjectEditorのみ表示
1996    i++;
1997    psp[i].dwSize=sizeof(PROPSHEETPAGE);
1998    psp[i].dwFlags=PSP_DEFAULT;
1999    psp[i].hInstance=hResInst;
2000    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_RAD);
2001    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Rad;
2002    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2003#endif
2004
2005
2006    i++;
2007
2008
2009
2010    memset(&psh,0,sizeof(PROPSHEETHEADER));
2011    psh.dwSize=sizeof(PROPSHEETHEADER);
2012    psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
2013    psh.phpage=hpsp;
2014    psh.hwndParent=hwnd;
2015    psh.pszCaption=STRING_OPTION;   //"オプション"
2016    psh.nPages=i;
2017    psh.nStartPage=0;
2018    psh.ppsp=psp;
2019    PropertySheet(&psh);
2020}
2021BOOL CALLBACK DialogAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
2022    if(message==WM_INITDIALOG){
2023        SetPosCenter(hwnd);
2024
2025        SetDlgItemText(hwnd,IDC_STATIC_NAME,VERSION_APPLI_NAME);
2026
2027        char temporary[1024];
2028        sprintf(temporary,"Version %s",VERSION_STRING);
2029        SetDlgItemText(hwnd,IDC_STATIC_VERSION,temporary);
2030
2031
2032#ifndef THETEXT
2033        //ライブラリ開発チーム
2034        LoadString(hResInst,IDS_DEV_GROUP,temporary,1024);
2035        SetDlgItemText(hwnd,IDC_DEV_GROUP,temporary);
2036#endif
2037    }
2038    if(message==WM_COMMAND){
2039        switch(LOWORD(wParam)){
2040            case IDCANCEL:
2041                EndDialog(hwnd,NULL);
2042                return 1;
2043        }
2044    }
2045    return 0;
2046}
Note: See TracBrowser for help on using the repository browser.