一.IDE基礎配置html
1. 字體ios
VC6中「Tools→Options→Format→Font」配置字體;VC2005中「工具→選項→環境→字體和顏色」配置字體。編程
編寫代碼通常採用等寬字體,等寬點陣(位圖)字體,相對矢量字體而言具備兼容性好和顯示清晰的優勢。經常使用的編程等寬字體包括Fixedsys(VC6和notepad御用字體)、Consolas、YaHei Mono。瀏覽器
VC6默承認選字體只有Fixedsys和Terminal,可經過修改註冊表來改字體,在HKEY_CURRENT_USER/Software/Microsoft/DevStudio/6.0/Format下面有幾個子鍵,能夠修改Source Window鍵的FontFace和FontSize來配置源代碼窗口的顯示字體。例如設置11號的Consolas字體:FontFace=Consolas,FontSize=11。session
2. 製表符(TAB)數據結構
程序塊要採用縮進風格編寫,IDE碰到左括號換行的狀況通常會自動縮進(Auto Indent),縮進的空格數和製表符的寬度通常設爲4個半角字符。因爲不一樣的編輯器對TAB空格數的設置可能不同,有的是4有的是8,爲避免使用不一樣的編輯器閱讀程序時的佈局不整齊問題,建議只使用空格鍵對齊。框架
VC6中「Tools→Options→Tabs」的「Insert spaces/Keep tabs」中選擇「Insert spaces」;VC2005中「工具→選項→文本編輯器→全部語言→製表符」可配置製表符大小(Tab Size)/縮進大小(Indent Size)爲4,對「插入空格/保留製表符」勾選「插入空格」。編輯器
3. 行代碼字符數函數
關於一行編寫多少代碼換行比較合適的問題,能夠在VC中輸入一行」//」便可得知,通常爲75或80。工具
4.外接插件和外部工具
外接插件能擴展Visual Studio的功能,例如VC6默認並沒有行號顯示功能,可使用VC6LineNumberAddin插件實現顯示行號,「Tools -> Customize→Add-ins and Macro Files」選擇「Browse」進VC6LineNumberAddin.dll便可加載使用。咱們在VC2005的「工具→外接程序管理器」中能夠看到安裝的「Visual Assist X」插件,並可選擇啓用與否。
外部工具主要是結合IDE使用,如使用AStyle格式化當前打開的代碼文件,使用gedit打開當前代碼文件。外部工具的配置很簡單,VC6中經過「Tools→Customize→Tools」添加,VC2005中經過「工具→外部工具」添加。
如下爲AStyle的配置:
標題:AStyle
命令:C:/Program Files/Microsoft Visual Studio 8/Common7/Tools/AStyle.exe
參數:--style=ansi $(ItemFileName)$(ItemExt)
初始目錄:$(ItemDir)
勾選「使用輸出窗口」。
這樣,「工具菜單」中新增一個「AStyle」的子項,點擊「AStyle」便可按ANSI風格格式化當前文件代碼。
5. IDE指定和打開多個項目
Q1:安裝VS2005後,以前的VC6默認打開程序和圖標都變動爲VC2005的風格。如何恢復至VC6的默認風格呢?
A1:工具→文件夾選項→文件類型(Win7中是設置默認程序)
找到DSW文件,高級(可能先還原)→編輯,用於執行操做的應用程序由"C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/devenv.exe" "%1"更改成"C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin/MSDEV.EXE" "%1",這樣默認*.dsw文件就以VC6.0打開,而不是以VC8.0打開。一樣更改*.dsp文件類型以用VC6打開,固然能夠更改顯示圖標爲VC6風格的。
Q2:雙擊VC項目文件(*.sln/*.dsw),並無打開一個新的IDE窗口,而是替代了已經打開的項目。
A2:工具→文件夾選項→文件類型(Win7中是設置默認程序)
找到DSW/SLN文件,高級(可能先還原)→編輯,勾掉「使用DDE」。
二.預處理宏
1. 通用宏
VC6.0中:
Project Setting→C/C++→Preprocessor definitions
VC2005中:
項目屬性→配置屬性→C/C++→預處理器定義
(1)平臺識別宏
WIN32:指明是Window 32位系統平臺。
常見的平臺識別宏以下:
_DOS_:MS-DOS 16位系統平臺。
WIN64:指明是Window 64位系統平臺。
_WIN32_WCE:Window Mobile 32位系統平臺。
_UNIX:UNIX系統平臺。
_POSIX_:POSIX(Portable Operating System Interface of Unix)系統平臺。
_LINUX_:LINUX系統平臺。
_APPLE_/_MAC_:蘋果(Macintosh)系統平臺。
(2)字符集識別宏
_MBCS/_UNICODE:指明該工程使用的字符集(多字節字符集/UNICODE)。
在VC6.0的「Project Setting→C/C++→Project Options」處將會有/D "_MBCS"或/D "_UNICODE"開關。
在VC2005的「項目屬性→配置屬性→常規→項目默認值→字符集」中選擇「使用多字節字符集」或「使用 Unicode 字符集」;在「項目屬性→配置屬性→C/C++→使用UNICODE響應文件」中選擇「是」或「否」。在「項目屬性→配置屬性→C/C++→命令行」 處將會有/D "_MBCS"或/D "_UNICODE" /D "UNICODE"開關。
當項目中的文件具備 UNICODE 路徑(例如中文路徑)時,應在「項目屬性→C/C++→常規」和「項目屬性→連接器→常規」中開啓「使用UNICODE響應文件」開關。
(3)UI識別宏
_CONSOLE/_WINDOWS:指明應用程序的類型是控制檯程序或窗口程序(CUI/GUI)。
(4)debug/release版本識別宏
_DEBUG/NDEBUG:指明編譯版本(Debug/Release)。
2.項目類型特定宏
VC不一樣的項目類型,有一些特定的宏,以在編譯器區分項目類型。
(1)Win32 Static Library項目
VC6.0中:
Project Setting→C/C++(Category:General)→Preprocessor definitions:_LIB
若是選擇了MFC Support則_WINDOWS,_AFXDLL
VC2005中:
項目屬性→常規→配置類型→靜態庫(.lib)
項目屬性→C/C++→預處理器→預處理器定義:_LIB
(2)Win32 Dynamic-Link Library項目
VC6.0中:
Project Setting→C/C++→Preprocessor definitions:_WINDOWS,_USRDLL,DLL_EXPORTS
VC2005中:
項目屬性→常規→配置類型→動態庫(.dll)
項目屬性→C/C++→預處理器→預處理器定義:_WINDOWS;_USRDLL;DLL_EXPORTS
(3)MFC DLL項目
<1>Regular DLL with MFC statically linked(帶靜態連接MFC的規則DLL)
VC6.0中:
Project Setting→C/C++→Preprocessor definitions:_WINDOWS,_WINDLL,_USRDLL
VC2005中:
項目屬性→C/C++→預處理器→預處理器定義:_WINDOWS;_USRDLL
<2>Regular DLL using shared MFC DLL(使用共享MFC DLL的規則DLL)
VC6.0中:
Project Setting→C/C++→Preprocessor definitions:_WINDOWS,_WINDLL,_AFXDLL, _USRDLL
VC2005中:
項目屬性→C/C++→預處理器→預處理器定義:_WINDOWS;_USRDLL
<3>MFC Extension DLL(using shared MFC DLL)(MFC擴展DLL)
VC6.0中:
Project Setting→C/C++→Preprocessor definitions:_WINDOWS,_WINDLL,_AFXDLL,_USRDLL
VC2005中:
項目屬性→C/C++→預處理器→預處理器定義:_WINDOWS; _AFXEXT
在DLL項目中,_USRDLL宏表示生成Export Lib!
3.其餘經常使用宏
__FILE__/__LINE__:
__FILE__爲包含當前程序文件名的路徑字符串,例如C:/Program Files/Microsoft Visual Studio/VC98/INCLUDE/stdio.h;__LINE__爲當前程序代碼行號,從1開始的整數。
__STDC__/__cplusplus:
當編譯標準C (ANSI C)程序時,編譯器自動定義__STDC__ ;當編譯標準C++ 程序時,編譯器自動定義__cplusplus。
_MSC_VER:Microsoft Visual C++編譯器的版本號。例如VC++6.0爲1200,VC++8.0爲1400,以此類推。
WIN32_LEAN_AND_MEAN告訴編譯器不加載MFC(Not Using MFC)。
關於VC編譯器預處理宏,參考:
《Predefined Macros(VC6.0)》
《C/C++ Preprocessor Reference-Predefined Macros(VC8.0)》
《What’s the difference between the WIN32 and _WIN32 defines in C++》
三.工做目錄和控制檯程序運行參數
VC6.0中:
「Project Setting→Debug→Working directory」處填寫exe程序的工做目錄。
在「Project Setting→Debug→Program argument」處填寫main運行參數。
VC2005中:
在「項目屬性→配置屬性→調試→工做目錄」處填寫exe程序的工做目錄。
在「項目屬性→配置屬性→調試→命令參數」處填寫main運行參數。
默認的工做目錄爲ProjectDir,即*.dsp/*.vcproj所在目錄。
經過編譯器啓動(Ctrl + F5)應用程序時,能夠將所依賴的lib和dll庫文件所在目錄設爲工做目錄。應用程序執行期間,文件操做的默認路徑爲工做目錄。
工做目錄是指當前目錄,GetCurrentDirectory()獲得的路徑;SetCurrentDirectory來改變。
運行目錄是指exe所在路徑,可經過GetModuleFileName()獲得。
四.附加頭文件包含
VC6.0中:
VC6.0默認include包含路徑:Tools→Options→Directories→Include files。
對於特定項目的頭文件包含,在「Project Setting→C/C++(Category:Preprocessor)→Additional include directories」處添加附加頭文件目錄,相對目錄參考*.dsp文件。
目錄路徑不需添加雙引號,路徑分隔符爲’/’或’/’,沒必要考慮反斜槓’/’的轉義。多個路徑之間以逗號分隔。
相應的在「Project Setting→C/C++→Project Options」中將會出現「/I」的包含命令。
VC2005中:
VC2005默認include包含路徑:工具→選項→項目和解決方案→VC++目錄→包含文件。
對於特定項目的頭文件包含,在「項目屬性→配置屬性→C/C++→常規→附加包含目錄」處添加附加包含目錄,相對目錄參考$ProjectPath(*.vcproj文件路徑)。
目錄路徑不需添加雙引號,路徑分隔符爲’/’或’/’,沒必要考慮反斜槓’/’的轉義。多個路徑之間以分號分隔。
相應的在「項目屬性→配置屬性→C/C++→命令行」 中將會出現「/I」的包含命令。
關於#include的兩種包含方式
#include <std*.h>爲編譯器指定的包含路徑下的頭文件:即在VC6.0中的「Tools→Options→Directories→Include files」(對應VC2005的「工具→選項→項目和解決方案→VC++目錄→包含文件」)處指定的包含目錄。默認狀況下包括
(1)$(VCInstallDir)include(/Microsoft Visual Studio/VC98/INCLUDE)
(2)$(VCInstallDir)atlmfc/include(/Microsoft Visual Studio/VC98/ATL/INCLUDE、/Microsoft Visual Studio/VC98/MFC/INCLUDE)
(3)$(VCInstallDir)PlatformSDK/include(VC2005)。
對於「Tools→Options→Directories→Include files」(「工具→選項→項目和解決方案→VC++目錄→包含文件」)目錄下的文件的包含,通常可以使用尖括號包含。系統對尖括號的包含優先到編譯器設置的包含路徑下定位,再到附加包含目錄下進行定位。
#include "MyHeader.h"爲在「Tools→Options→Directories→Include files」(「工具→選項→項目和解決方案→VC++目錄→包含文件」)處人工添加的包含路徑下的頭文件或者附加包含目錄下的頭文件。
對於編譯器提供的標準庫函數頭文件(「Tools→Options→Directories→Include files」(「工具→選項→項目和解決方案→VC++目錄→包含文件」)),通常使用尖括號進行包含聲明,固然使用雙引號包含也沒有錯。
對於在「Tools→Options→Directories→Include files」(「工具→選項→項目和解決方案→VC++目錄→包含文件」)處人工添加的包含路徑和附加包含目錄下的頭文件的包含可使用尖括號進行包含,但通常使用雙引號。
原則上,對於工程或文件可見的包含目錄下的頭文件包含,使用以上兩種包含方式中的任一種都不會出錯,主要是它們在搜索目錄時的順序不同。習慣上使用尖括號包含標準庫函數頭文件,使用雙引號包含用戶自定義頭文件。
通常針對具體工程使用附加頭文件包含便可,沒必要去動編譯器的「Tools→Options→Directories→Include files」(對應VC2005的「工具→選項→項目和解決方案→VC++目錄→包含文件」)。可是,對於像DirectX、wxWidgets等這樣的SDK,通常宜對include/library路徑做編譯器級全局配置,同時指定相應source路徑,以便作源碼級調試(F11進入SDK內部代碼)。下面的連接庫包含情同此理。
External Dependencies裏面顯示的是你的工程要用到的頭文件,不在你的工程裏面,並且也不在VC的默認包含路徑中。參考:《VC6.0的External Dependencies》。
五.附加連接庫包含
VC6.0中:
VC6.0默認lib包含路徑:Tools→Options→Directories→Library files
對於特定項目的頭文件包含,能夠經過如下兩步添加附加連接庫:
1. 在「Project Setting→Link(Category:Input)→Additional library path」處添加附加庫目錄,相對目錄參考*.dsp文件。
目錄路徑不需添加雙引號,路徑分隔符爲’/’或’/’,沒必要考慮反斜槓’/’的轉義。多個路徑之間以逗號分隔。
相應的將會在「Project Setting→Link→Project Options」處同步「/libpath」庫包含命令。
2. 在「Project Setting→Link(Category:General)→Object/Library Modules」 處添加庫文件名YourLib.lib(也可在文件中使用#pragma comment(lib, "YourLib.lib")顯式導入所依賴的靜態庫),多個庫之間以空格分隔。
相應的將會在「Project Setting→Link→Project Options」處同步包含的庫名稱。
VC2005中:
VC2005默認lib包含路徑:工具→選項→項目和解決方案→VC++目錄→庫文件
對於特定項目的庫文件包含,能夠經過如下兩種方式添加附加庫目錄:
1.
(1)在「項目屬性→配置屬性→連接器→常規→附加庫目錄」處輸入附加庫目錄路徑,相對目錄參考$ProjectPath(*.vcproj文件路徑)。
目錄路徑不需添加雙引號,路徑分隔符爲’/’或’/’,沒必要考慮反斜槓’/’的轉義。多個路徑之間以分號分隔。
相應的將會在「項目屬性→配置屬性→連接器→命令行」處同步「/LIBPATH」庫包含命令。
(2)在「項目屬性→配置屬性→連接器→輸入→附加依賴項」 處添加庫文件名YourLib.lib(也可在文件中使用#pragma comment(lib, "YourLib.lib")顯式導入所依賴的靜態庫),多個庫之間以空格分隔。
相應的將會在「項目屬性→配置屬性→連接器→命令行」處同步包含的庫名稱。
2.
在「項目屬性→配置屬性→連接器→命令行」 處添加庫文件名YourLib.lib(必要時添加相對目錄,保證YourLib的可見性)。
六.生成文件目錄設置
VC6.0中:
在「Project Setting→General→Output directories」的「Output files」處填寫*.exe或*.lib/*.dll的生成目錄,相應在「Project Setting→Link(或Library)→Output file name」處將會同步文件輸出路徑。相對目錄參考*.dsp文件。
在「Project Setting→General→Output directories」的「Intermediate files」處填寫中間文件生成目錄。相對目錄參考*.dsp文件。
VC2005中:
在「項目屬性→常規→輸出目錄」處填寫輸出目錄,在「項目屬性→常規→中間目錄」處填寫中間目錄,相對目錄參考$ProjectPath(*.vcproj文件路徑)。
在「項目屬性→連接器(或管理員)→常規→輸出文件」處填寫輸出文件路徑。
輸出目錄(OutDir)通常爲$(SolutionDir)$(ConfigurationName)
輸出文件(OutputFile)通常爲$(OutDir)/$(ProjectName).exe(*.lib,*.dll)
1.環境變量宏說明
$(SolutionDir)爲*.sln文件所在文件夾,尾帶‘/’;
$(ProjectDir)爲*.vcproj文件所在文件夾,尾帶‘/’;
$(PlatformName)爲平臺名稱,例如Win32,Windows Mobile 6 Professional SDK(ARMV4I)。
$(ConfigurationName)爲*.sln的*.vcproj文件所在文件夾下的debug、release文件夾,參考*.vcproj文件中的<Configurations>配置項。
具體在「項目屬性→配置屬性→調試→命令」下拉點擊「編輯」,展開「宏(M)>>」,能夠看到不少項目內置宏。
2.生成目錄的配置
輸出目錄(OutDir):$(ProjectDir)$(PlatformName)/$(ConfigurationName)
以上穿插$(PlatformName)主要是爲了發佈多平臺版本考慮,對於普通的單平臺開發,該路徑可選。
TargetDIr爲OutDir後加‘/’。
輸出文件主要按項目區分以下:
(1)DLL項目:*.pdb,*.exp,*.lib
(2)EXE項目:*.pdb
中間目錄(IntDir):$(OutDir)/Intermediate
中間文件包括*.pch,*.obj,(*.sbr),vc6(8)0.idb,vc6(8)0.pdb
輸出文件:$(OutDir)/$(ProjectName).lib(dll、exe)
(1)DLL項目:*.ilk,*.dll
(2)EXE項目:*.ilk,*.exe
關於*.pch,參考《預編譯頭文件》;注意*.ilk和*.pdb文件只有在Debug版本時纔會生成,關於*.ilk和*.pdb,參考《VC項目配置基礎》。
通常一個大的工程(*.dsw,*.sln),同時含有LIB、DLL和EXE項目,習慣將LIB輸出到項目輸出目錄或將這些連接時用到的LIB放到專門的目錄;EXE和其運行依賴的DLL都輸出到BIN目錄,這樣便於項目的組織和最終成果的發佈。
七.關於相對目錄
相對目錄是相對某個文件而言的,例如在VC項目屬性配置附加包含目錄、附加庫目錄則是相對*.dsp、*.vcproj文件而言的;在某個*.c、*.cpp文件中使用#include包含命令,是相對這個*.c、*.cpp文件而言的。
當前目錄是可見的,通常直接引用文件名(夾),對於子文件夾能夠添加」./」。
..:父目錄
../include:父目錄下的include目錄
../..:祖父目錄
../../include:祖父目錄下的include目錄
在VC2005中,「屬性窗口」可查看當前文檔的「文件信息」,其中可查看文件相對*.vcproj的相對路徑。
八.依賴項目聯編
一個解決方案(dsw、sln)能夠建立不少輔助子項目(dsp、vcproj),如何設置使在編譯主項目的時,先編譯所依賴的輔助項目呢?
通常會配置輔助子項目的OutDir和主項目相同,這樣生成的lib或dll對於主項目exe直接可見。
VC6.0中:
選擇菜單「Project→Dependencies」能夠選擇須要聯編的項目。
VC2005中:
在解決方案資源管理器中右擊項目名稱,選擇「引用」或「項目依賴項」菜單可添加(選擇)引用依賴項目;選擇「項目生成順序」可查看創建項目依賴後的項目生成順序。
創建依賴關係後,主項目編譯(F7,Build)時,若發現輔助依賴子項目有改動,則會先編譯子項目。
九.附加DLL調試
VC6.0中:
若是你須要調試的DLL是動態裝入(LoadLibrary)的,則須要在「Project Setting →Debug(Category:Additional DLLs)」處添加這個DLL文件。
Place a check in the first column to load the module’s symbols at the start of a debug session.
十.導出makefile
VC6.0中選擇菜單「Project→Export Makefile」便可導出Makefile文件*.mak。
VC6之後再也不支持makefile輸出了。
參考:《VC的MAKE文件的語法》,《vs6 IDE導出的makefile使用方法》,《教你在VS2005下寫MakeFile》
十一.代碼的編輯與閱讀導航
Visual Studio自己就帶有充分的代碼組織、編輯、分析以及閱讀能力的支持。
VC6.0的「Project Settings→C/C++→Generate Browse info」和「Project Settings→Browse info→Build browse info file」可生成嚮導文件,FileView和ClassView須要這些信息導航。
VC6.0和VC2005中的「Edit→Find in Files」支持指定項目、工程或文件內的關鍵字搜索。
VC6.0的「Tools→Source Browser」(Alt+F12),提供對「Definitions and References」、「File Outline」、「Base Classes and Members」、「Derived Classes and Members」、「Call Graph」、「Callers Graph」等導航功能支持。VC2005側邊欄「類視圖」中支持顯示「基類型」、「派生類型」、「繼承成員」等功能,右鍵快捷菜單中的「調用瀏覽器」支持函數調用關係圖和被調用關係圖的查看。
編輯時,VC6右鍵快捷菜單支持「List Members」、「Parameter Info」、「Type Info」、「Complete Word」。對應VC2005文本編輯器工具欄中的「顯示對象成員列表」、「顯示參數信息」、「顯示快速信息」、「顯示文字自動完成」。
VC2005右鍵快捷菜單中支持「查找全部引用」,配合代碼定義窗口,可很方便地瀏覽代碼。VC2005標準工具欄中的「向後定位/向前定位」支持定位功能。此外,在閱讀代碼時,咱們可使用書籤(Bookmark)來設置錨點,這樣就能夠實現基於書籤的自定義索引導航。
下面介紹經常使用的編程輔助插件軟件及源代碼層次結構分析工具軟件。
1.Visual Assist X是一款很是好的Microsoft Visual Studio輔助插件,支持C/C++,C#,ASP,Visual Basic,Java和HTML等語言,能自動識別各類關鍵字、系統函數、成員變量、自動給出輸入提示、自動更正大小寫錯誤、自動標示錯誤等,有助於提升開發過程的自動化和開發效率。例如VA Outline中右鍵→Refactor→Rename可以快速更新變量命名。
2.Windows下的Source Insight是一個面向項目開發的程序編輯器和代碼導航瀏覽器,它還能顯示reference trees,class inheritancediagrams和call trees。相應的Linux下閱讀源代碼的利器Source Navigator能很好地解決文件定位和跳轉問題。
3.Rational Rose是利用UML(統一建模語言)進行分析和設計面向對象軟件系統的強大的可視化工具,能夠進行項目需求分析、結構規劃和生成框架代碼,還能夠支持從現有系統逆向轉出工程代碼,生成Rose模型的功能。
逆向工程(Reverse Engineer)就是從現有系統的代碼來生成模型的功能。經過Rational Rose分析已有的代碼,可瞭解代碼結構和數據結構,生成類層次關係圖、數據模型圖和組件圖。
十二. VC經常使用快捷鍵
Alt+F7:Project Settings
Ctrl+J/K:尋找上一個/下一個預編譯條件
Ctrl+Shift+J/K:尋找上一個/下一個預編譯條件並將這一塊選定
Ctrl+Tab:當前打開文檔和上一次打開文檔切換。
Alt+O:頭文件與cpp文件的交互顯示
F12:Goto definition
Shift+F12:Goto reference
Ctrl+Home:文檔頭
Ctrl+Shift+Home:選定從當前位置到文檔頭
Ctrl+End:文檔尾
Ctrl+Shift+End:選定從當前位置到文檔尾
Alt+F8:自動格式重排
Ctrl+F4:關閉當前文檔
Ctrl+Z/Alt+Backspace:Undo
Ctrl+Shift+Z/Ctrl+Y:Redo
Ctrl+B/Alt+F9:編輯斷點
Ctrl+Shift+F9:去掉全部斷點
Ctrl+D:定位工具條查找輸入欄
Alt+F3/Ctrl+F:當前文檔查找
Ctrl+F3:查找下一個
Ctrl+Shift+F3:查找上一個
Ctrl+H:替換
Ctrl+]:括號匹配
Ctrl+↑:向上滾屏
Ctrl+↓:向下滾屏
Ctrl+←:移到前一個單詞
Ctrl+→:移到後一個單詞
Ctrl+Shift+←:選定當前位置到前一個單詞
Ctrl+Shift+→:選定當前位置到後一個單詞
Ctrl+Shift+]:括號匹配塊選
Ctrl+Shift+F8:配合鼠標和方向鍵實現豎直塊選
Ctrl+Backspace:刪除當前單詞的前半截(以光標爲分割)
Ctrl+Del:刪除當前單詞的後半截(以光標爲分割)
Ctrl+L:剪切當前行
Ctrl+Shift+L:刪除當前行
F2:上一個書籤
Shift+F2:上一個書籤
Alt+F2:編輯書籤
Ctrl+F2:添加/刪除一個書籤
Ctrl+Shift+F2:清除全部書籤
參考:
《VC的環境設置》