VC课程问题解答
发布时间: 2005-4-5 10:11:55 被阅览数: 2864 次 |
Q:我刚开始学VC++,请问学VC++需要记忆哪些方面的内容?MFC的内容很多,这些都必须要记下来吗?
A:学VC++首先要记忆的是C的基本语法,这之后要熟练了解和掌握C++的语法,关键是类。这是很关键的,而且很枯燥。掌握以上内容之后,就可以按照VC++课本来写一些例子了。时间一长,一些MFC类库就会记住了。我个人认为不必死记MFC的类库,要是那样,很难掌握VC++。 学习VC++首先得搞清楚VC++向导生成的标准EXE文件中用到的CmainFrame,CwinApp,Cdocument,CView类的基本内容及它们的关系,其次就是搞清CDC,Cview,Cobject,,CWnd这几类,建议你多看一下VC++的课本。 Q:请问现在编程功能最强大的语言是什么语言?,听说“C语言”无所不能!是这样的吗? A:说它无所不能,可能有些夸张,因为许多语言和开发工具都有其擅长的领域。例如做个网站,C就不如ASP简单。但是C语言的适用性比较广,特别是像驱动程序这样的系统领域,C语言也可以应用。 Q:C语言与C++是什么关系,它们有什么特点,两者哪一个更好? A:C语言可以被看作C++的一个子集,也就是说可以使用C++编译器来编译C语言程序。 Q: C语言编辑系统必须运行在DOS平台上吗,有没有运行在Windows平台上的,如果有,功能相同吗? A:DOS下经常使用Turbo C,而Windows下通常使用Visual C++和Borland C++ Builder,这些系统的价格从千元到万元,这要看你购买的版本。在网上也可以找到许多免费的C/C++编译器,只是不如商业的好用。 Q:如何看VC源程序,VC的源程序打开后往往有好几个文件,如何进行观看? A:VC++的程序打开后,一般先看最左边的Class列表,看看其中哪个类是从CWinApp继承来的,哪个类就是启动的类,可以看看InitInstance是如何建立主窗体的,再顺着主窗体类一层层看下去。 有时也可以运行一下程序,看看对哪个窗体感兴趣,然后在资源列表中找到该窗体,点击ClassWizard,看它对应的类是哪个,然后再看那个类的有关成员。 MFC的基类就那么几个,看的程序多了,你就会发现很容易找到头绪。 Q: 请问VC中的Debug版和Release版本的程序有什么区别?用一个Debug版的OCX控件注册时,是不是还需要VC中的某些文件?如果是,这些文件包括些什么? A:Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而Release版本需要MFC42.DLL支持。 Q:使用MFC"WinMain()"的主函数是否可以修改,因为我要创建一个图片界面。VC++6.0是否可以把“H文件”中的代码加入“CPP文件”中,从而可以删除“H文件”。 A:一般不修改WinMain函数,而修改CWinApp的InitInstance函数,这个函数负责建立窗口和初始化,作用和WinMain类似。理论上可以删除.h,而把所有定义写如.cpp文件,不过通常这样做没有任何好处,反有好多麻烦。MFC程序不能把AppWizard建立的.h的内容写入.cpp,因为这样可能会导致ClassWizard出错。 Q:请问在SQL Server中是否可以通过存储过程操作Oracle数据库? A:在SQL里操作Oracle: a建一个ODBC指向Oracle; b在SQL Server里建一个链接服务器指定上面的ODBC,填上[安全性]里的远程帐号;打开[表]看是否正确; c在SQL语句里的用法,例:select * from 链接服务器名.Oracle用户名.表名,就可以访问和操作了。 Q:在ASP中,使用DBF库在更新时,程序出错说无法更新库,库为只读,不知道是什么原因,可是我的库文件不是只读啊。请指教。 A:如果用的是数据环境,你有可能将Connection 的 Access项设成了Read-only。 如果是通过Recordset来更改数据的,则问题可能是出在 Recordset 的打开方式上。因为默认的打开方式为 Forward-only, 需将打开方式设为 Keyset 或 Dynamic。 Q:我在Windows 2000 Server系统下安装了SQL Server 7,装完后与书上的界面有些不同,所以我想删除后重新安装,可卸载程序时显示:/C:Program file/common file/system/mssearch/bin/mssearch.exe'is in use 可是我没有运行任何程序。请问是什么原因。 A:SQL Server可能已经开始运行了,因此你不能正确卸载,你需要: 1、在SQL Server的服务管理器中停掉SQL Server的所有服务。 2、在Windows 2000的任务管理器中停掉sqlmangr.exe进程。 这样你就可以卸载了! Q:在VB中如何实现把当前库或表转换为另外一种数据库文件。例如把MY.MDB中的表MYTABLE1转换为EXCEL中的表或DBF文件。 A:VB支持SQL语言的SELECT ... INTO语句,这使得你可以将一种数据库轻松地转换为另一种格式,也可以在同一种格式的数据库中进行转换。下面我们以将.MDB格式转换为Excel形式为例来说明一下。 首先,打开.MDB文件。如 Dim dbSource As Database Set dbSource = OpenDatabase("MY.MDB") 然后使用SELECT ... INTO语句转换文件。 dbSource.Execute("SELECT * INTO my IN 'c:/documents/xldata.xls' 'EXCEL 5.0;' FROM table1") 这里,IN子句后面是转换后的数据库文件名,EXCEL 5.0;'表示Excel 5.0/95格式,也可以是其他VB支持的格式 SELECT ... INTO建立新的表或数据库,而如果要将数据追加到已经存在的数据库中,可以使用INSERT ... INTO语句。 Q:我是一个VB初级学员,我正在编一个简单的学生信息管理程序,我现在只会用以*.mdb结尾的数据库软件。所有的数据我都放在*.mdb数据库里面,我现在想在软件上添加一个数据备份和一个数据恢复功能,但我不知怎么去做,也不知道用什么命令来实现,请简单讲一下吗? A:一个简单的方法: 数据备份就是把当前mdb文件复制到另一个目录; 数据恢复就是把备份的mdb文件覆盖到当前目录。 VB指令:FileCopy 源文件路径, 目的文件路径 Q: 在SQL Server数据库中, 如何修改表的结构(SQL Server好像禁止修改 )? A:在SQL Server数据库中, 不能通过VB程序函数调用修改表的结构,你只能在SQL Server的工具中进行修改。 Q:如果一个桌面数据库文件(如FoxPro、Access等文件)没有后缀名,怎样通过编程方式判别这个数据库文件的数据库类型? A:你可以试着按普通二进制文件的方式打开文件,看看有没有可以供识别的字符。如Access数据库从第5个字节开始为“Standard Jet DB”。而DBF文件就比较麻烦了,因为只有第一个字节可以用来识别,不太可靠。 Q:我在VC中利用ADO控件访问多台远程服务器SQL Server数据库,发现从其中个别服务器取来的数据中汉字信息全部是乱码,不知原因何在?是VB的问题还是SQL Server的问题? A:应该是SQL Server的版本不兼容引起的,我曾经试过,服务器用6.5,后来装了Office 2000后,读出数据全乱了,我的解决方法是将SQL Server 6.5的客户端在客户机上Setup一下或将6.5版本的sqlsvr32.dll 拷到客户机的windos/system目录下覆盖原有的文件即可。 Q:在VB中是否有 RegExp 这个函数或命令,若有怎么用? A:VB中没有RegExp函数。RegExp实际上是VB 6/VB Scipt提供的一个对象,它可以帮助进行通配符操作。 Q:怎样用VB编写一个倒计时程序? A:设定一个长型变量,在窗体的载入事件中为它赋初值。创建一个timer控件,设定Interval属性为响应周期,在timer1_timer中让该变量自减。然后用一个分支,若等于0则作出某种动作。例子: Dim lTime As Long Sub Form_ Load() lTime = 100 ’ 100秒倒计时 Timer1.Interval=1000 ' 每秒发生一次Timer事件 End Sub Sub Timer1_Timer() lTime = lTime - 1 Me.Caption = "还有" + Str(lTime) + "秒"! If lTime = 0 Then MsgBox "时间已到!" End If End Sub Q:请问在VB中如何写命令行程序,就是能在DOS窗口下显示文本的,就像QBasic写的Print语句,VB好像只能在Windows的窗口下写文本。 A:VB本身不支持控制台程序(Console application),一个简单的方法使用API函数AllocConsole。 Q:我在用VB编程时,用到符号“&",编译无法通过,提示句子没有结束。请问是什么原因,并请解释一下符号“&”的意思。 A:符号“&”在VB中是一种特殊的字符串连接操作符,同“+”类似。不同的是“+”前后的变量必须类型相同,而“&”前后的类型可以不同。我想你的情况可能是这样的: s = "Result = " & _ nResult 不要忘了续行符“_”。 Q: VB是不是面向对象的?如果是,如何继承一个类? A:许多人认为VB是面向对象的,因为它支持类、对象、属性、方法这些基本概念。但同C++相比,VB不支持操作符重载、友元等。 VB 5.0以后提供了一个Implements语句,它使一个类能够使用其它类的定义的过程和数据,这有些接近C++中的继承。 不过,如果你只是想在标准控件基础上加一些事件,可以使用WithEvent、Event等语句,虽然这同继承有很大不同,但已经可以实现个别在C++中通常使用类继承来完成的工作。 Q:在VB中如何对BMP文件按一定比例进行缩小与放大显示与输出? A: 在VB中Form、PictureBox和Printer都有PaintPicture方法,它就可以满足你的要求。这个方法功能是复制图像,其基本语法如下: object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode 这里的Picture来自Form等的Picture属性,而x1、y1是目标区域的左上角坐标,而x2、y2是源区域的左上角坐标,width1和height1是目标区域的宽度和高度,而width2和height2是源区域的宽度和高度,如果width1=width2且height1=height2,那么就是等比例复制,你只需要选择适当的参数就可以实现缩小与放大。参数opcode是操作码,其含义可以参考Windows API中关于BitBlt和StretchBlt函数的介绍。下面是一个简单的例子: Private Sub Form_Click() Me.PaintPicture Picture1.Picture, 0, 0, 3500, 2000 End Sub 这个方法有一个非常好的特性:作为源对象的PictureBox可以是不可见的(Visible属性为False),这在实际中非常方便。 Q: 我在VB的主窗体要装入一幅事先选好的图片,程序运行后我可以在图片上进行修改并可以保存它,以备以后调用。请问我怎样办? A: 你可以把Form或PictureBox的AutoDraw设为True,修改后使用VB的SavePicture语句进行存盘。这种存盘的文件为.bmp文件,颜色数与当前屏幕的色彩数相同。如果想转换为其他格式,可以参考下面的意见。 如果你的存盘要求很高,例如希望控制存盘文件的色彩、格式,只能借助于其他控件,比如ImageMan、ImagN、Lead Tools等等。 Q:在JAVA 程序里,==运算符和equals()方法有什么不同。 A:下面这道题就是对这个知识点最好的考查: String s1=”abc”; String s2=”abc”; If (s1==s2) System.out.println(“双等”); If (s1.equals(s2)) System.out.println(“ equals”); System.out.println(“--------------------------------------------------”); String s1=new String(“abc”); String s2=new String(“abc”); If (s1==s2) System.out.println(“双等”); If (s1.equals(s2)) System.out.println(“equals”); 要求写出该程序段的输出结果。 这道题的前半段,s1和s2引用的是同一个对象,后半段s1和s2引用的是不同的对象。 记住:new 关键字是分配新的内存空间给对象。 此题中 ==判断的是前后两个字符串对象的内存地址是否相同,equals()方法判断的是两个字符串对象的内容是否相同。所以程序的输出是双等 equals ----------------- equals Q:Java中如何调用C++的类?在JDK,标准C++,Windows 2000环境下。 A:关于使用,你自己可以看看JNI的文档。 Q:构造函数是怎么回事啊? A:函数是对象创建和初始化的一个函数,这个函数没有返回类型,但是可以有修饰符,例如String对象的构造函数public String()。 Q:JAVA现在支持哪些图象格式、媒体格式? A:支持GIF、JPG 和PNG。 |
VC课程问题解答
最新推荐文章于 2025-08-09 18:20:04 发布