将tc下的程序移植到vc中
- 格式:doc
- 大小:32.00 KB
- 文档页数:5
今天在将2003建立的工程转换成2005时,发现遇到很多问题,网上搜了一些解决办法:经常写VC工程的人都会遇到升级到VS2005时出现的各种各样的问题,下面写一些自己遇到的问题,还有什么不全的请大家补充。
希望能给朋友们一些帮助。
VC6 和 VS2003 转换到VS2005 时可能会遇到的问题以及解决方法1.以前可以这样用try catchcatch(CException *e){pApp->Warn("%s",e->GetErrorMessage);e->Delete();return FALSE;}现在必须修改为:catch(CException *e){TCHAR errormsg[255];e->GetErrorMessage (errormsg,255,NULL);pApp->Warn("%s",errormsg);e->Delete();return FALSE;2. strchr必须强制转换一下。
以前可以 char *str2=strchr(line,'|');2005必须 char *str2=(char *)strchr(line,'|');3.lifescope of int i in for(int i; i< size; ++i)in VC6, the codes below are okfor(int i = 0; i< 10; ++i){//...}for(i = 20; i< 40;++i){//...}but in VS2005, we should write like below:for(int i = 0; i< 10; ++i){//...}for(int i = 20; i< 40;++i)//...}in fact, from , the compiler accord with C++ standard more than VC6.If you are porting a VC6 project to VS2005, you will encounter ma ny many codes like this.4. ON_WM_NCHITTEST (and other MFC macros) won't compile in VS2005VS2005中,ON_WM_NCHITTEST宏编译不过When I add a message handler of ON_WM_NCHITTEST to a CCont rolbar-derived class, it compiles error:error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CMenuBar::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)' Ca st from base to derived requires dynamic_cast or static_castTo fix this bug, we should change the prototype of OnNcHitTestfromafx_msg UINT OnNcHitTest(CPoint point);toafx_msg LRESULT OnNcHitTest(CPoint point);5. VS2005中有些可能引起内存越界的函数不建议使用了In VS2005, some dangerous functions are deprecatedchar c[10];strcpy(c, "testtestts"); //ok with VC6, but not in VS2005strcpy_s(c, _countof(c),"testtestt");//9 chars, ok in VS2005strcpy_s(c, _countof(c),"testtestt");//10 chars, assert!!!!! in VS2 0056.error C2440: 'static_cast' : cannot convert from 'HRESULT (__this call CtestpalView::* )(WPARAM,LPARAM)' to 'AFX_PMSG'None of the functions with this name in scope match the targ et typeHRESULT (__thiscall CtestpalView::* )(WPARAM,LPARAM)AFX_PMSG类型:void (AFX_MSG_CALL CCmdTarget::* )(void)7.error C2440: 'static_cast' : cannot convert from 'void (__thiscall C SettingStart::* )(BOOL,HANDLE)' to 'void (__thiscall CWnd::* )(BOOL, DWORD)'In VC6, the handler for ON_WM_ACTIVATEAPP was expected to b eafx_msg void OnActivateApp( BOOL, HANDLE);In VC7 and vs2005, it has been changed toafx_msg void OnActivateApp( BOOL, DWORD );8.error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::Co.....解决方法,Property page ->C/C++ ->Language ->treat Wchar-t 改为 No未完待续......官方总结:Visual C++ 2005库已经发生了一系列的变化,可能会对现有的程序有所影响,在升级到Visual C++ 2005之前,必须要确定程序中没有这些问题。
VC6转VS主要是在字符里都要加_T("")这个宏,VC6里不用,另外就是对话框的InitDiolag函数在重写里面,当年找这个找了半天,vs2010比vc6好一点,就是特慢!编译时特慢!我觉得最麻烦的就是UNICODE 和ANSII格式问题vc默认的是8 vs是16至于很多字串,你可以在vs 里改成多字节别用unicode就可以了,就可以省去要加_T的麻烦了第一个问题我没遇到过,但是估计你把原来的afx_msg BOOL OnDestroy()的声明改成afx_msg void OnDestroy()就可以了第二个问题最好的解决办法是把所有的字符串都加上TEXT标示,如MessageBox("Hello")改为MessageBox(TEXT("Hello"))把所有的char或CHAR类型全部用TCHAR替换,就可以了.还可以在属性里把使用Unicode字符集改称使用多字节字符集不用修改也可以达到同样效果.不过程序运行速度要比第一种方法稍慢.重新用vs2008建新工程再把代码拷贝过来吧直接打开的话会有问题的今天把自己在VC6.0下的代码移植到VC2008,发现了几个比较棘手但是对新手来说很常见的问题。
下面是我在网上找的解决方法。
以后遇到问题随时更新。
NO.1mt.exe : general error c101008a: Failed to save the updated manifest to the file2009-10-09 23:15这个问题经常出现!其实并不是你的真正出现了什么问题,只是你的编译链接的时候编译器自身的问题而已!也许是VS2005 ,VS2008 的BUG吧,解决的方法:点class view中的工程,选右鍵,再点clean就可以了;或者是 build->clean solusion也可以。
NO.2error C2664: cannot convert parameter 1 from 'const char [27]' to 'LPCT2009年04月11日星期六10:461> error C2664: 'sprintf' : cannot convert parameter 1 from 'const char [27]' to 'LPCTSTR'1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style casterror C2664: “sprintf”: 不能将参数 2 从“const char”转换为“LPCWSTR”与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换问题的原因是字符串ANSI和Unicode编码的区别:VC6与VS2003等默认使用ANSI编码,而VS2008默认采用Unicode。
libcurl vc编译
要在Visual C++中编译libcurl库,您可以按照以下步骤进行操作:
下载libcurl库源代码。
您可以从libcurl的官方网站或相关资源网站下载最新版本的源代码。
解压源代码文件。
将下载的源代码文件解压到您选择的目录中。
创建Visual C++项目。
打开Visual Studio,并创建一个新的空项目,选择Visual C++作为项目类型。
添加libcurl库文件。
将libcurl库文件(例如,libcurl.lib)添加到您的项目中。
您可以将文件直接复制到项目文件夹中,或者在项目属性中设置库文件的路径。
添加头文件路径。
在项目属性中,添加libcurl头文件的路径。
这通常在libcurl源代码的include目录下。
添加库文件路径。
在项目属性中,添加libcurl库文件的路径。
这通常在libcurl源代码的lib目录下。
添加链接器设置。
在项目属性中,找到链接器设置,并添加libcurl库文件名(例如,libcurl.lib)到链接器的输入选项中。
编写代码。
在您的项目中创建一个新的C++源文件,并编写使用libcurl库的代码。
编译和运行。
保存您的代码,并使用Visual Studio编译和运行您的项目。
请注意,上述步骤可能因您的Visual Studio版本和操作系统而
有所不同。
确保您按照适用于您特定环境的正确步骤进行操作。
软件安装---------------------------------------------- 杨煜敏可以支持的版本:Microsoft Visual Studio 2010 Level Professional, Premium or Ultimate安装之前需要确认,是否已经安装过TwinCAT3和SP1:如果之前已经安装请看流程1-21如果之前没有安装请看流程2-161.安装之前先卸载TwinCAT32.随后开始安装VS2010,打开安装程序(注:WIN7系统需要以“管理员运行”)3.点击下一步4.选择“我已阅读并接受许可条款”并点击下一步5.选择“完全”后点击安装6.开始安装VS20107.安装完成8.接下来需要安装一个很重要的插件:"Windows Driver Kit" (WDK)下载链接:/downloads/en/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b 996-7633f2ec14ff安装这个插件是为了能在TwinACT 3工程环境创建和编辑C++模块。
下载后用镜像打开选择“Build Environment”后点击OK9.弹出窗口点击OK10.选择“I agree”后点击OK11.开始安装12.安装完成后点击Finish结束13.随后打开【系统属性】修改环境变量,点击【环境变量】14.点击系统变量下的“新建”,分别填入变量名和变量值变量名:WINDDK7变量值:C:\WinDDK\7600.16385.115.设置好后会出现在系统变量中16.最后就可以安装Twincat3了,和之前安装完整版的唯一区别是在安装过程中多了一个选项,TC3软件会自动识别你当前的电脑有VS2010还是VS2012,之后让你选择把Twincat3的runtime嵌入到哪一个工程界面中,其他步骤可以参考之前的文档。
在使用tc编写程序时,你或许对其中的*.lib文件产生疑问,这些lib文件有什么用途?用C 语言编程时,通常要建立一些用户函数。
如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令将其包含到源程序之中,以提高编程效率。
但在特定的程序中一般仅使用这些函数的一部分,若用上述方法包含所有函数,编译器在编译的时候会把所有包含进的函数都进行编译,这无疑会使源程序变得庞大而难于理解,并会影响执行效率。
建立用户目标模块库(lib文件)可以解决这个问题,你可以事先把有特定功能的通用的子函数集编译完成后生成的obj文件打入lib文件,当链接器tlink.exe在进行链接操作时,便只会把程序内部用到的通用函数所在的obj文件链接进来(已验证:不能定位到具体函数),这样生成的obj文件便会更精简,生成的exe文件也更小。
其实,一个lib文件是obj文件的集合。
当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。
我们可以通过tlib.exe(在tc2.0下的根目录)来对lib文件进行操作,你可以把自己生成的obj文件通过tlib命令加入到一个lib文件中,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。
明白了lib文件的大致结构以及对它的具体操作,在学习C语言的过程中,就会又多了一个切入点对C语言具体实现进行研究。
在command下,把当前目录设置为tlib.exe所在目录,然后输入tlib命令回车,此时显示的内容就是对tlib命令的详细解释,语法如下:Syntax: TLIB libname [/C] [/E] commands, listfilelibname library file pathnamecommands sequence of operations to be performed (optional)listfile file name for listing file (optional)A command is of the form: <symbol>modulename, where <symbol> is:+ add modulename to the library- remove modulename from the library* extract modulename without removing it-+ or +- replace modulename in library-* or *- extract modulename and remove it/C case-sensitive library/E create extended dictionary具体解释:tlib libname [/C] [/E] commands, listfile/C:大小写敏感标志。
代码移植的技巧1.了解目标平台:在移植代码之前,您需要了解代码的目标平台的硬件和软件环境。
这包括处理器架构、操作系统、编译器和软件库等方面。
2.保持代码模块化:将代码分解为模块可以使它们更易于移植。
模块化的代码减少了依赖性和对底层平台的特定细节的依赖性,使代码更容易在不同平台之间共享和重用。
3.使用可移植的编程语言:一些编程语言比其他编程语言更容易在不同平台之间移植。
例如,Java和Python是高度可移植的语言。
4.使用标准库:标准库是跨平台的,因此使用标准库可以帮助您避免使用特定于平台的代码。
标准库通常包含许多常见任务(如字符串操作),因此您不需要自己编写代码,从而减少了错误的风险。
5.仅使用标准C库:不要使用特定于平台的C库。
相反,只使用标准C库。
标准C库应该在大多数平台上是相同的,这意味着您的代码将更容易移植到其他平台。
6.调试移植的代码:移植代码时,确保对代码进行彻底的调试。
这涉及到在目标平台上测试代码并更正错误。
此过程需要一定的时间,但它可以确保在不同平台之间移植的代码是正确的。
7.使用交叉编译器:移植代码时,可能需要使用交叉编译器。
交叉编译器是能够在一种平台上编译另一种平台代码的编译器。
交叉编译器可以帮助您生成与目标平台兼容的代码。
8.了解特定于平台的细节:您需要了解目标平台的特定细节,以便在移植代码时做出必要的更改。
特定细节可能包括内存分配、线程控制、文件系统和网络协议等方面。
9.使用跨平台库:一些开源库可以在多个平台上使用。
这些库的使用将减少为在每个平台上编写代码的必要性,从而使移植代码更容易。
10. 遵循通用编程惯例:在编写代码时,遵循通用编程惯例将使代码更加容易移植。
例如,避免在代码中使用汇编语言,使用适当的编程模式和技术等。
vc dll导出方法VC DLL导出方法在VC(Visual C++)中,DLL(Dynamic Link Library)是一种动态链接库,它可以包含多个可执行文件。
在使用VC开发过程中,经常需要将函数或变量导出为DLL,以供其他程序使用。
本文将介绍如何在VC中导出方法为DLL,并详细讲解相关的技术和注意事项。
一、什么是VC DLL导出方法?VC DLL导出方法是指在VC中将函数或变量导出为动态链接库的过程。
通过将函数或变量导出为DLL,其他程序可以使用这些函数或变量,实现代码的共享和重用。
在VC中,导出方法可以通过使用宏、关键字或修饰符等方式实现。
二、VC DLL导出方法的实现步骤1. 创建VC项目:首先,在VC中创建一个新的项目。
可以选择“Win32 Console Application”或“Win32 DLL”等项目类型,根据实际需求选择。
2. 编写代码:在项目中编写需要导出的函数或变量。
可以使用C或C++语言编写代码,根据实际需求进行逻辑处理和功能实现。
3. 声明导出函数或变量:在函数或变量的前面加上宏、关键字或修饰符等,声明它们为导出的。
例如,在VC中可以使用__declspec(dllexport)关键字来声明导出函数或变量。
4. 生成DLL文件:编译项目并生成DLL文件。
在生成过程中,VC 会将导出的函数或变量打包为动态链接库,生成对应的DLL文件。
5. 使用DLL文件:在其他程序中引用生成的DLL文件,调用其中的导出函数或变量。
可以通过函数指针、LoadLibrary()和GetProcAddress()等方式实现。
三、VC DLL导出方法的注意事项1. 函数或变量的命名:导出的函数或变量的命名应具有一定的规范性和易读性,以方便其他程序员使用和理解。
2. 函数或变量的参数和返回值:导出的函数或变量在设计时应考虑参数的合理性和返回值的正确性,以避免出现错误或歧义。
3. 调用约定和位宽:在导出函数或变量时,需要指定调用约定和位宽,以确保在不同的编译环境中能够正确地调用和使用。
vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。
3.打开VC6CN文件夹,其中有如下图标,鼠标双击。
4.如下图所示就是我们安装的第一步,单击下一步。
5.选择“接受协议”后单击下一步。
6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。
7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。
8.单击下一步。
9.如下界面,单击“继续”,开始安装软件。
10.点击“确定”。
11.选择“是”,继续安装。
12.选择“typical”继续安装13.选择“ok”。
14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。
17.选择“是”,取消MSDN的安装。
18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++ 6.0”就可以运行程序了。
也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。
调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release状态。
“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
vc使用方法VC 使用方法。
VC 是一款功能强大的集成开发环境,可以帮助开发者进行C/C++ 程序的开发。
本文将介绍 VC 的基本使用方法,帮助初学者快速上手。
1. 安装 VC。
首先,你需要从官方网站下载 VC 的安装包,并按照提示进行安装。
安装完成后,打开 VC,你将看到一个简洁的界面,包括菜单栏、工具栏、编辑区和输出区。
2. 创建新项目。
在 VC 中,你可以创建新项目来进行开发。
点击菜单栏中的“文件”选项,选择“新建”,然后选择“项目”。
在弹出的对话框中,选择项目类型(如控制台应用程序、Windows 桌面应用程序等),填写项目名称,点击“确定”即可创建新项目。
3. 编写代码。
在创建新项目后,你可以在编辑区编写代码。
VC 提供了丰富的代码编辑功能,包括代码高亮、自动补全、代码折叠等,可以大大提高编码效率。
4. 调试程序。
在编写完代码后,你可以点击工具栏中的“调试”按钮来进行程序调试。
VC 提供了强大的调试功能,可以帮助你快速定位和解决程序中的 bug。
5. 构建和运行程序。
当程序编写完成并通过调试后,你可以点击工具栏中的“生成”按钮来构建程序。
构建完成后,你可以点击“运行”按钮来运行程序,查看程序的运行效果。
6. 其他功能。
除了上述基本功能外,VC 还提供了许多其他功能,如版本控制、性能分析、代码重构等,可以帮助你更好地进行程序开发和维护。
总结。
通过本文的介绍,相信你已经对 VC 的基本使用方法有了一定的了解。
当然,VC 还有很多其他功能和技巧等待你去探索和学习。
希望本文能够帮助你快速上手 VC,并顺利进行 C/C++ 程序的开发工作。
祝你编程愉快!。
Turbo C(简称tc)是 dos 时代经典的编译器,学习编程时,有很多图形类和游戏类的程序都是用 tc 编写的。
由于 c 语言标准的不完善,这些程序大多数都不能直接在 vc 里面编译。
本文就讲解怎样将 tc 程序移植到 vc 下。
注:本文以 VC 6.0 为范例(高版本的 vc 大同小异),同时请安装最新版本的 EasyX 图形库。
移植前请注意:1.确保 tc 代码可以正确运行。
2.将 tc 代码复制粘贴到 vc 里面。
注意,vc 里面代码文件的扩展名要用 .cpp,不能用 .c。
3.以下解决办法不分先后顺序,哪条对应就按照哪条修改。
4.如果没找到对应的解决办法,可以暂时跳过,先改后面的。
可能修改了第 3 条错误,第 2 条错误也就没有了。
5.可能解决一个问题后,会出现 10 个新问题,这不要紧。
细心、耐心一些,一个一个问题慢慢处理,并不复杂。
以下正文。
错误提示:fatal error C1083: Cannot open include file: 'bios.h': No such file or directory解决办法:删掉 #include <bios.h>错误提示:fatal error C1083: Cannot open include file: 'dos.h': No such file or directory解决办法:删掉 #include <dos.h>错误提示:error C2065: 'bioskey' : undeclared identifier解决办法:根据 bioskey 的参数,适当的用 getch / kbhit 代替。
具体请参考:/skills/View.aspx?id=77错误提示:error C2065: 'getch' : undeclared identifier解决办法:由于 tc2.0 对于一些常用函数可以不引用头文件,这是不标准的写法,在之后的编译器都会报错。
请增加相关的头文件引用:#include <conio.h>错误提示:error C2065: 'registerbgidriver' : undeclared identifier解决办法:删除错误行:registerbgidriver(xxx);错误提示:error C2065: 'sleep' : undeclared identifier解决办法:改用 Sleep,并将参数扩大 1000 倍。
例如,原来是 sleep(3);,修改为Sleep(3000);错误提示:error C2065: 'delay' : undeclared identifier解决办法:将 delay 修改为 Sleep 即可。
错误提示:error C2065: 'EGA' : undeclared identifier或:error C2065: 'EGAHI' : undeclared identifier解决办法:通常在含有该错误的代码行会有类似定义:int gdriver = EGA, gmode = EGAHI;将这行代码删掉即可。
这两个变量在之后会这样使用:initgraph(&gdriver, &gmode, "");将这行代码修改为initgraph(640, 480);问题即可解决。
错误提示:error C2065: 'getmaxx' : undeclared identifier解决办法:将 getmaxx() 修改为 getwidth();错误提示:error C2065: 'getmaxy' : undeclared identifier解决办法:将 getmaxy() 修改为 getheight();错误提示:error C2065: 'graphresult' : undeclared identifier解决办法:将 graphresult(); 用数字 0 替换。
错误提示:error C2065: 'grOk' : undeclared identifier解决办法:将 grOk 用数字 0 替换。
错误提示:error C2065: 'grapherrormsg' : undeclared identifier解决办法:将 grapherrormsg(xxx) 用一对半角空双引号 "" 替换。
错误提示:error C2065: '_AX' : undeclared identifier (可能是 _AH、_AL、_BX、_CX 等寄存器)错误提示:error C2065: 'geninterrupt' : undeclared identifier解决办法:前面两个错误提示通常会一起发生,这些代码是调用中断时使用的,比如在 TC 里面调用鼠标的代码。
所以,具体解决办法要根据调用什么中断来解决,需要查中断手册。
例如以下的 TC 代码:void GetMousePos(){_AX=0x33;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;}查询中断手册后可以得知,该功能是用来获取鼠标的当前坐标。
所以,这个 GetMousePos() 函数就要相应的修改成 VC 版本,例如:void GetMousePos(){HWND hwnd = GetHWnd();POINT point;GetCursorPos(&point);ScreenToClient(hwnd, &point);MouseX = point.x;MouseY = point.y;}错误提示:error C2065: 'settextstyle' : undeclared identifier解决办法:settextstyle 是 tc 下设置字体的函数,功能很简单,第一个参数设置字形(0-4 共 5 种),第二个参数设置文字输出方向(0、1 分别表示横、竖),第三个参数设置文字大小(设置为 n 表示高度为 8 * n)。
在 easyx 下可以通过 setfont 实现更丰富的字体设置,详见帮助中 setfont 函数的说明。
错误提示:error C2660: 'ellipse' : function does not take 6 parameters解决办法:tc 里面的 ellipse() 函数用来画椭圆弧,在 EasyX 里面改用 arc() 函数来完成。
除了需要将函数名由 ellipse 修改为 arc 外,还需要调整对应的参数。
请参考 EasyX 帮助文档获取函数原型并作适当调整。
例如,tc 中代码:ellipse(x, y, sa, ea, xr, yr);在vc 中修改为:arc(x - xr, y - yr, x + xr, y + yr, sa * PI / 180, ea * PI / 180);错误提示:error C2660: 'arc' : function does not take 5 parameters修改方法:tc 里面的 arc() 函数用来画圆弧,和 EasyX 里面 arc() 函数的参数略有不同,需要调整对应的参数。
请参考 EasyX 帮助文档获取函数原型并作适当调整。
例如,tc 中代码:arc(x, y, r, sa, ea);在vc 中修改为:arc(x - r, y - r, x + r, y + r, sa * PI / 180, ea * PI / 180);错误提示:error C2065: 'settextjustify' : undeclared identifier解决办法:删除 settextjustify(xxx) 语句。
该函数目前在 vc 下没有特别理想的替换方案。
该函数目的是调整 outtextxy 输出字符串的位置,删除后,后面的文字输出位置会有偏移(不会影响程序执行流程),因此还需要根据情况调整后面的文字输出语句的坐标,或者替换为 drawtext 函数等。
如果编译没有错误了,但是程序还是不能运行,就需要修改一些运行时导致问题的地方:1. setcolor 等颜色相关。
例如,setcolor(4);,在 TC 下设置为 4 号调色板颜色,默认是红色,但在 EasyX 下,可以使用 24 位真彩色,每个颜色分量都是 0~255,那么 4 号颜色只表示很暗的红色,肉眼几乎看不到。
因此,setcolor(4) 可以修改为 setcolor(RED),等等。
其他涉及到颜色的语句也要这么修改。
2. setfillstyleEasyX 的 setfillstyle 和 tc 下的格式不同,需要做相应调整。
tc 下的 setfillstyle 语句格式为:void setfillstyle(int pattern, int color);常见的 pattern 为 1 或 SOLID_FILL,表示固实填充。
而 EasyX 的 setfillstyle 语句格式为:void setfillstyle(COLORREF color, int pattern = SOLID_FILL, const char *pupattern = NULL);如果固实填充,可以省略后面两个参数不写。
例如,tc 中的:setfillstyle(1, 4); // 设置为红色固实填充在 EasyX 中可以修改为setfillstyle(RED);。