摘要: 自定义资源的语法格式为 资源ID 自定义资源类型名 文件路径添加自定义资源的步骤如下 1.按上语法格式,在rc文件中添加语句。 2.在resource.h头文件中,定义资源ID。 3.使用FindResoource等API,使用自定义资源。举例:添加自定义资源,资源名为XML。并在IDE 输出窗口中输出XML语句 1.打开rc文件,添加如入语句 IDR_XML1 XML "skins//def_skin.xml" IDR_XML5 XML "skins//dlg_main.xml def_skin.xml的文件内容为 <skins> <... 阅读全文
posted @ 2012-04-21 23:34 血马雄风 阅读(228) 评论(0) 推荐(0)
摘要: 一.播放声音文件的简单方法 在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.WAV文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:. 阅读全文
posted @ 2012-04-21 23:10 血马雄风 阅读(6510) 评论(0) 推荐(0)
摘要: 在MFC中,使用资源中的BMP是简单的,但是若是使用其他的图片资源,却是不容易的.以下为解决办法.首先,在Resource.h里面定义ID:#define IDB_BG 131然后在rc文件里面添加代码:IDB_BG RCPNG "res//背景.png"其中,RCPNG为自定义资源类型的名称,当然,至于你需要如何去命名就是你的事情了.然后我们需要CImage这个ATL类,以及以下这个方法:/**////////////////////////////////////////... 阅读全文
posted @ 2012-04-21 22:10 血马雄风 阅读(3511) 评论(1) 推荐(0)
摘要: 一、前言 在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。1.默认的皮肤压缩包或语言包。一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件(你可以尝试将Media Player或千千静听等软件的Skins目录下的文件的扩展名改为.zip,然后使用WinZip打开看一下),但为了防止Skin文件丢失导致软件无 法显示,他们常常会在EXE文件中内置一套Skin作为默认的皮肤文件。同样,一些支持多语言的EXE文件中存在默认语言包也是这个道理(当然. 阅读全文
posted @ 2012-04-21 21:58 血马雄风 阅读(494) 评论(0) 推荐(0)
摘要: 概述 被这些修饰关键字修饰的函数,其参数都是从右向左通过堆栈传递的(__fastcall的前面部 分由ecx,edx传), 函数调用在返回前要清理堆栈,但由调用者还是被调用者清理不一定。MFC缺省调用约定 1、_stdcall是Pascal方式清理C方式压栈,通常用于Win32 Api中,函数采用从右到左的压栈方式, 自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 int f(void *p) -->> _f@4(在外部汇编语言里可以用这个名字引用这个函数) 2、C调用约定(即用__cdecl关键字说明) 阅读全文
posted @ 2012-04-21 17:04 血马雄风 阅读(213) 评论(0) 推荐(0)
摘要: C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result =function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用 阅读全文
posted @ 2012-04-21 17:01 血马雄风 阅读(335) 评论(0) 推荐(0)
摘要: DWORD WINAPI ThreadProc(LPVOID lpParameter); 不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall 和 __cdecl两者的区别:#define CALLBACK __stdcall#define WINAPI __stdcall#define WINAPIV __cdecl#define APIENTRY WINAPI#define APIPRIVATE __stdcall#define PASCAL __stdcall#define cdecl _cdecl#ifndef CDECL#define CDECL 阅读全文
posted @ 2012-04-21 16:22 血马雄风 阅读(1786) 评论(0) 推荐(0)
摘要: 关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆栈的清除工作,如果是__cdecl方式的函数,则函数本身(如果不用汇编写)则不需要关心保存参数的堆栈的清除,但是如果是__stdcall的规则,一定要在函数退出(ret)前恢复堆栈。1.__cdecl 所谓的C调用规则... 阅读全文
posted @ 2012-04-21 16:00 血马雄风 阅读(326) 评论(0) 推荐(0)