⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9924.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:

Declare Function BitBlt% Lib "GDI" (ByVal hDestDC%, ByVal x%, ByVal y%, 
ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%,
ByVal dwRop&)

Declare Function DeleteDC% Lib "GDI" (ByVal hDC%)

Declare Function DeleteObject% Lib "GDI" (ByVal hObject%)

Declare Function FindResource% Lib "Kernel" (ByVal hInstance%, ByVal lpName$,
ByVal lpType As Any)

Declare Function LockResource& Lib "Kernel" (ByVal hResData%)

Declare Function LoadResource% Lib "Kernel" (ByVal hInstance%, ByVal hResInfo%)

Declare Function GlobalUnlock% Lib "Kernel" (ByVal hMem%)

Declare Function sndPlaySound% Lib "MMSYSTEM" (ByVal lpszSoundName As Any, 
ByVal uFlags%)

'位图数据结构类型

Type BITMAP

bmType As Integer

bmWidth As Integer

bmHeight As Integer

bmWidthBytes As Integer

bmPlanes As String * 1

bmBitsPixel As String * 1

bmBits As Long

End Type

'光栅操作代码常量

Public Const SRCCOPY = &HCC0020

'声音播放状态常量

Public Const SND_SYNC = &H0

Public Const SND_MEMORY = &H4

'调用位图资源子例程

Sub load_pic(picName As String)

Dim hDLL As Integer

Dim hdcMemory, hLoadedbitmap, hOldBitmap As Integer

Dim retVal As Integer

Dim bmpInfo As BITMAP

'安装动态链接库DEMO.DLL

hDLL = LoadLibrary(App.Path & "\DEMO.DLL")

'根据资源名从动态链接库中加载相应的位图资源

hLoadedbitmap = LoadBitmap(hDLL, picName)

'获取位图信息

retVal = GetObj(hLoadedbitmap, Len(bmpInfo), bmpInfo)

'创建一个与图片框控件的设备描述表兼容的内存设备描述表

hdcMemory = CreateCompatibleDC(Form1.Picture1.hDC)

'将位图选入内存设备描述表

hOldBitmap = SelectObject(hdcMemory, hLoadedbitmap)

'将位图从内存设备描述表中拷入图片框控件的设备描述表中

retVal = BitBlt(Form1.Picture1.hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, 
hdcMemory, 0, 0, SRCCOPY)

'将原始位图选入内存设备描述表

retVal = SelectObject(hdcMemory, hOldBitmap)

'删除加载的位图,释放其占用的所有系统资源

retVal = DeleteObject(hLoadedbitmap)

'删除内存设备描述表

retVal = DeleteDC(hdcMemory)

'释放动态链接库

FreeLibrary (hDLL)

End Sub

'调用声音资源子例程

Sub load_sound(wavName As String)

Dim hDLL As Integer

Dim hloadwave As Integer

Dim hwaveres As Integer

Dim hsound As Long

Dim hrelease As Integer

Dim resVal As Integer

hDLL = LoadLibrary(App.Path & "\DEMO.DLL")

'在动态链接库中查找资源类型为WAVE,资源名为wavName的资源

hwaveres = FindResource(hDLL, wavName, "WAVE")

'将该资源装入内存

hloadwave = LoadResource(hDLL, hwaveres)

'锁定该资源

hsound = LockResource(hloadwave)

'以同步方式播放内存中的声音资源

resVal = sndPlaySound(hsound, SND_SYNC + SND_MEMORY)

'释放该资源占用的内存

hrelease = GlobalUnlock(hloadwave)

FreeLibrary (hDLL)

End Sub

※FORM1.FRM代码清单

Private Sub cmdBitmap_Click(Index As Integer)

Picture1.Picture = LoadPicture("") '清空图片框控件

Select Case Index

Case 0

load_pic ("B1")

Case 1

load_pic ("B2")

End Select

End Sub

Private Sub cmdSound_Click(Index As Integer)

Select Case Index

Case 0

load_sound ("S1")

Case 1

load_sound ("S2")

End Select

End Sub

    本实例程序已在Windows 3.X环境下通过测试。程序中的某些参数设置与特定需求
(如资源动态库的内容等)有关,读者在开发实际应用时应做相应的改动。
 
****************************************************************
****************************************************************

◆有问必答◆

★本期回答★

