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

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

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

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        //Web検索
1127        pobj_nv->pobj_DBDomain->copy_get(pobj_temp_DBDomain);
1128
1129        //SideWebウィンドウを再表示
1130        //delete pobj_SideWeb;
1131        //pobj_SideWeb=new CSideWeb(hOwner);
1132        //ActiveBasic::IDE::Program::mainFrame.Resized();
1133    }
1134    return;
1135}
1136BOOL CALLBACK Dlg_Option_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1137    NMHDR *nmhdr;
1138    switch(message){
1139        case WM_INITDIALOG:
1140            SetPosCenter(GetParent(hwnd));
1141
1142            bOptionWhole=1;
1143
1144            //実行時の、プロジェクトの保存確認の有無
1145            if(pobj_nv->bSaveCheckProject) SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_SETCHECK,BST_CHECKED,0);
1146
1147            //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1148            if(pobj_nv->bSaveTabToHead) SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_SETCHECK,BST_CHECKED,0);
1149
1150            break;
1151        case WM_COMMAND:
1152            switch(LOWORD(wParam)){
1153                case IDC_LINKFILE:
1154                    ExtensionLink(hwnd);
1155                    return 1;
1156            }
1157            break;
1158        case WM_NOTIFY:
1159            nmhdr=(NMHDR *)lParam;
1160            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1161                //実行時の、プロジェクトの保存確認の有無
1162                if(SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_GETCHECK,0,0)) temp_bSaveCheckProject=1;
1163                else temp_bSaveCheckProject=0;
1164
1165                //ドキュメントを保存したときにタブを先頭に再配置するかどうか
1166                if(SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_GETCHECK,0,0)) temp_bSaveTabToHead=1;
1167                else temp_bSaveTabToHead=0;
1168
1169                if(nmhdr->code==PSN_APPLY) SaveSetting();
1170            }
1171            return 1;
1172        case WM_HELP:
1173            HELPINFO *lpHelpInfo;
1174            lpHelpInfo = (HELPINFO *)lParam;
1175
1176            HH_POPUP hp;
1177            memset(&hp, 0, sizeof(HH_POPUP));
1178            hp.cbStruct = sizeof(HH_POPUP);
1179            hp.pt.x = lpHelpInfo->MousePos.x;
1180            hp.pt.y = lpHelpInfo->MousePos.y+10;
1181            hp.clrForeground = RGB(0, 0, 0);
1182            hp.clrBackground = -1;
1183            hp.rcMargins.left = -1;
1184            hp.rcMargins.right = -1;
1185            hp.rcMargins.top = -1;
1186            hp.rcMargins.bottom = -1;
1187            hp.idString = 0;
1188            hp.pszFont="MS Sans Serif,10";
1189
1190            switch(lpHelpInfo->iCtrlId){
1191                case IDC_SAVECHECK:
1192#if defined(JPN)
1193                    //日本語
1194                    hp.pszText="このチェックボックスをオンにすると、プロジェクトが未保存の状態であるとき、コンパイル時に保存確認のダイアログボックスが表示されるようになります。\nチェックをオフにすると、プロジェクトはコンパイル時に自動的に保存されます(デフォルトはオフです)。";
1195#else
1196                    //英語
1197                    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).";
1198#endif
1199                    break;
1200                case IDC_LINKFILE:
1201#if defined(JPN)
1202                    //日本語
1203                    hp.pszText="ファイルの関連付けを行います。";
1204#else
1205                    //英語
1206                    hp.pszText="Relate the files.";
1207#endif
1208                    break;
1209                default:
1210                    hp.pszText="";
1211                    break;
1212            }
1213            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1214            return 1;
1215    }
1216    return 0;
1217}
1218BOOL CALLBACK Dlg_Option_Editor(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1219    extern METHODCHECKINFO MethodCheckInfo;
1220    char str[255];
1221    NMHDR *nmhdr;
1222    switch(message){
1223        case WM_INITDIALOG:
1224            bOptionEditor=1;
1225
1226            //フォント
1227            sprintf(str,"%s",pobj_nv->lf.lfFaceName);
1228            SetDlgItemText(hwnd,IDC_SETFONT,str);
1229            temp_lf=pobj_nv->lf;
1230
1231            //タブサイズ
1232            sprintf(str,"%d",pobj_nv->TabSize);
1233            SetDlgItemText(hwnd,IDC_TABSIZE,str);
1234
1235            //エディタの行番号を表示するかどうか
1236            if(pobj_nv->bEditor_LineNumber) SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_SETCHECK,BST_CHECKED,0);
1237
1238            //エディタのルーラーを表示するかどうか
1239            if(pobj_nv->bEditor_Ruler) SendDlgItemMessage(hwnd,IDC_RULER,BM_SETCHECK,BST_CHECKED,0);
1240
1241            //カーソル行を強調表示するかどうか
1242            if(pobj_nv->bEditor_CaretLine_BackGround) SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_SETCHECK,BST_CHECKED,0);
1243
1244#ifdef THETEXT
1245            //自動折り返し時の一行あたりの文字数
1246            sprintf(str,"%d",pobj_nv->iMaxOneLineTextLength);
1247            SetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str);
1248#endif
1249
1250            //自動インデント
1251            if(pobj_nv->bAutoIndent) SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_SETCHECK,BST_CHECKED,0);
1252
1253            //貼り付け時のインデント調整
1254            if(pobj_nv->bPasteIndent) SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_SETCHECK,BST_CHECKED,0);
1255
1256            //コード補完
1257            if(pobj_nv->bShowComplementWnd)
1258                SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_SETCHECK,BST_CHECKED,0);
1259
1260            //ペアステートメント補完
1261            SendDlgItemMessage(hwnd,IDC_BACKNUM,EM_SETLIMITTEXT,4,0);
1262            if(pobj_nv->BackNum_PairStatementComplement){
1263                SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_SETCHECK,BST_CHECKED,0);
1264                sprintf(str,"%d",pobj_nv->BackNum_PairStatementComplement);
1265                SetDlgItemText(hwnd,IDC_BACKNUM,str);
1266            }
1267
1268            SendMessage(hwnd,WM_COMMAND,IDC_COMPLEMENT,0);
1269
1270            //パラメータ ヒント
1271            if(pobj_nv->dwParameterHint){
1272                SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_SETCHECK,BST_CHECKED,0);
1273                if(pobj_nv->dwParameterHint==1)
1274                    SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1275                else
1276                    SendDlgItemMessage(hwnd,IDC_STATUSBAR,BM_SETCHECK,BST_CHECKED,0);
1277                SendMessage(hwnd,WM_COMMAND,IDC_PARAMHINT,0);
1278            }
1279            else SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
1280
1281            //パラメータ ヒント フォント
1282            sprintf(str,"%s",MethodCheckInfo.LogFont.lfFaceName);
1283            SetDlgItemText(hwnd,IDC_HINTFONT,str);
1284            temp_HintFont=MethodCheckInfo.LogFont;
1285
1286            //検索・置換文字列を保存するかどうか
1287            if(pobj_nv->bSaveFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_SETCHECK,BST_CHECKED,0);
1288
1289            break;
1290        case WM_COMMAND:
1291            switch(LOWORD(wParam)){
1292                case IDC_SETFONT:
1293                    if(!SetFontDialog(hwnd,&temp_lf,1)) return 1;
1294                    sprintf(str,"%s",temp_lf.lfFaceName);
1295                    SetDlgItemText(hwnd,IDC_SETFONT,str);
1296                    return 1;
1297                case IDC_HINTFONT:
1298                    if(!SetFontDialog(hwnd,&temp_HintFont,0)) return 1;
1299                    sprintf(str,"%s",temp_HintFont.lfFaceName);
1300                    SetDlgItemText(hwnd,IDC_HINTFONT,str);
1301                    return 1;
1302
1303                case IDC_ISAUTOINDENT:
1304                case IDC_COMPLEMENT:
1305                    if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)&&
1306                        SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0)){
1307                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),1);
1308                        SendMessage(hwnd,WM_COMMAND,IDC_PAIRSTATEMENT,0);
1309                    }
1310                    else{
1311                        EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),0);
1312                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1313                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1314                    }
1315                    return 1;
1316
1317                case IDC_PAIRSTATEMENT:
1318                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1319                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),1);
1320                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),1);
1321
1322                        if(GetWindowTextLength(GetDlgItem(hwnd,IDC_BACKNUM))==0)
1323                            SetDlgItemText(hwnd,IDC_BACKNUM,"100");
1324                    }
1325                    else{
1326                        EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
1327                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
1328                    }
1329                    return 1;
1330
1331                case IDC_PARAMHINT:
1332                    if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1333                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),1);
1334                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),1);
1335                        if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)){
1336                            EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1337                            EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1338                        }
1339                    }
1340                    else{
1341                        EnableWindow(GetDlgItem(hwnd,IDC_POPUP),0);
1342                        EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),0);
1343                        EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1344                        EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1345                    }
1346                    return 1;
1347                case IDC_POPUP:
1348                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
1349                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
1350                    return 1;
1351                case IDC_STATUSBAR:
1352                    EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
1353                    EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
1354                    return 1;
1355            }
1356            break;
1357        case WM_NOTIFY:
1358            nmhdr=(NMHDR *)lParam;
1359            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1360                GetDlgItemText(hwnd,IDC_TABSIZE,str,255);
1361                sscanf(str,"%d",&temp_TabSize);
1362
1363                //エディタの行番号を表示するかどうか
1364                if(SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_GETCHECK,0,0)) temp_bEditor_LineNumber=1;
1365                else temp_bEditor_LineNumber=0;
1366
1367                //エディタのルーラーを表示するかどうか
1368                if(SendDlgItemMessage(hwnd,IDC_RULER,BM_GETCHECK,0,0)) temp_bEditor_Ruler=1;
1369                else temp_bEditor_Ruler=0;
1370
1371                //カーソル行を強調表示するかどうか
1372                if(SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_GETCHECK,0,0)) temp_bEditor_CaretLine_BackGround=1;
1373                else temp_bEditor_CaretLine_BackGround=0;
1374
1375#ifdef THETEXT
1376                //自動折り返し時の一行あたりの文字数
1377                GetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str,255);
1378                sscanf(str,"%d",&temp_iMaxOneLineTextLength);
1379                if(temp_iMaxOneLineTextLength<=0){
1380                    temp_iMaxOneLineTextLength=75;
1381                }
1382#endif
1383
1384                //自動インデント
1385                if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)) temp_bAutoIndent=1;
1386                else temp_bAutoIndent=0;
1387
1388                //貼り付け時のインデント調整
1389                if(SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_GETCHECK,0,0)) temp_bPasteIndent=1;
1390                else temp_bPasteIndent=0;
1391
1392                //コード補完機能
1393                if(SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0))
1394                    temp_bShowComplementWnd=1;
1395                else temp_bShowComplementWnd=0;
1396
1397                //ペアステートメント補完
1398                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_PAIRSTATEMENT))){
1399                    if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
1400                        GetDlgItemText(hwnd,IDC_BACKNUM,str,255);
1401                        sscanf(str,"%d",&temp_BackNum_PairStatementComplement);
1402                    }
1403                    else temp_BackNum_PairStatementComplement=0;
1404                }
1405                else temp_BackNum_PairStatementComplement=0;
1406
1407                //パラメータヒント
1408                if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
1409                    if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)) temp_dwParameterHint=1;
1410                    else temp_dwParameterHint=2;
1411                }
1412                else temp_dwParameterHint=0;
1413
1414                if(SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_GETCHECK,0,0))
1415                    temp_bSaveFindStr=1;
1416                else temp_bSaveFindStr=0;
1417
1418                if(nmhdr->code==PSN_APPLY) SaveSetting();
1419            }
1420            return 1;
1421
1422        case WM_HELP:
1423            HELPINFO *lpHelpInfo;
1424            lpHelpInfo = (HELPINFO *)lParam;
1425
1426            HH_POPUP hp;
1427            memset(&hp, 0, sizeof(HH_POPUP));
1428            hp.cbStruct = sizeof(HH_POPUP);
1429            hp.pt.x = lpHelpInfo->MousePos.x;
1430            hp.pt.y = lpHelpInfo->MousePos.y+10;
1431            hp.clrForeground = RGB(0, 0, 0);
1432            hp.clrBackground = -1;
1433            hp.rcMargins.left = -1;
1434            hp.rcMargins.right = -1;
1435            hp.rcMargins.top = -1;
1436            hp.rcMargins.bottom = -1;
1437            hp.idString = 0;
1438            hp.pszFont="MS Sans Serif,10";
1439
1440            switch(lpHelpInfo->iCtrlId){
1441                case IDC_STATIC_SETFONT:
1442                case IDC_SETFONT:
1443#if defined(JPN)
1444                    //日本語
1445                    hp.pszText="エディタで使用するフォントを選択することができます。";
1446#else
1447                    //英語
1448                    hp.pszText="Choose the font displayed on the editor";
1449#endif
1450                    break;
1451                case IDC_STATIC_TABSIZE:
1452                case IDC_TABSIZE:
1453#if defined(JPN)
1454                    //日本語
1455                    hp.pszText="タブサイズを指定します。デフォルト値は4です。";
1456#else
1457                    //英語
1458                    hp.pszText="Set the tab size. Value of default is 4.";
1459#endif
1460                    break;
1461                case IDC_ISAUTOINDENT:
1462#if defined(JPN)
1463                    //日本語
1464                    hp.pszText="このチェックをオンにすると、必要に応じて、自動的にインデント用のタブ文字が挿入されます。";
1465#else
1466                    //英語
1467                    hp.pszText="If this check is on, the indent tabs will be inserted automatically.";
1468#endif
1469                    break;
1470                case IDC_COMPLEMENT:
1471#if defined(JPN)
1472                    //日本語
1473                    hp.pszText="このチェックをオンにすると、クラスまたは構造体のメンバを入力するときに、予想されるキーワードがリスト表示されます。";
1474#else
1475                    //英語
1476                    hp.pszText="If this check is on, the member expected is displayed in a list when inputting the member of the class object.";
1477#endif
1478                    break;
1479                case IDC_PARAMHINT:
1480#if defined(JPN)
1481                    //日本語
1482                    hp.pszText="このチェックをオンにすると、関数またはステートメントを入力するときに、該当するパラメータのヒント文字列が表示されます。文字列の表示方法はポップアップまたはステータスバーのいずれかを選択することができます。";
1483#else
1484                    //英語
1485                    hp.pszText="If this check is on, parameter hint is displayed when inputting a function or a statement.";
1486#endif
1487                    break;
1488                case IDC_POPUP:
1489#if defined(JPN)
1490                    //日本語
1491                    hp.pszText="パラメータヒントをポップアップ表示するときは、ここをチェックします。";
1492#else
1493                    //英語
1494                    hp.pszText="If this check is on, parameter hint is displayed on a popup window.";
1495#endif
1496                    break;
1497                case IDC_STATUSBAR:
1498#if defined(JPN)
1499                    //日本語
1500                    hp.pszText="パラメータヒントをステータスバーに表示するときは、ここをチェックします。";
1501#else
1502                    //英語
1503                    hp.pszText="If this check is on, parameter hint is displayed in a status bar.";
1504#endif
1505                    break;
1506                case IDC_STATIC_HINTFONT:
1507                case IDC_HINTFONT:
1508#if defined(JPN)
1509                    //日本語
1510                    hp.pszText="ポップアップ表示されるパラメータヒントのフォントを指定します。";
1511#else
1512                    //英語
1513                    hp.pszText="Choose the font displayed on the popup hint.";
1514#endif
1515                    break;
1516                default:
1517                    hp.pszText="";
1518                    break;
1519            }
1520            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1521            return 1;
1522    }
1523    return 0;
1524}
1525COLORREF GetColorFromSelection(int iPos,TEXTEDIT_COLOR_INFO *ptci){
1526    if(iPos==0) return ptci->rgbComment;
1527    else if(iPos==1) return ptci->rgbString;
1528    else if(iPos==2) return ptci->rgbDefault;
1529    else if(iPos==3) return ptci->rgbStatement;
1530    else if(iPos==4) return ptci->rgbCursorBack;
1531    else if(iPos==5) return ptci->rgbBackground;
1532    return 0;
1533}
1534void SetColorFromSelection(int iPos,COLORREF rgb,TEXTEDIT_COLOR_INFO *ptci){
1535    if(iPos==0) ptci->rgbComment=rgb;
1536    else if(iPos==1) ptci->rgbString=rgb;
1537    else if(iPos==2) ptci->rgbDefault=rgb;
1538    else if(iPos==3) ptci->rgbStatement=rgb;
1539    else if(iPos==4) ptci->rgbCursorBack=rgb;
1540    else if(iPos==5) ptci->rgbBackground=rgb;
1541}
1542#ifdef THETEXT
1543char szNewThemeName[MAX_PATH];
1544BOOL bThemeOverwirte;
1545BOOL CALLBACK DlgOptionThemeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1546    switch(message){
1547        case WM_INITDIALOG:
1548            SetPosCenter(hwnd);
1549
1550            SendMessage(hwnd,WM_COMMAND,IDC_NAME,0);
1551            SetFocus(GetDlgItem(hwnd,IDC_NAME));
1552            break;
1553        case WM_COMMAND:
1554            switch(LOWORD(wParam)){
1555                case IDOK:
1556                    GetDlgItemText(hwnd,IDC_NAME,szNewThemeName,MAX_PATH);
1557
1558                    if(SendDlgItemMessage(hwnd,IDC_OVERWRITE,BM_GETCHECK,0,0))
1559                        bThemeOverwirte=1;
1560                    else bThemeOverwirte=0;
1561
1562                    if(pobj_DBTheme->dupli_check(szNewThemeName)){
1563                        if(!bThemeOverwirte){
1564                            char temporary[MAX_PATH];
1565                            sprintf(temporary,"テーマ \"%s\" は既に存在します。「上書きを許可する」をチェックした後、保存してください。",szNewThemeName);
1566                            MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK);
1567                            return 1;
1568                        }
1569                    }
1570
1571                    EndDialog(hwnd,1);
1572                    return 1;
1573                case IDCANCEL:
1574                    EndDialog(hwnd,0);
1575                    return 1;
1576                case IDC_NAME:
1577                    if(GetWindowTextLength(GetDlgItem(hwnd,IDC_NAME)))
1578                        EnableWindow(GetDlgItem(hwnd,IDOK),1);
1579                    else EnableWindow(GetDlgItem(hwnd,IDOK),0);
1580                    return 1;
1581            }
1582            break;
1583    }
1584    return 0;
1585}
1586#endif
1587BOOL CALLBACK Dlg_Option_Color(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1588    int iPos;
1589    CTheme *pobj_Theme;
1590    char temporary[MAX_PATH];
1591    switch(message){
1592        case WM_INITDIALOG:
1593            bOptionColor=1;
1594
1595            //一時保存値を初期化
1596            pobj_Theme=pobj_DBTheme->GetActiveTheme();
1597            obj_temp_Theme=*pobj_Theme;
1598
1599            //指定する部分
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_ADDSTRING,0,(LPARAM)"特殊ステートメント");
1604            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(カーソル行)");
1605            SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色(一般)");
1606            SendDlgItemMessage(hwnd,IDC_TARGET,CB_SETCURSEL,0,0);
1607
1608
1609            //テーマ名をコンボボックスにセット
1610            pobj_DBTheme->ResetTheme_ToComboBox(GetDlgItem(hwnd,IDC_THEME));
1611
1612
1613            SendMessage(hwnd,WM_COMMAND,MAKELONG(IDC_THEME,CBN_SELCHANGE),0);
1614            break;
1615
1616        case WM_COMMAND:
1617            switch(LOWORD(wParam)){
1618#ifdef THETEXT
1619                case IDC_SAVE:
1620                    if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_OPTION_THEME_SAVE),hwnd,(DLGPROC)DlgOptionThemeSave)) return 1;
1621
1622                    pobj_Theme=pobj_DBTheme->dupli_check(szNewThemeName);
1623                    if(pobj_Theme){
1624                    }
1625                    else{
1626                        //新規に追加
1627                        pobj_Theme=pobj_DBTheme->add(0,szNewThemeName);
1628                    }
1629                    *pobj_Theme=obj_temp_Theme;
1630                    lstrcpy(pobj_Theme->m_name,szNewThemeName);
1631
1632                    //ファイルに保存
1633                    pobj_Theme->save();
1634
1635                    //テーマ コンボボックスのカーソル位置をセット
1636                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),szNewThemeName);
1637
1638                    return 1;
1639#endif //THETEXT
1640                case IDC_THEME:
1641                    if(HIWORD(wParam)==CBN_SELCHANGE){
1642                        if(!SendDlgItemMessage(hwnd,IDC_THEME,CB_GETLBTEXT,
1643                            SendDlgItemMessage(hwnd,IDC_THEME,CB_GETCURSEL,0,0),
1644                            (LPARAM)temporary)) return 1;
1645
1646                        pobj_Theme=pobj_DBTheme->dupli_check(temporary);
1647                        obj_temp_Theme=*pobj_Theme;
1648
1649                        InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1650                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1651                    }
1652                    return 1;
1653                case IDC_TARGET:
1654                    if(HIWORD(wParam)==CBN_SELCHANGE){
1655                        InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1656                    }
1657                    return 1;
1658                case IDC_COLOR_BUTTON:
1659                    iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1660
1661                    CHOOSECOLOR cc;
1662                    static COLORREF CustColors[16];
1663                    cc.lStructSize=sizeof(CHOOSECOLOR);
1664                    cc.hwndOwner=hwnd;
1665                    cc.rgbResult=GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo);
1666                    cc.lpCustColors=CustColors;
1667                    cc.Flags=CC_FULLOPEN | CC_RGBINIT;
1668                    if(!ChooseColor(&cc)) return 1;
1669
1670                    SetColorFromSelection(iPos,cc.rgbResult,&obj_temp_Theme.TextColorInfo);
1671
1672                    InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
1673                    InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
1674
1675                    lstrcpy(obj_temp_Theme.m_name,THEMENAME_USER);
1676
1677                    //ユーザー設定を選択
1678                    ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),THEMENAME_USER);
1679                    return 1;
1680            }
1681            break;
1682
1683        case WM_NOTIFY:
1684            NMHDR *nmhdr;
1685            nmhdr=(NMHDR *)lParam;
1686
1687            if(nmhdr->code==PSN_APPLY) SaveSetting();
1688            return 1;
1689
1690        case WM_DRAWITEM:
1691            LPDRAWITEMSTRUCT pds;
1692            pds=(LPDRAWITEMSTRUCT)lParam;
1693
1694            HBRUSH hBrush,hOldBrush;
1695
1696            if(wParam==IDC_COLOR_BUTTON){
1697                iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
1698
1699                //////////////
1700                // 色を描画
1701                //////////////
1702
1703                //ペンとブラシを生成
1704                HPEN hPen,hOldPen;
1705                hPen=(HPEN)GetStockObject(WHITE_PEN);
1706                if(IsWindowEnabled(GetDlgItem(hwnd,IDC_COLOR_BUTTON)))
1707                    hBrush=CreateSolidBrush(GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo));
1708                else
1709                    hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
1710
1711                //塗りつぶす
1712                hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
1713                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1714                Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
1715                SelectObject(pds->hDC,hOldPen);
1716                SelectObject(pds->hDC,hOldBrush);
1717
1718                //ブラシを破棄
1719                DeleteObject(hBrush);
1720            }
1721            else if(wParam==IDC_SAMPLE){
1722                TEXTEDIT_COLOR_INFO ColorInfo;
1723                ColorInfo=obj_temp_Theme.TextColorInfo;
1724
1725                //背景色で塗りつぶす
1726                hBrush=CreateSolidBrush(ColorInfo.rgbBackground);
1727                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1728                PatBlt(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom,PATCOPY);
1729                SelectObject(pds->hDC,hOldBrush);
1730                DeleteObject(hBrush);
1731
1732                //フォントを選択
1733                extern HFONT hFont_TextEdit;
1734                HFONT hOldFont;
1735                hOldFont=(HFONT)SelectObject(pds->hDC,hFont_TextEdit);
1736
1737                ///////////////////
1738                // サンプルを描画
1739                ///////////////////
1740
1741                extern int font_width,font_height;
1742                int x=0,y=0;
1743
1744#ifdef THETEXT
1745#define SAMPLESTR_STATEMENT "div"
1746#define SAMPLESTR_COMMENT "<!-- この行にカーソルがあります -->"
1747#define SAMPLESTR_DEFAULT "<    style=               >Hello World!</   >"
1748#define SAMPLESTR_STRING "\"color:#123456\""
1749
1750                y+=font_height;
1751
1752                //"<    style=               >Hello World!</   >"
1753                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1754                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1755                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1756
1757                //div
1758                x=font_width*1;
1759                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1760                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1761                x=font_width*41;
1762                TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1763
1764                //"color:#123456"
1765                x=font_width*11;
1766                SetTextColor(pds->hDC,ColorInfo.rgbString);
1767                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1768
1769                x=0;
1770                y+=font_height*2;
1771
1772                //"'この行にカーソルがあります
1773                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1774                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1775                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1776                SelectObject(pds->hDC,hOldBrush);
1777                DeleteObject(hBrush);
1778
1779                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1780                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1781                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1782#else
1783#define SAMPLESTR_STATEMENT "#console"
1784#define SAMPLESTR_COMMENT "'この行にカーソルがあります"
1785#define SAMPLESTR_DEFAULT "Print "
1786#define SAMPLESTR_STRING "\"Hello World!\""
1787
1788                //"#console"
1789                SetTextColor(pds->hDC,ColorInfo.rgbStatement);
1790                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1791                TextOut(pds->hDC,0,0,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
1792                y+=font_height*2;
1793
1794                //"'この行にカーソルがあります
1795                hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
1796                hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
1797                PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
1798                SelectObject(pds->hDC,hOldBrush);
1799                DeleteObject(hBrush);
1800
1801                SetTextColor(pds->hDC,ColorInfo.rgbComment);
1802                SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
1803                TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
1804                y+=font_height*2;
1805
1806                //Print
1807                SetTextColor(pds->hDC,ColorInfo.rgbDefault);
1808                SetBkColor(pds->hDC,ColorInfo.rgbBackground);
1809                TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
1810                x+=lstrlen(SAMPLESTR_DEFAULT)*font_width;
1811
1812                //"Hello World!"
1813                SetTextColor(pds->hDC,ColorInfo.rgbString);
1814                TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
1815#endif
1816
1817                SelectObject(pds->hDC,hOldFont);
1818            }
1819            return 0;
1820
1821        case WM_HELP:
1822            HELPINFO *lpHelpInfo;
1823            lpHelpInfo = (HELPINFO *)lParam;
1824
1825            HH_POPUP hp;
1826            memset(&hp, 0, sizeof(HH_POPUP));
1827            hp.cbStruct = sizeof(HH_POPUP);
1828            hp.pt.x = lpHelpInfo->MousePos.x;
1829            hp.pt.y = lpHelpInfo->MousePos.y+10;
1830            hp.clrForeground = RGB(0, 0, 0);
1831            hp.clrBackground = -1;
1832            hp.rcMargins.left = -1;
1833            hp.rcMargins.right = -1;
1834            hp.rcMargins.top = -1;
1835            hp.rcMargins.bottom = -1;
1836            hp.idString = 0;
1837            hp.pszFont="MS Sans Serif,10";
1838
1839            switch(lpHelpInfo->iCtrlId){
1840                case IDC_TARGET:
1841                    hp.pszText="どの部分の色を設定するかを選択します。";
1842                    break;
1843                default:
1844                    hp.pszText="";
1845                    break;
1846            }
1847            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1848            return 1;
1849    }
1850    return 0;
1851}
1852BOOL CALLBACK Dlg_Option_Toolbar(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1853    switch(message){
1854        case WM_INITDIALOG:
1855            bOptionToolbar=1;
1856            break;
1857        case WM_COMMAND:
1858            switch(LOWORD(wParam)){
1859                case IDC_RESETTOOLBAR:
1860                    //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1861                    if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1862
1863                    //レバーコントロールを再生成
1864                    pobj_Rebar->ResetInitRebar();
1865
1866                    //メニュー状態を設定
1867                    ResetState_DocMenu();
1868                    return 1;
1869            }
1870            break;
1871
1872        case WM_HELP:
1873            HELPINFO *lpHelpInfo;
1874            lpHelpInfo = (HELPINFO *)lParam;
1875
1876            HH_POPUP hp;
1877            memset(&hp, 0, sizeof(HH_POPUP));
1878            hp.cbStruct = sizeof(HH_POPUP);
1879            hp.pt.x = lpHelpInfo->MousePos.x;
1880            hp.pt.y = lpHelpInfo->MousePos.y+10;
1881            hp.clrForeground = RGB(0, 0, 0);
1882            hp.clrBackground = -1;
1883            hp.rcMargins.left = -1;
1884            hp.rcMargins.right = -1;
1885            hp.rcMargins.top = -1;
1886            hp.rcMargins.bottom = -1;
1887            hp.idString = 0;
1888            hp.pszFont="MS Sans Serif,10";
1889
1890            switch(lpHelpInfo->iCtrlId){
1891                case IDC_RESETTOOLBAR:
1892#if defined(JPN)
1893                    //日本語
1894                    hp.pszText="ツールバーの配置を初期状態に戻します。";
1895#else
1896                    //英語
1897                    hp.pszText="Reset the state of the toolbar.";
1898#endif
1899                    break;
1900                default:
1901                    hp.pszText="";
1902                    break;
1903            }
1904            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1905            return 1;
1906    }
1907    return 0;
1908}
1909BOOL CALLBACK Dlg_Option_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1910    NMHDR *nmhdr;
1911    switch(message){
1912        case WM_INITDIALOG:
1913
1914            bOptionRad=1;
1915
1916            //ライン アジャスタ
1917            if(pobj_nv->bLineAdjust) SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_SETCHECK,BST_CHECKED,0);
1918
1919            break;
1920        case WM_NOTIFY:
1921            nmhdr=(NMHDR *)lParam;
1922            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
1923                if(SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_GETCHECK,0,0)) temp_bLineAdjust=1;
1924                else temp_bLineAdjust=0;
1925
1926                if(nmhdr->code==PSN_APPLY) SaveSetting();
1927            }
1928            return 1;
1929
1930        case WM_HELP:
1931            HELPINFO *lpHelpInfo;
1932            lpHelpInfo = (HELPINFO *)lParam;
1933
1934            HH_POPUP hp;
1935            memset(&hp, 0, sizeof(HH_POPUP));
1936            hp.cbStruct = sizeof(HH_POPUP);
1937            hp.pt.x = lpHelpInfo->MousePos.x;
1938            hp.pt.y = lpHelpInfo->MousePos.y+10;
1939            hp.clrForeground = RGB(0, 0, 0);
1940            hp.clrBackground = -1;
1941            hp.rcMargins.left = -1;
1942            hp.rcMargins.right = -1;
1943            hp.rcMargins.top = -1;
1944            hp.rcMargins.bottom = -1;
1945            hp.idString = 0;
1946            hp.pszFont="MS Sans Serif,10";
1947
1948            switch(lpHelpInfo->iCtrlId){
1949                case IDC_LINEADJUST:
1950#if defined(JPN)
1951                    //日本語
1952                    hp.pszText="このチェックボックスをオンにすると、ラインアジャスタ機能が有効になります。ラインアジャスタ機能をオンにすると、マウスを使ってコントロールの移動を行う際に他のコントロール同士との位置合わせが容易に行えるようになります。";
1953#else
1954                    //英語
1955                    hp.pszText="If this check is on, line adjuster becomes effective.";
1956#endif
1957                    break;
1958                default:
1959                    hp.pszText="";
1960                    break;
1961            }
1962            HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
1963            return 1;
1964    }
1965    return 0;
1966}
1967char szDomainAdd_Name[255];
1968char szDomainAdd_Domain[255];
1969BOOL CALLBACK Dlg_Option_Web_Domain_Add(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1970    switch(message){
1971        case WM_INITDIALOG:
1972            SetPosCenter(hwnd);
1973            SetFocus(GetDlgItem(hwnd,IDC_NAME));
1974
1975            if(lParam!=-1){
1976                SetWindowText(hwnd,"Web検索用ドメインを編集");
1977                SetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name);
1978                SetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain);
1979            }
1980            break;
1981        case WM_COMMAND:
1982            switch(LOWORD(wParam)){
1983                case IDOK:
1984                    GetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name,255);
1985                    GetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain,255);
1986                    EndDialog(hwnd,1);
1987                    return 1;
1988                case IDCANCEL:
1989                    EndDialog(hwnd,0);
1990                    return 1;
1991            }
1992            return 0;
1993    }
1994    return 0;
1995}
1996BOOL CALLBACK Dlg_Option_Web(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1997    HWND hListView;
1998    NMHDR *nmhdr;
1999    int i;
2000    char temporary[255];
2001    switch(message){
2002        case WM_INITDIALOG:
2003
2004            bOptionWeb=1;
2005
2006
2007            //Ctrlキーによるハイパーリンク
2008            if(pobj_nv->bCtrlKeyHyperLink) SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_SETCHECK,BST_CHECKED,0);
2009
2010            //Web検索文字列を保存するかどうか
2011            if(pobj_nv->bSaveWebFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_SETCHECK,BST_CHECKED,0);
2012
2013
2014            //拡張スタイル
2015            DWORD dwStyle;
2016            hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2017            dwStyle=ListView_GetExtendedListViewStyle(hListView);
2018            dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
2019            ListView_SetExtendedListViewStyle(hListView,dwStyle);
2020
2021            LV_COLUMN ListView_Column;
2022            ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
2023            ListView_Column.fmt=LVCFMT_LEFT;
2024
2025            ListView_Column.cx=80;
2026            ListView_Column.pszText="表示名";
2027            ListView_Column.iSubItem=0;
2028            ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
2029
2030            ListView_Column.cx=200;
2031            ListView_Column.pszText="ドメイン";
2032            ListView_Column.iSubItem++;
2033            ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
2034
2035            //一時オブジェクトにコピー
2036            pobj_temp_DBDomain->copy_get(pobj_nv->pobj_DBDomain);
2037
2038            //ドメインリストにデータをセット
2039            pobj_temp_DBDomain->SetListView(hListView);
2040
2041            break;
2042        case WM_COMMAND:
2043            switch(LOWORD(wParam)){
2044                case IDC_ADD:
2045                    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,-1)) return 1;
2046
2047                    pobj_temp_DBDomain->add(szDomainAdd_Name,szDomainAdd_Domain);
2048                    return 1;
2049                case IDC_DELETE:
2050                    hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2051                    for(i=0;i<ListView_GetItemCount(hListView);i++){
2052                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
2053                            ListView_GetItemText(hListView,i,0,temporary,255);
2054                            pobj_temp_DBDomain->del(temporary);
2055                            break;
2056                        }
2057                    }
2058                    return 1;
2059                case IDC_EDIT:
2060                    hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
2061                    for(i=0;i<ListView_GetItemCount(hListView);i++){
2062                        if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
2063                            ListView_GetItemText(hListView,i,0,temporary,255);
2064
2065                            ListView_GetItemText(hListView,i,0,szDomainAdd_Name,255);
2066                            ListView_GetItemText(hListView,i,1,szDomainAdd_Domain,255);
2067                            lstrcpy(temporary,szDomainAdd_Name);
2068                            if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,i)) return 1;
2069
2070                            pobj_temp_DBDomain->change(temporary,szDomainAdd_Name,szDomainAdd_Domain);
2071                        }
2072                    }
2073                    return 1;
2074            }
2075            return 0;
2076        case WM_NOTIFY:
2077            nmhdr=(NMHDR *)lParam;
2078            if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
2079
2080                //Ctrlキーによるハイパーリンク
2081                if(SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_GETCHECK,0,0)) temp_bCtrlKeyHyperLink=1;
2082                else temp_bCtrlKeyHyperLink=0;
2083
2084                //Web検索文字列を保存するかどうか
2085                if(SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_GETCHECK,0,0)) temp_bSaveWebFindStr=1;
2086                else temp_bSaveWebFindStr=0;
2087
2088                if(nmhdr->code==PSN_APPLY) SaveSetting();
2089            }
2090            if(nmhdr->idFrom==IDC_DOMAIN_LIST){
2091                if(nmhdr->code==NM_DBLCLK){
2092                    LPNMLISTVIEW lpnmListView;
2093                    lpnmListView=(LPNMLISTVIEW)lParam;
2094
2095                    char szBeforeName[255];
2096                    ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,0,szDomainAdd_Name,255);
2097                    ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,1,szDomainAdd_Domain,255);
2098                    lstrcpy(szBeforeName,szDomainAdd_Name);
2099                    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,(DLGPROC)Dlg_Option_Web_Domain_Add,lpnmListView->iItem)) return 1;
2100
2101                    pobj_temp_DBDomain->change(szBeforeName,szDomainAdd_Name,szDomainAdd_Domain);
2102                }
2103            }
2104            return 1;
2105    }
2106    return 0;
2107}
2108void DlgOptionSetting(HWND hwnd){
2109    PROPSHEETHEADER psh;
2110#define MAX_SETDLG 32
2111    PROPSHEETPAGE psp[MAX_SETDLG];
2112    HPROPSHEETPAGE hpsp[MAX_SETDLG];
2113    int i;
2114
2115    bOptionWhole=0;
2116    bOptionEditor=0;
2117    bOptionColor=0;
2118    bOptionToolbar=0;
2119    bOptionRad=0;
2120    bOptionWeb=0;
2121
2122    i=0;
2123
2124    //各ページのセッティング
2125    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2126    psp[i].dwFlags=PSP_DEFAULT;
2127    psp[i].hInstance=hResInst;
2128    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WHOLE);
2129    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Whole;
2130    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2131    i++;
2132    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2133    psp[i].dwFlags=PSP_DEFAULT;
2134    psp[i].hInstance=hResInst;
2135    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_EDITOR);
2136    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Editor;
2137    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2138    i++;
2139    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2140    psp[i].dwFlags=PSP_DEFAULT;
2141    psp[i].hInstance=hResInst;
2142    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_COLOR);
2143    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Color;
2144    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2145    i++;
2146    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2147    psp[i].dwFlags=PSP_DEFAULT;
2148    psp[i].hInstance=hResInst;
2149    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_TOOLBAR);
2150    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Toolbar;
2151    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2152
2153#ifndef THETEXT
2154    //RADツールに関するオプションはProjectEditorのみ表示
2155    i++;
2156    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2157    psp[i].dwFlags=PSP_DEFAULT;
2158    psp[i].hInstance=hResInst;
2159    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_RAD);
2160    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Rad;
2161    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2162#endif
2163
2164    i++;
2165    psp[i].dwSize=sizeof(PROPSHEETPAGE);
2166    psp[i].dwFlags=PSP_DEFAULT;
2167    psp[i].hInstance=hResInst;
2168    psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WEB);
2169    psp[i].pfnDlgProc=(DLGPROC)Dlg_Option_Web;
2170    hpsp[i]=CreatePropertySheetPage(&psp[i]);
2171
2172    i++;
2173
2174
2175
2176    ///////////////////////////
2177    // 一時オブジェクトを生成
2178    ///////////////////////////
2179
2180    pobj_temp_DBDomain=new CDBDomain();
2181
2182
2183
2184    memset(&psh,0,sizeof(PROPSHEETHEADER));
2185    psh.dwSize=sizeof(PROPSHEETHEADER);
2186    psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
2187    psh.phpage=hpsp;
2188    psh.hwndParent=hwnd;
2189    psh.pszCaption=STRING_OPTION;   //"オプション"
2190    psh.nPages=i;
2191    psh.nStartPage=0;
2192    psh.ppsp=psp;
2193    PropertySheet(&psh);
2194
2195
2196
2197    ///////////////////////////
2198    // 一時オブジェクトを破棄
2199    ///////////////////////////
2200
2201    delete pobj_temp_DBDomain;
2202}
2203BOOL CALLBACK DialogAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
2204    if(message==WM_INITDIALOG){
2205        SetPosCenter(hwnd);
2206
2207        SetDlgItemText(hwnd,IDC_STATIC_NAME,VERSION_APPLI_NAME);
2208
2209        char temporary[1024];
2210        sprintf(temporary,"Version %s",VERSION_STRING);
2211        SetDlgItemText(hwnd,IDC_STATIC_VERSION,temporary);
2212
2213
2214#ifndef THETEXT
2215        //ライブラリ開発チーム
2216        LoadString(hResInst,IDS_DEV_GROUP,temporary,1024);
2217        SetDlgItemText(hwnd,IDC_DEV_GROUP,temporary);
2218#endif
2219    }
2220    if(message==WM_COMMAND){
2221        switch(LOWORD(wParam)){
2222            case IDCANCEL:
2223                EndDialog(hwnd,NULL);
2224                return 1;
2225        }
2226    }
2227    return 0;
2228}
Note: See TracBrowser for help on using the repository browser.