Visual C++ 6
文章平均质量分 83
zhandoushi1982
这个作者很懒,什么都没留下…
展开
-
控制PC喇叭发声
PC喇叭发声就是需要控制硬件的声调和延时,让其发出对应的声音,可用来对外界产生测试声音源。注意:使PC喇叭发声是绕过声卡的,也就是说就算计算机上没有声卡,该操作也可完成。(1)新建一个MFC对话框,并且安置七个按钮,分别表示声调的7个阶,每个按钮的操作函数如下:void CSpeakerbeepDlg::OnOne() { Beep(264,500); //原创 2010-04-18 09:38:00 · 4593 阅读 · 0 评论 -
VC中编辑框与UpdateData()函数的使用
(1) UpdateData函数 UpdateData(FALSE)与UpdateData(TRUE)是相反的过程。UpdateData(FALSE)是把程序中改变的值更新到控件中去,UpdateData(TRUE)是把在控件中输入的值更新到你的变量中去。也就是说:当你使用了ClassWizard建立了控件和变量之间的联系后,当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用Upda转载 2010-11-13 20:57:00 · 4705 阅读 · 0 评论 -
资源DLL
<br /> 在很多实际场合我们要用到一些图片和图标的资源,我们可以将这些资源以DLL的形式加载运用,不用的时候再释放掉。举个实例:创建一个带BMP位图资源和一个图标资源的资源DLL,然后在一个测试对话框中调用它。<br />(1)创建DLL<br /> 在VS中新建一个WIN32 Project,名为ResDll,类型为DLL。创建完毕后,在Resources files点击右键添加Resource,点击新建,类型为BMP,即可新建一个有内容的位图资源文件,名为IDB_RESBMP;同原创 2010-11-18 21:57:00 · 1383 阅读 · 0 评论 -
overlapped I/O的学习,及自定义消息的处理
(1)使用原因 通常的简单系统中,I/O设备处理必然会让主程序停下来干等I/O的完成,对这个问题有两种改进方法:方法一,使用另一个线程进行I/O,这个方案可行,但是麻烦。方法二:使用overlapped I/O。正如书上所说:“overlapped I/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成overlapped I/O。”。(2)怎么样使用overlapp转载 2011-03-09 17:00:00 · 1894 阅读 · 0 评论 -
VC的文件操作和文件对话框使用
各种关于文件的操作在程序设计中是十分常见,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。(1)文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 CString strFileTitle; CFileFind finder; BOO转载 2011-03-18 22:58:00 · 1539 阅读 · 0 评论 -
WINDDK安装出现dsfksvcs.sys错误
<br /> 问题汇总:安装WDK时要小心,千万不可安装那个Device Simulation Framework 又称DSF,当你选上它时,安装过程中系统会提示是否要确认安装DSF,并给出MS不建议安装它,若你继续安装,安装结束后重启系统,将会出现下面错误:<br />"下面文件丢失或损坏 systerm32/drivers/dsfksvcs.sys"<br /> 此时的解决方法有两种:<br />(1)一是只有用GHOST恢复操作系统,因为出现上述错误后原有的系统已经出现错误。<br转载 2011-04-17 23:25:00 · 2753 阅读 · 3 评论 -
SDK消息机制和MFC消息机制
(1)SDK下的消息机制实现:Windows程序的运行是依靠外部发生的事件来驱动的,事件由操作系统捕捉,以消息的形式进入消息队列,然后通过消息循环从队列中不断取出消息,送到对应的窗口过程里处理。相对于DOS程序,Windows是以WinMain作为程序的入口点,以下就是一个简化的Win32程序的主体,通过while语句实现消息循环: 其原创 2011-06-08 22:44:00 · 2025 阅读 · 0 评论 -
目录浏览及大文件在内存中的读写
通过一个MFC实例,将硬盘中的某个文件拷贝到另一个目标目录中,并用进度条显示拷贝进度。通过该实例熟悉以下3个应用:一是目录浏览窗口的使用;二是大型文件(占上百兆)的读写及传输;三是精确显示操作进度百分比。(1)创建一个对话框类CFileCopyDlg及对话框,在上面显示三个按钮,原创 2011-07-12 16:30:36 · 1385 阅读 · 0 评论 -
windows驱动在vs6.0中的编译错误:Compiler version not supported by Windows DDK!
在VC中编译DDK驱动时出现上述的一个错误:Compiler version not supported by Windows DDK。这个也是困惑我良久的,当一切的N多设置完成后,在VC++6.0中按下F7鍵,满以为会像在DDK的命令行中输入Build命令后按下Enter出现一样的结果的时候,收到的却是这样一个无情的Fetal Error! 在网上搜了一下,原来是这样一回事:用转载 2011-10-23 23:12:30 · 5383 阅读 · 0 评论 -
VC为什么会输出烫
VC经常输出烫的原因是,在vc的debug编译选项下,栈区的未初始化数据,每一个byte都被设置为0xCC,cccc的汉字编码就是烫。比如:(1)#include #include int main(int argc, char* argv[]){ char c[12]; printf("%s",c); return 0;}转载 2011-03-24 21:46:00 · 4179 阅读 · 0 评论 -
用VC实现简单的录音和播音 && VC的管道操作
用VC可以进行简单的录音和播音操作,这里调用的是微软的音频开发包,通过MCI函数(Media Control Interface,媒体控制接口)即可实现。只需要新建一个对话框,上面列四个按钮,分别是录音、停止、播放、保存即可。 (1)在StdAfx.h中加入下面的语句:#include原创 2010-04-17 23:08:00 · 6070 阅读 · 4 评论 -
多线程之二:几个实例
(1)建立一个基于对话框的MFC工程MultiThread1,在对话框IDD_MULTITHREAD1_DIALOG中加入两个按钮和一个编辑框,两个按钮的ID分别是IDC_START,IDC_STOP ,标题分别为“启动”,“停止”,IDC_STOP的属性选中Disabled;编辑框的ID为IDC_TIME ,属性选中Read-only; 在MultiThread1Dlg.h文件中添加线程函数声明:void ThreadFunc();注意,线程函数的声明应在类CMultiThread1Dlg的外部转载 2010-11-11 22:42:00 · 1966 阅读 · 0 评论 -
SetTimer函数和GetTickCount()函数的用法
什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。 (1)用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_P转载 2010-11-04 22:02:00 · 2169 阅读 · 0 评论 -
多线程之四:MFC多线程通讯
一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。下面将进行说明。(1)使用全局变量进行通信 由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义转载 2010-12-13 23:21:00 · 7931 阅读 · 0 评论 -
控制电脑的左右声道
本实例通过两个滑动条来分别控制电脑PC的左右声道。主要通过waveOutGetVolume函数来获得系统的音量,通过waveOutSetVolume来设置音量。系统音量是个DWORD值,它的低两个字节表示左声道音量,高两个字节表示右声道音量;音量范围都是从0X0000到0XFFFF。(1)新建一个MFC对话框,在对话框上添加两个slider控件,ID分别是IDC_LEFT和IDC_原创 2010-04-21 22:45:00 · 8032 阅读 · 8 评论 -
制作RealOne播放器
制作一个RealOne播放器,来播放RM视频格式的文件,以及流媒体文件。本实例需要添加RealOne组件,只要在系统中安装RealPlayer播放器后,就可以将RealOne组件添加到VC工程中。(1)新建一个MFC工程对话框,并添加RealOne组件到该工程中。方法是Project->Add to Project->Components and Controls->Regist原创 2010-04-23 23:09:00 · 1645 阅读 · 0 评论 -
定时播放音乐程序之三:MCI设备的播放和控制
(1) 写注册表,设置开机自动运行 HKEY sub; char bufname[200]; ::GetModuleFileName(NULL,bufname,200); CString str; str.Format("%s",bufname); CString skey = "Software//Microsoft//Windows//CurrentVersion//Run"; ::R原创 2010-05-20 23:46:00 · 1393 阅读 · 4 评论 -
实战DeviceIoControl,以及与KernelIoControl的区别
在NT/2000/XP中,从安全性、可靠性、稳定性上考虑,应用程序和操作系统是分开的,操作系统代码运行在核心态,有权访问系统数据和硬件,能执行特权指令;应用程序运行在用户态,能够使用的接口和访问系统数据的权限都受到严格限制。当用户程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核心态。当系统服务完成后,操作系统将线程描述表切换回用户态,调用者继续运行(基本上是个切入系统再从系统返回的概念)。应用程序可以通过API函数DeviceIoControl来实现对设备的访问—获取信息,发送命令转载 2010-09-18 14:34:00 · 2533 阅读 · 0 评论 -
LIB文件与DLL文件
Lib是编译时静态链接库,dll是运行时动态链接库。可通过不同的角度来看待这个问题:(1)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版原创 2010-09-19 23:56:00 · 1701 阅读 · 0 评论 -
MFC动态链接库和WIN32动态链接库
(1)DLL的构成 每个应用程序都有一个入口函数WinMain,而每个DLL也有一个入口函数DllMain。DLL跟应用程序一样都含有资源、数据段和代码段。DLL跟应用程序的差别主要是DLL有符号输入表和符号输出表,以方便应用程序调用DLL中的函数。 因为DLL是由应用程序加载的,所以它本身没有虚拟的内存地址空间,它使用的是加载它的应用程序的地址空间。这种加载分为隐式和显式两种方式。将在后面叙述。(2)创建MFC DLL A,VC6新建一个工程MFCDLL,类型为MFC Ap原创 2010-09-22 23:12:00 · 4478 阅读 · 0 评论 -
LoadLibrary函数和FreeLibrary函数
<br /> 随着软件规模的扩大,要求的功能也是越来越多,开发人员的参与也是越来越多。因此软件的功能划分,就成为了现代软件工程的重大任务,还有软件开发的并行性也越来越重要。为了解决这些问题,大家都会看到IT硬件发展非常迅速,功能也越来越复杂,但硬件中发展明显提高在于采用IC的方式来实现复杂的功能,也就是把大部份功能集成到一起,只要给出一些引脚就可以实现产品了。而软件中有没有相同于硬件中的IC呢?我想是应有的,就是动态连接库了。在Windows这座大厦里,很多基石就是动态连接库构成的。一个动态连接库转载 2010-09-24 00:33:00 · 20379 阅读 · 2 评论 -
多线程之三:MFC多线程及实例
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThre转载 2010-11-28 20:58:00 · 48809 阅读 · 6 评论 -
文件内存映射CreateFileMapping和GlobalAlloc内存分配
内存映射主要有两方面的作用,其一是对大文件的内存映射处理,其二是用于进程间共享。(1)内存映射文件处理过程 首先,通过 CreateFile() 函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。 其次,通过 CreateFileMapping() 函数来为刚才创建的文件内核对象创建一个文件映射内核对象并告诉系统文件的尺寸以及访问文件的方式。 再次,通过 MapViewOfFile() 函数将文件内核映射对象添加到进程中。 接着,程序就可以通过转载 2010-12-01 15:36:00 · 3955 阅读 · 0 评论 -
GetCurrentDirectory等文件夹操作函数 && MessageBox信息函数 && VC应用执行DOS命令和批处理
(1)函数说明 我们很多时候需要在一个目录下添加一个文件下或者删除一个文件夹。需要用到的API是:获取当前目录的绝对路径:DWORD GetCurrentDirectory( DWORD nBufferLength, LPSTR lpBuffer );创建特定目录下的某文件夹:BOOL CreateDirectory( LPCSTR lpPathName, LPSEC原创 2010-04-16 22:08:00 · 1982 阅读 · 0 评论