●067. 回答请mailto: yaozheng@kali.com.cn?subject=067
各位好!我是一名VC初学者,在数据库方面有几个问题想向大家请教:
1).如何遍历一个打开于使一个CDaoRecordset记录数据库?
2).如何实现类似Access中的自动填充字段的功能(即一个能自动按某种
规则自动产生并填充的字段)?用COleVariant类么?
请各位不吝赐教,谢谢!!
cbl@trigold.cngb.com
答:
想不到还有这么多人在用VC6写数据库的程序。
我用VC6写过两个数据库的程序,全部是用MFC的ODBC类(CRecordSet和CDataBase),
感觉很不好。理由如下:
用VC写数据库的程序有以下一些方法:
ODBC MFC,DAO,ADO,ODBC API,OLE DB,也可以写SQL,
分析与比较:
ODBC MFC:属高层应用,主要是用MFC中的CRecordSet类和CDataBase类,
          使用非常方便,但功能不强,只适合写很简单的程序,如用
          ACCESS97的库,且一般只能操作单表(是不是很臭啊)ODBC
          的最大的卖点在于只要有相应的数据源的ODBC driver,就可
          以操作这个数据源。如.DBF, .MDB等等。但同时也出现了它
          的弱点,一旦机器上没有该driver,就无法操作,这一点DAO
          就比ODBC好。但这还不是最大的弱点,它的最大的弱点是速
          度慢,可能在这些介绍的方法中,ODBC MFC是最慢的。
DAO     :属高层应用,与ODBC MFC差不多,只要把CRecordSet改成
          CDaoRecordSet,CDataBase改成CDaoDataBase就行了。功能跟
          ODBC MFC完全一样,连成员函数名都是一样的。速度比ODBC 
          MFC要略快。
ADO     :属低层应用,不方便。用这个技术写数据库的程序,要一定的
          水平。
ODBC API:属低层应用,很不方便,MS出版了一套(两本)《ODBC 程序
          员参考手册...》,专门讲的ODBC API。如果是VC高手,且有
          耐性的话,可以用它写出任意的数据库程序,但工作量极大。
OLE DB  :其实叫它COM DB更合适,这才是MS主推的大方向。如果要用
          OLE DB,首先要学会COM :(
          它比较适合写数据库接口,功能强大,有COM的优点,但难度
          也最大。
  
忠告:
用以上所有的方法,都不太可能写出功能强大,且界面华丽的应用程序。
除非写很简单的程序或数据库接口。如果想用很快的时间写出过得去的数
据库应用程序,恐怕还得用PB或Delphi。

推荐一本书:
《轻轻松松掌握用VC6写数据库程序》,美,Lyn Robison,电子工业出版社出版。

以上是我用了半年的时间摸索的一些经验和感想。可能有不对的地方,请
您提出保贵的意见和我一起讨论。

_____________________________________________________________

★本期提问★

072. 回答请mailto: yaozheng@kali.com.cn?subject=072
我用c++ build 编写一个小型的CAD,有几个问题百思不得其解
1、怎样用c++ build 读AUTOCAD 的文件 *。dwg?
2、我在Image上画线,当鼠标画线超过屏幕时,如何让Image自动翻屏?
孙建民 sunjm@trigold.cngb.com

073. 回答请mailto: yaozheng@kali.com.cn?subject=073
在DELPHI中使用数据库,由于DELPHI支持多种数据库,
请问我该选哪种数据库较好。
我是开发单机版的程序。ACCESS的MDB好吗?
若需要在数据库中存图像、声音,又该选哪种较好呢?
恳请帮助。 bingji@sonic.net.cn

074. 回答请mailto: yaozheng@kali.com.cn?subject=074
我用VB6编了一个MDI程序, 在MDI父窗体上有一个工具条。我希望在显示
其它子窗体时, 该工具条能被相应的子窗体的工具条所替换。(就像MDI
子窗体显示时, 子窗体的菜单替换MDI父窗体的菜单一样)。不知如何才
能实现。 chcw@263.net
                       
提问信箱: yaozheng@kali.com.cn?subject=question
如果您有什么疑难问题,请发到上面的信箱里,我会及时把您的问题放在
杂志上的,希望编程高手们能不吝赐教,也希望这个栏目能成为大家交流
的场所。

****************************************************************
****************************************************************

◆编者的话◆


本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net

◆欢迎光临我的个人主页

●《编程技术》 http://person.zj.cninfo.net/~yao
本刊的同名主页,主要以收集各类编程工具和程序源代码为主。

●《C++ Builder世界》 http://cppbuilder.soim.net
本人最新制作的个人主页,是一个探讨C++ Builder编程的专题
网站,为广大的C++ Builder爱好者搜集关于C++ Builder的一切。
                                                

◆《编程技术》订、退方法:

请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao

如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:
E-mail:yaozheng@kali.com.cn
ICQ#:  43260473

**************************THE END**************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -