hidvb点虐 的简单介绍
C++课 没听··· 不懂··· 关于什么类啊 对象的~求详细解释
//修改后的程序如下:
站在用户的角度思考问题,与客户深入沟通,找到东乡网站设计与东乡网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、申请域名、网站空间、企业邮箱。业务覆盖东乡地区。
#include iostream
using namespace std;
class stud
{
public: //增加public 定义,VS2010在未使用此定义时默认为 private
void setscore(int sc);
void inscore();
void getscore();
int score;
};
stud s;
int main()
{
s.setscore(0); // 增加 s. , 调用 s 的成员函数 , 下同
s.inscore();
s.getscore();
}
void stud::setscore(int sc) // 修改 函数类型,与类定义一致,增加stud::, 表示是 stud的成员函数
{ score=sc; }
void stud::inscore()
{ cinscore; } // 去掉s. , 下同。
void stud::getscore()
{
coutscoreendl;
}
// 建议不在类的 成员函数中 使用 CIN,COUT等,否则失去封闭的意义了
数据库的三级菜单实现
SCRIPT LANGUAGE="JavaScript"
!--
function CreateSelect(_FormName,_SName,_SValue,_Ds,_AllOptionStr,ShowType)
{
//三级关链菜单通用版
//作者:海娃, 有问题请到留言。
if (_FormName=="")
_FormName = "all"
var _DsArr = _Ds.split("|")
var _Ds1,_Ds2,_Ds3
var _Ds1 = _DsArr[0]
var _Ds2 = (_DsArr.length1)?_DsArr[1]:_DsArr[0]
var _Ds3 = (_DsArr.length2)?_DsArr[2]:_DsArr[0]
var _SNameArr = _SName.split("|")
var _SName1,_SName2,_SName3
var _SName1 = _SNameArr[0]
var _SName2 = (_SNameArr.length1)?_SNameArr[1]:_SNameArr[0]
var _SName3 = (_SNameArr.length2)?_SNameArr[2]:_SNameArr[0]
var _SValueArr = _SValue.split("|")
var _SValue1,_SValue2,_SValue3
var _SValue1 = _SValueArr[0]
var _SValue2 = (_SValueArr.length1)?_SValueArr[1]:_SValueArr[0]
var _SValue3 = (_SValueArr.length2)?_SValueArr[2]:_SValueArr[0]
if (ShowType==3){
_AllOptionStr = _AllOptionStr.replace(/\(\(/ig,"\(\("+_Ds3+"\^")
_AllOptionStr = _AllOptionStr.replace(/\{\{/ig,"\{\{"+_Ds2+"\(\("+_Ds3+"\*\*")
}
else if(ShowType==2){
_AllOptionStr = _AllOptionStr.replace(/\{\{/ig,"\{\{"+_Ds2+"\(\("+_Ds3+"\*\*")
}
else if(ShowType==1){
_AllOptionStr = _AllOptionStr.replace(/\(\(/ig,"\(\("+_Ds3+"\^")
}
var AllStr = _Ds1 + "{{"+ _Ds2 + "(("+ _Ds3 +"||"+_AllOptionStr
//alert(AllStr)
var _AR0 = AllStr.split("||");
document.writeln("select name=\"" + _SName1 + "\" size=\"1\" onChange=\""+_SName1+"redirect(this.options.selectedIndex)\"");
for (var i1 = 0;i1 _AR0.length;i1++)
{
var Area1Str = _AR0[i1];
var _AR10 = Area1Str.split("{{");
var _AR11 = _AR10[0].split("@");
var Tstr1 = _AR11[0];
var Vstr1 = (_AR11.length==2)?_AR11[1]:_AR11[0]
document.writeln("option value=\""+Vstr1+"\""+Tstr1+"\/option");
}
document.writeln("\/select");
document.writeln("select name=\"" + _SName2 + "\" size=\"1\" onChange=\""+_SName1+"redirect1(this.options.selectedIndex)\"");
var _AR111 = _Ds2.split("@");
var Tstr11 = _AR111[0];
var Vstr11 = (_AR111.length==2)?_AR111[1]:_AR111[0];
document.writeln("option value=\""+Vstr11+"\""+Tstr11+"\/option");
document.writeln("\/select");
document.writeln("select name=\"" + _SName3 + "\" size=\"1\"");
var _AR222 = _Ds3.split("@");
var Tstr22 = _AR222[0];
var Vstr22 = (_AR222.length==2)?_AR222[1]:_AR222[0];
document.writeln("option value=\""+Vstr22+"\""+Tstr22+"\/option");
document.writeln("\/select");
document.writeln("S"+"CRIPT LANGUAGE=\"JavaScript\" defer");
document.writeln("!--");
document.writeln("var "+_SName1+"NewAllStr = \""+ AllStr +"\"");
document.writeln("var "+_SName1+"_AR0 = "+_SName1+"NewAllStr.split(\"||\");");
document.writeln("var "+_SName1+"groups=document."+ _FormName +"." + _SName1 + ".options.length;");
document.writeln("var "+_SName1+"group=new Array("+_SName1+"groups)");
document.writeln("for (i=0; i"+_SName1+"groups; i++){");
document.writeln(" "+_SName1+"group[i]=new Array();");
document.writeln("}");
document.writeln("for (var i1 = 0;i1 "+_SName1+"_AR0.length;i1++){");
document.writeln(" var Area1Str = "+_SName1+"_AR0[i1];");
document.writeln(" var _AR10 = Area1Str.split(\"{{\");");
document.writeln(" var _AR12 = _AR10[1].split(\"**\");");
document.writeln(" for (var i2 = 0;i2 _AR12.length;i2++){");
document.writeln(" var Area2Str = _AR12[i2];");
document.writeln(" var _AR20 = Area2Str.split(\"((\");");
document.writeln(" var _AR211 = _AR20[0].split(\"@\");");
document.writeln(" var Tstr2 = _AR211[0];");
document.writeln(" var Vstr2 = (_AR211.length==2)?_AR211[1]:_AR211[0];");
document.writeln(" "+_SName1+"group[i1][i2]=new Option(Tstr2,Vstr2);");
document.writeln(" }");
document.writeln("}");
document.writeln("var "+_SName1+"temp = document."+ _FormName +"." + _SName2);
document.writeln("function "+_SName1+"redirect(x){");
document.writeln(" for (m="+_SName1+"temp.options.length-1;m0;m--)");
document.writeln(" "+_SName1+"temp.options[m]=null;");
document.writeln(" for (i=0;i"+_SName1+"group[x].length;i++){");
document.writeln(" "+_SName1+"temp.options[i]=new Option("+_SName1+"group[x][i].text,"+_SName1+"group[x][i].value);");
document.writeln(" }");
document.writeln(" "+_SName1+"temp.options[0].selected=true");
document.writeln(" "+_SName1+"redirect1(0)");
document.writeln("}");
document.writeln("var "+_SName1+"Group2s=document."+ _FormName +"." + _SName2 + ".options.length;");
document.writeln("var "+_SName1+"Group2=new Array("+_SName1+"groups);");
document.writeln("for (i=0; i"+_SName1+"groups; i++){");
document.writeln(" "+_SName1+"Group2[i]=new Array("+_SName1+"group[i].length)");
document.writeln(" for (j=0; j"+_SName1+"group[i].length; j++){");
document.writeln(" "+_SName1+"Group2[i][j]=new Array()");
document.writeln(" }");
document.writeln("}");
document.writeln("for (var i1 = 0;i1 "+_SName1+"_AR0.length;i1++){");
document.writeln(" var Area1Str = "+_SName1+"_AR0[i1]");
document.writeln(" var _AR10 = Area1Str.split(\"{{\");");
document.writeln(" var _AR12 = _AR10[1].split(\"**\");");
document.writeln(" for (var i2 = 0;i2 _AR12.length;i2++){");
document.writeln(" var Area2Str = _AR12[i2]");
document.writeln(" var _AR20 = Area2Str.split(\"((\");");
document.writeln(" _AR212 = _AR20[1].split(\"^\");");
document.writeln(" for (var i3 = 0;i3 _AR212.length;i3++){");
document.writeln(" Area3Str = _AR212[i3]");
document.writeln(" _AR3 = Area3Str.split(\"@\");");
document.writeln(" Tstr3 = _AR3[0]");
document.writeln(" Vstr3 = (_AR3.length==2)?_AR3[1]:_AR3[0]");
document.writeln(" "+_SName1+"Group2[i1][i2][i3]=new Option(Tstr3,Vstr3);");
document.writeln(" }");
document.writeln(" }");
document.writeln("}");
document.writeln("var "+_SName1+"temp1=document."+ _FormName +"." + _SName3 + "");
document.writeln("function "+_SName1+"redirect1(y){");
document.writeln(" for (m="+_SName1+"temp1.options.length-1;m0;m--)");
document.writeln(" "+_SName1+"temp1.options[m]=null");
document.writeln(" for (i=0;i"+_SName1+"Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y].length;i++){");
document.writeln(" "+_SName1+"temp1.options[i]=new Option("+_SName1+"Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y][i].text," + _SName1 + "Group2[document."+ _FormName +"." + _SName1 + ".options.selectedIndex][y][i].value)");
document.writeln(" }");
document.writeln(" "+_SName1+"temp1.options[0].selected=true");
document.writeln("}");
document.writeln("\/\/--");
document.writeln("\/script");
document.writeln("s"+"cript language=\"JavaScript\"");
document.writeln("!--");
document.writeln("function "+_SName1+"SetValue(){");
document.writeln(" try{");
document.writeln(" if (\""+_SValue1+"\"!=\"\"){");
document.writeln(" document."+ _FormName +"."+_SName1+".value=\""+_SValue1+"\"");
document.writeln(" "+_SName1+"redirect(document."+ _FormName +"."+_SName1+".options.selectedIndex);");
document.writeln(" if (\""+_SValue2+"\"!=\"\"){");
document.writeln(" document."+ _FormName +"."+_SName2+".value=\""+_SValue2+"\"");
document.writeln(" "+_SName1+"redirect1(document."+ _FormName +"."+_SName2+".options.selectedIndex)");
document.writeln(" if (\""+_SValue3+"\"!=\"\")");
document.writeln(" document."+ _FormName +"."+_SName3+".value=\""+_SValue3+"\"");
document.writeln(" }");
document.writeln(" }");
document.writeln(" }");
document.writeln(" catch(e){");
document.writeln(" }");
document.writeln("}");
document.writeln("window.attachEvent(\"onload\","+_SName1+"SetValue)");
document.writeln("\/\/--");
document.writeln("\/script");
}
//--
/script
%
set conn=Server.CreateObject("ADODB.Connection")
dbpath=Server.MapPath("db1.mdb")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Data Source=" dbpath
dim SelectStr
SelectStr = ""
dim sql1,sql2,sql3
dim rs1,rs2,rs3
dim i1,i2,i3
'使用缓存,application("liststr"),将添加,编辑或删除一个数据时,用application("liststr") = empty清空缓存
application("liststr") = empty
if isempty(application("liststr")) then
'//一级分类开始
sql1 = "select c1id,c1name from class1"
set rs1 = conn.execute(sql1)
i1 = 0
while not rs1.eof
if i1 0 then
SelectStr = SelectStr "||"
end if
SelectStr = SelectStr rs1("c1name") "{{"
'显示与值不同时,用下面一行
'SelectStr = SelectStr rs1("c1name") "@" rs1("c1id") "{{"
'//二级分类开始
sql2 = "select c2id,c2name from class2 where c1name = '" replace(rs1("c1name"),"'","''") "'"
set rs2 = conn.execute(sql2)
i2 = 0
while not rs2.eof
if i2 0 then
SelectStr = SelectStr "**"
end if
SelectStr = SelectStr rs2("c2name") "(("
'显示与值不同时,用下面一行
'SelectStr = SelectStr rs2("c2name") "@" rs2("c2id") "(("
'//三级分类开始
sql3 = "select c3id,c3name from class3 where c2name = '" replace(rs2("c2name"),"'","''") "'"
set rs3 = conn.execute(sql3)
i3 = 0
while not rs3.eof
if i3 0 then
SelectStr = SelectStr "^"
end if
SelectStr = SelectStr rs3("c3name")
'显示与值不同时,用下面一行
'SelectStr = SelectStr rs3("c3name") "@" rs3("c3id")
i3 = i3 + 1
rs3.movenext
wend
rs3.close
set rs3 = nothing
'//三级分类结束
i2 = i2 + 1
rs2.movenext
wend
rs2.close
set rs2 = nothing
'//二级分类结束
i1 = i1 + 1
rs1.movenext
wend
rs1.close
set rs1 = nothing
application("liststr") = SelectStr
end if
'//一级分类结束
%
SCRIPT LANGUAGE="JavaScript"
!--
var AllStr1 = "% = application("liststr") %"
//--
/SCRIPT
FORM name="HwForm"
HR选择一次br
SCRIPT LANGUAGE="JavaScript"
CreateSelect("","S_13|S_23|S_33","","请选择地区@|请选择省份@|请选择城市@",AllStr1,0);
/SCRIPT
HR选择三次br
SCRIPT LANGUAGE="JavaScript"
CreateSelect("HwForm","S_1|S_2|S_3","华北地区|山东|济宁","请选择地区@|请选择省份@|请选择城市@",AllStr1,3);
/SCRIPT
/FORM
C++中,创建对象后用该对象调用了两次同一个成员函数,最终结果显示的是“12“,请问该成员函数该怎么写?
Visual C++简介??
虽然微软公司推出了VisualC++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。 Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。 ?
VISUAL C++的安装?
作为visual studio的一个组件,可以通过安装visual studio来获得 VISUAL C++作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VISUAL C++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以把C++看作为一种“工业标准”,而VISUAL C++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。 VISUAL C++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,但为了对WINDOWS开发有一个较为全面细致的认识,笔者在这里还是以讲解WIN API的相关内容为主线。 话说到这里可能更多人关心的是学习VISUAL C++需要具备什么条件,为什么对于这扇门屡攻不破呢? 要想学习好VISUAL C++必须具备良好的C/C++的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。 VISUAL C++基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VISUAL C++在 Windows平台无所不能。最大缺点是开发效率不高。
VISUAL C++适用范围?
1、VISUAL C++主要是针对Windows系统,适合一些系统级的开发,可以方便实现一些底层的调用。在VISUAL C++里边嵌入汇编语言很简单。 2、VISUAL C++主要用在驱动程序开发 3、VISUAL C++执行效率高,当对系统性能要求很高的时候,可用VISUAL C++开发。 4、VISUAL C++主要适用于游戏开发 5、VISUAL C++多用于单片机,工业控制等软件开发,如直接对I/O地址操作,就要用C++。 6、VISUAL C++适用开发高效,短小,轻量级的COM组件,DLL。比如WEB上的控件。 7、VISUAL C++可以开发优秀的基于通信的程序。 8、VISUAL C++可以开发高效灵活的文件操作程序。 9、VISUAL C++可以开发灵活高效的数据库操作程序。 10、VISUAL C++是编CAD软件的唯一选择!!!包括AUTOCAD,UG的二次开发。 11、VISUAL C++在多线程、网络通信、分布应用方面,VISUAL C++有不可比拟的优势。
VISUAL C++技术介绍?
匈牙利命名法规则 一般情况下,变量的取名方式为: 范围前缀_,类型前缀_,限定词。 特殊的类型命名,前缀表示: 类、接口 前缀类型例子备注 Lm Class LmObject 表示类型本身不与范围前缀结合使用 I Interface 接口 IUnknown 注:类名前缀改为Lm,对于非全局的类最好有语义表示其所属模块。类的实例命名与类名大致相同,只是类名语义表示类的通用含义,而类名表示此实例的具体语义。如类名LmSketPoint表示草图点的类定义,而它的两个实例 _StartPoint,_EndPoint分别代表起点和终点的语义。类的实例命名带上前缀_。 特殊约定: a. MouseTool的派生类的前缀为_Mt. b.对话框类的前缀为CDlg. c.橡皮条类的前缀为_Rb. 范围前缀: 前缀类型例子备注 g_ 全局作用域 g_Servers m_ 成员变量m_pDoc, l_ 局部作用域 l_strName 少用 注:编程时尽量少用全程变量,对于全程变量还应在类型前缀后加上如下关键字: 特征模块 : Fea 草图模块 : Sket 装配模块 : Asm 工程图模块: Lay 曲面模块 : Surf 界面模块 : Ui 常用的一般数据类型的前缀 前缀类型内存规格描述例子 ch char 8-bit character chGrade ch TCHAR 16-bit character if _UNICODE is defined chName b BOOL Boolean value bEnabled n int Integer (size dependent on operating system)nLength n UINT Unsigned value (size dependent on operatingsystem) nLength w WORD 16-bit unsigned value wPos l LONG 32-bit signed integer lOffset dw DWORD 32-bit unsigned integer dwRange p * Ambient memorymodel pointer pDoc lp FAR* Far pointer lpDoc lpsz LPSTR 32-bit pointer to character string lpszName lpsz LPCSTR 32-bit pointer to constant character stringlpszName lpsz LPCTSTR 32-bit pointer to constant character stringif _UNICODE is defined lpszName h handle Handle to Windows object hWnd lpfn (*fn)() callbackFar pointer to CALLBACK functionlpfnAbort 常用Windows对象名称缩写 Windows 对象例子变量 MFC类例子对象 HWND hWnd; CWnd* pWnd; HDLG hDlg; CDialog* pDlg; HDC hDC; CDC* pDC; HGDIOBJ hGdiObj; CGdiObject* pGdiObj; HPEN hPen; CPen* pPen; HBRUSH hBrush; CBrush* pBrush; HFONT hFont; CFont* pFont; HBITMAP hBitmap; CBitmap* pBitmap; HPALETTE hPalette; CPalette* pPalette; HRGN hRgn; CRgn* pRgn; HMENU hMenu; CMenu* pMenu; HWND hCtl; CStatic* pStatic; HWND hCtl; CButton* pBtn; HWND hCtl; CEdit* pEdit; HWND hCtl; CListBox* pListBox; HWND hCtl; CComboBox* pComboBox; Visual C++常用宏定义命名列表 前缀符号类型符号例子范围 IDR_ 标识多个资源共享的类型 IDR_MAINFRAME 1to 0x6FFF IDD_ 对话框资源(Dialog)IDD_SPELL_CHECK 1 to 0x6FFF IDB_ 位图资源(Bitmap)IDB_COMPANY_LOGO 1 to 0x6FFF IDC_ 光标资源(Cursor)IDC_PENCIL 1 to 0x6FFF IDI_ 图标资源(Icon) IDI_NOTEPAD1 to 0x6FFF ID_IDM_ 工具栏或菜单栏的命令项 ID_TOOLS_SPELLING0x8000 to 0xDFFF HID_ 命令上下文帮助(Command Helpcontext) HID_TOOLS_SPELLING 0x18000 to 0x1DFFF IDP_ 消息框提示文字资源IDP_INVALID_PARTNO 8 to 0xDFFF HIDP_ 消息框上下文帮助(Message-box Helpcontext) HIDP_INVALID_PARTNO 0x30008 to 0x3DFFF IDS_ 字符串资源(String)IDS_COPYRIGHT 1 to 0x7FFF IDC_ 对话框内的控制资源(Control)IDC_RECALC 8 to 0xDFFF VISUAL C++ 下的数据类型 类型含义 ATOM Atom. For more information, see Atoms. BOOL Boolean variable (should be TRUE or FALSE). BOOLEAN Boolean variable (should be TRUE or FALSE). BYTE Byte (8 bits). CALLBACK Calling convention for callback functions. CHAR 8-bit Windows (ANSI) character. For moreinformation, see Character Sets Used By Fonts. COLORREF Red, green, blue (RGB) color value (32 bits).See COLORREF for information on this type. CONST Variable whose value is to remain constant duringexecution. DWORD 32-bit unsigned integer. DWORD_PTR Unsigned long type for pointer precision. Usewhen casting a pointer to a long type to perform pointer arithmetic. (Alsocommonly used for general 32-bit parameters that have been extended to 64 bitsin 64-bit Windows. ) DWORD32 32-bitunsigned integer. DWORD64 64-bit unsigned integer. FLOAT Floating-point variable. HACCEL Handle to an accelerator table. HANDLE Handle to an object. HBITMAP Handle to a bitmap. HBRUSH Handle to a brush. HCONV Handle to a dynamic data exchange (DDE)conversation. HCONVLIST Handle to a DDE conversation list. HCURSOR Handle to a cursor. HDC Handle to a device context (DC).
VISUAL C++常用技术术语解释?
窗口? 窗口是windows应用程序的基本操作单元,用户通过它与应用程序发生交互,例如输入输出操作等等,从程序的内部工作原来来看,每一个窗口对应一个消息处理队列,应用程序主要通过窗口消息处理函数对用户的输入操作进行响应与处理。要想从程序员的角度充分理解窗口的含义,那么对WNDCLASS这个数据结构进行充分的了解是必须的。
实例?
单个实例代表一个可执行程序在内存中的拷贝,如果一个应用程序执行许多次,那么在内存中就有多少个拷贝,也就可以说明有多少个实例存在。
句柄?
句柄在windows环境下被定义成了一个无符号的整数,用于标识应用程序中不同的对象和同类对象中的不同实例。句柄可以看成是对象的编号,联系上面的实例,那么一个实例句柄就可以看作是单个应用程序在内存中拷贝的唯一身份编号,通常系统只能通过实例句柄去识别不同的应用程序,或者是相同应用程序的不同副本。
资源?
Windows应用程序包含很多资源,例如,菜单,图标,对话框等等,VISUAL C++环境下我们不仅仅可以使用系统下原有的资源,我们也可以定义自己的资源,这些资源被定义在.RC文件中,通过应用程序最后的编译,这些资源文件和程序代码连接在一起,形成一个可执行的.EXE文件或者是一个.DLL的库文件。在使用这些资源的时候,通过WIN API函数学将这些资源调用使用。
窗口消息处理函数?
窗口是人机交互的接口,当窗口接受到输入请求的时候,就会把这一请求交给某一个函数进行处理,而这个函数就是窗口消息处理函数,它能够决定当一个消息被接受到的时候采取什么行动。 消息通常是由一系列的输入操作触发的,比如当我按下鼠标左键那么窗口消息处理函数就会收到一个WM_LBUTTONDOWN的消息信号。在窗口消息处理函数中,我们可以利用switch和case结构进行控制, 针对此消息作出我们想要的操作。
图形设备接口?
应用程序的任何输出操作都需要通过图形设备接口(GDI)中的函数来完成操作,GDI负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或者文字,它将程序员与具体的硬件设备隔离开,让程序员不需要考虑硬件设备操作的细节。
回调函数?
回调函数是windows操作系统自己调用的函数,用户是不能直接调用他们的。回调函数的定义必须严格的按照windows标准进行编写。
VISUAL C++中播放声音的方法?
简介?
声音是多媒体的一个重要组成部分,在应用程序中加入声音可以使界面更友好。在VISUAL C++中可以根据不同的应用要求,用不同的方法实现声音的播放。
一.播放声音文件的简单方法?
在VISUAL C++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VISUAL C++中提供的声音播放函数BOOL sndPlaySound( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound(LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.WAV文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VISUAL C++中的帮助。例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
?
二.将声音文件加入到程序中?
在VISUAL C++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VISUAL C++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.WAV文件的声音播放。 要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为IDR_WAVE1。在播放时只需要调用下面的语句: PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP); 其中MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄, SND_RESOURCE是必须的标志。 作为资源的声音文件的第二种播放方法是把资源读入内存后作为内存数据播放。具体步骤入下: 1.获得包含资源的模块句柄: HMODULE hmod=AfxGetResourceHandle(); 2.检索资源块信息: HRSRChSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE")); 3. 装载资源数据并加锁: HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource); LPCTSTRlpMemSound=(LPCSTR)LockResource(hGlobalMem); 4.播放声音文件: sndPlaySound(lpMemSound,SND_MEMORY)); 5.释放资源句柄: FreeResource(hGlobalMem);
三.播放声音文件的高级方法
在VISUAL C++中提供了一组对音频设备及多媒体文件直接进行操作的函数。利用这些函数可以灵活地对声音文件进行各种处理。 首先介绍几个要用到的数据结构。WAVEFORMATEX结构定义了WAVE音频数据文件的格式。WAVEHDR结构定义了波形音频缓冲区。读出的数据首先要填充此缓冲区才能送音频设备播放。WAVEOUTCAPS结构描述了音频设备的性能。MMCKINFO结构包含了RIFF文件中一个块的信息。详细的说明请参考VISUAL C++中的帮助。 下面给出程序流程简图及程序源代码清单,在VISUAL C++环境下可直接使用: 源程序清单如下: LPSTR szFileName;//声音文件名 MMCKINFO mmckinfoParent; MMCKINFO mmckinfoSubChunk; DWORD dwFmtSize; HMMIO m_hmmio;//音频文件句柄 DWORD m_WaveLong; HPSTR lpData;//音频数据 HANDLE m_hData; HANDLE m_hFormat; WAVEFORMATEX * lpFormat; DWORD m_dwDataOffset; DWORD m_dwDataSize; WAVEHDR pWaveOutHdr; WAVEOUTCAPS pwoc; HWAVEOUT hWaveOut; //打开波形文件 if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF))) { //File open Error Error("Failed to open the file.");//错误处理函数 return false; } //检查打开文件是否是声音文件 mmckinfoParent.fccType=mmioFOURCC(’W’,’A’,’V’,’E’); if(mmioDescend(m_hmmio,(LPMMCKINFO)mmckinfoParent,NULL,MMIO_FINDRIFF)) { //NOT WAVE FILE AND QUIT } //寻找 ’fmt’ 块 mmckinfoSubChunk.ckid =mmioFOURCC(’f’,’m’,’t’,’ ’); if(mmioDescend(m_hmmio,mmckinfoSubChunk,mmckinfoParent,MMIO_FINDCHUNK)) { //Can’t find ’fmt’ chunk } //获得 ’fmt ’块的大小,申请内存 dwFmtSize=mmckinfoSubChunk.cksize ; m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize)); if(!m_hFormat) { //failed alloc memory } lpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat); if(!lpFormat) { //failed to lock the memory } if((unsignedlong)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize) { //failed to read format chunk } //离开 fmt 块 mmioAscend(m_hmmio,mmckinfoSubChunk,0); //寻找 ’data’ 块 mmckinfoSubChunk.ckid=mmioFOURCC(’d’,’a’,’t’,’a’); if(mmioDescend(m_hmmio,mmckinfoSubChunk,mmckinfoParent,MMIO_FINDCHUNK)) { //Can’t find’data’ chunk } //获得 ’data’块的大小 m_dwDataSize=mmckinfoSubChunk.cksize ; m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ; if(m_dwDataSize==0L) { //no data in the ’data’ chunk } //为音频数据分配内存 lpData=new char[m_dwDataSize]; if(!lpData) { //faile } if(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)0) { //Failed to read the data chunk } m_WaveLong=mmioRead(m_hmmio,lpData,SoundLong); if(m_WaveLong0) { //Failed to read the data chunk } //检查音频设备,返回音频输出设备的性能 if(waveOutGetDeVISUAL C++aps(WAVE_MAPPER,pwoc,sizeof(WAVEOUTCAPS))!=0) { //Unable to allocate or lock memory } //检查音频输出设备是否能播放指定的音频文件 if(waveOutOpen(hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0) { //Failed to OPEN the wave out devices } //准备待播放的数据 pWaveOutHdr.lpData =(HPSTR)lpData; pWaveOutHdr.dwBufferLength =m_WaveLong; pWaveOutHdr.dwFlags =0; if(waveOutPrepareHeader(hWaveOut,pWaveOutHdr,sizeof(WAVEHDR))!=0) { //Failed to prepare the wave data buffer } //播放音频数据文件 if(waveOutWrite(hWaveOut,pWaveOutHdr,sizeof(WAVEHDR))!=0) { //Failed to write the wave data buffer } //关闭音频输出设备,释放内存 waveOutReset(hWaveOut); waveOutClose(hWaveOut); LocalUnlock(m_hFormat); LocalFree(m_hFormat); delete [] lpData; 说明:1)以上使用的音频设备和声音文件操作函数的声明包含在mmsystem.h头文件中,因此在程序中必须用#include "mmsystem.h"语句加入头文件。同时在编译时要加入动态连接导入库winmm.lib,具体实现方法是从Developer Studio的Project菜单中选择Settings,然后在Link选项卡上的Object/Library Modules控制中加入winmm.lib。2)在pWaveOutHdr.lpData中指定不同的数据,可以播放音频数据文件中任意指定位置的声音。3) 以上程序均在VISUAL C++6.0中调试通过,在文中省略了对错误及异常情况的处理,在实际应用中必须加入。 ??
四.结论
在VISUAL C++中可以根据应用需要采用不同的方法播放声音文件。简单应用可以直接调用声音播放函数。第二种方法可以把声音作为资源加入可执行文件中。如果在播放之前要对声音数据进行处理,可用第三种方法。
五.Visual C++.NET
随着NET的时代来临,VISUAL C++也如同VB一样,脱胎换骨到VISUAL C++.NET
相关资料?
资料1?
Visual C++ 6.0 简体中文企业版集成SP6完美版 Visual C++ 6.0 英文企业版集成SP6完美版 Visual Studio 6.0 英文企业版集成SP6完美版 钱能 c++程序设计教程第二版高清PDF版 Essential C++ 中文版+英文版 侯捷译 编程点金之Visual C++(电子教程) iso C++程序调试实用手册 PDF版下载 C++面向对象多线程编程 PDF版下载
资料2?
C++高级编程参考手册 C和C++代码精粹 C++沉思录 C++ Primer 第三版 C++ Primer 第四版中文版高清晰 高质量C++编程指南 C++ 编程思想第1卷标准C++导引 C++ 编程思想第2卷实用编程技术 More Effective C++ 简体中文版
资料3?
C++ Templates 中文版+英文版 C++ Coding Standards[Addison Wesley] Absolute C++ 全彩页代码剖析 Accelerated C++ - Practical Programming by Example Inside the C++ Object Model More Exceptional C++ [Addison Wesley] Exceptional C++ [Addison Wesley] Sams出版 C++ Unleashed C++ GUI Programming with QT4
资料4?
VISUAL C++深入详解 孙鑫作品系列高清PDF版下载 Visual C++ 6傻瓜书快速参考 Visual C++ 6.0 编程实例与技巧(PDF中文版) Visual C++ 21天自学教程 跟我学Visual C++ 6 Visual C++ 6 数据库编程 21天自学教程 CHM The C++ Programming Language 第三版 深度探索C++对象模型 Special Edition Using Visual C++ 6 Professional MFC with VISUAL C++ 6
资料5?
Practical C++ Programming Cross-Platform Development in C++ Iterative UML Development Using VISUAL C++ 6 Ace Programmer's Guide Visual C++高级界面特效制作百例 精通GDI+编程 清华大学出版 Borland C++ Builder 6 开发指南 CHM 孙鑫C++视频教程 rmvb格式全20CD完整版 C++视频教程边用边学Visual C++ 6 (ASF格式) 中山大学蔡培兴 C++语言视频教程全51讲精品推荐 C++程序设计视频教程 东南大学何洁月主讲全80讲(上) 48讲 C++程序设计视频教程东南大学何洁月主讲全80讲(下) 32讲词条图册更多图册
谁给我一个能用的造梦西游3极品号源
造梦西游3极品号源要进行如下步骤。
用IE打开造梦西游3创一个号新建一个角色,进入九重天后马上退回来,点机文件—脱机工作—保存游戏(造梦3不要退关闭)。
打开我的电脑到C、E、D盘(反正所有盘)搜索#4399这个文件,打开文件找到一个文件夹(4399帐号和刚刚的创建的帐号一样的)把里面的一个文件剪贴下来到桌面上再打开flashSolEditer修改器点击打开SOL文件找到刚刚剪贴下来的文件。
打开很长的字母的地方把原来的号源给删了把极品号源复制上去(如果是悟空就悟空,反正是那个人物就是那个人物的号源)点击保存SOL文件,再把在桌面的那文件在弄到4399帐号和刚刚的创建的帐号一样的文件里,在打开造梦3连刷新—连接就好了。
造梦西游3介绍:
《造梦西游III·大闹天庭篇》是4399游戏发行的2D横版过关类动作网页小游戏,于2011年12月29日上线发行。是造梦西游系列的第三个版本。
游戏延续造梦1、2的Q版卡通画面及形象,增加了新的剧情任务、宠物战斗模式、线上PK、同屏聊天等。
本文名称:hidvb点虐 的简单介绍
文章起源:http://hbruida.cn/article/ddesioj.html