VC API常用函数简单例子大全(3)

2019-04-16 15:31

如果单单只针对文件的属性进行操作的话,可以用GetFileAttributes函数获取文件的属性,该函数只一个参数,那就是文件的路径,函数返回一个DWORD值,包含文件属性信息。

18:ShellExecute运行一个程序

函数定义:ShellExecute(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);

第一个参数hwnd是父窗口的句柄,可以为NULL,第二个参数lpOperation表示行为,第三个参数lpFile是程序的路径名,第四个参数lpParameters是给所打开程序的参数,可以为NULL,第五个参数lpDirectory可以为NULL,第六个参数nShowCmd跟ShowWindow函数的第二个参数一样,作用也一样,如果打开的程序有窗口的话,这个参数就指明了窗口如何显示. 例如打开一个记事本:

ShellExecute(NULL,\

而且这个函数还可以指定程序打开一个属于程序本身类型的文件,假如e盘有一个a.txt文件;我调用函数运行记事本程序并打开这个文本文件.

ShellExecute(NULL,\这里由于记事本程序属于系统本身自带的程序,所以没有绝对路径. 这个函数还可以打开一个网站:

ShellExecute(NULL,\ShellExecute(NULL,\

类似的函数还有WinExec,只有两个参数,它的最后一个参数跟ShellExecute函数的最后一个参数一样.

而第一个参数则是程序路径名.举个例子:WinExce(\这个函数也可以给程序传递一个文件名供要运行的程序打开,那要如何加进去呢,这里又没有第三个参数,

方法把路径名加在NOTPEPAD.EXE的后面,要以空格来分开如: WinExce(\

19:PlaySound播放一个WAV文件

函数定义:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound); 第一个参数是WAV文件的路径名,第二个参数如果不是播放MFC里以资源ID命名的文件,则可以为空,第三个参数,指明了以何种方式播放文件。注意这个函数只能播放100K以下的WAV文件。

假如E盘有个a.wav文件,下面这个例子播放这个文件: #include

#include//PlaySound函数的头文件

#pragma comment(lib, \链接库,PlaySound函数必须使用 int main()

{

PlaySound(\return 0; }

20:GetModuleFileName根据模块导入表获程序的完整路径

函数定义:DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );

关于第一个参数,将在以后的动态链接库里会有介绍,这里我们只要获得程序本身的路径,那么第一个参数可以为空。

第二个参数用以存储路径,nSize指明字符数组大小。

这个举个例子,运行后,把自身程序移动到e盘下,并改名为a.exe; #include int main() {

char szAppName[128]={0};

GetModuleFileName(NULL,szAppName,128); MoveFile(szAppName,\return 0; }

21:CreateWindow创建一个窗口

之前API函数的例子,都是针对DOS编程的,严格来说是在windows下的仿DOS(cmd)进行编程,编写控制台应用程序大家都知道,主函数是main,那针对windows编程的主函数也是main吗?不是的,windows下的主函数(入口函数)是WinMain。在定义main主函数的时候,可以给它带两个参数,也可以不带。而WinMain函数就不能这样了,它有固定的格式,它必须带四个参数。

现给出WinMain函数的固定格式:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, instance LPSTR lpCmdLine, int nCmdShow)

大家如果有兴趣可以通过其它渠道了解一下各参数的意思,现在我们只需要知道WinMain函数就是这样定义的,不理解也没关系。 知道了这个我们就来编一个WINDOWS程序吧!

因为我们是针对windows编程,所以要建一个Win32 Application工程,步骤是点击文件,然后选择新建,在弹出的对话框里选择工程,再选中Win32 Application 接着在右边的工程名称下填工程名称,名字随便取。之后点确定。接着又弹出了一个对话框,这里为了方便,我们选择“一个简单的 Win32 程序”,点完成。接着双击WinMain弹出代码编辑窗口,做完这个我们就可以打代码了。

简单的例子如下: #include \

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { while(1) Sleep(100); return 0; }

怎么样够简单吧,是不是觉得奇怪,怎么没有窗口,因为窗口要自己创建,不像控制台程序,只要一运行便会有窗口。虽然没有窗口,但你创建了一个进程,打开任务管理器,可以找到你所创建的那个进程,其实也没什么奇怪的,像WINDOWS本身的一些系统服务,也是只有进程,没有窗口的像spoolsv.exe,svchost.exe。

那要如何创建一个窗口呢?要创建一个窗口,就必须要向系统提供窗口的信息,如你要创建的窗口名字叫什么,窗口图标是什么,窗口大小,窗口背景色等,不然,系统怎么给你创建窗口呢?所以为了方便,VC就定义了一个结构,专门用存储窗口信息。 现给出这个结构的定义。 typedef struct _WNDCLASS { UINT style; //描述类风格

WNDPROC lpfnWndProc; //窗口处理函数

int cbClsExtra; //表示窗口类结构之后分配的额外的字节数。系统将该值初始化为0 int cbWndExtra; //表示窗口实例之后分配的额外的字节数。系统将该值初始化为0 HINSTANCE hInstance;// 应用程序实例句柄由WinMain函数传进来 HICON hIcon; //窗口图标句柄 HCURSOR hCursor; //窗口光标句柄 HBRUSH hbrBackground; //画刷句柄 LPCTSTR lpszMenuName; //窗口菜单名 LPCTSTR lpszClassName; //窗口类名 } WNDCLASS, *PWNDCLASS;

好了,如果我们已经把窗口信息填好了,那我们要怎样把这个信息告诉系统呢,也就是把要创建窗口的信息传给系统。这里我们调用RegisterClass函数就能实现这个功能。注册完窗口,我们就要创建窗口,用CreateWindow函数就能实现,不要问为什么注册窗口后直接显示不就行了,还要搞什么创建窗口。这我也不知道,反正你只要记住这格式就行了,硬式规定的,你想创建一个窗口,就必须按这些步骤来。

好了,窗口创建了,我们就要调用ShowWindow函数显示窗口,然后用UpdateWindow函数刷新一下,确保窗口能立即显示。 以下详细实现代码: #include \

#include

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

WNDCLASS wndcls; //定义一个存储窗口信息WNDCLASS变量 wndcls.cbClsExtra=0; //默认为0

wndcls.cbWndExtra=0; //默认为0

wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //背景画刷 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); //十字光标 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); //窗口图标

wndcls.hInstance=hInstance; //应用程序实例句柄由WinMain函数传进来

wndcls.lpfnWndProc=NULL; //窗口消息处理函数

wndcls.lpszClassName=\窗口类名

wndcls.lpszMenuName=NULL; //窗口菜单名,没有菜单,为NULL

wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口类型,CS_HREDRAW和CS_VERDRAW 表明 //当窗口水平方向垂直方向的宽度变化时重绘整个窗口

RegisterClass(&wndcls); //把窗口信息提交给系统,注册窗口类 HWND hwnd; //用以存储CreateWindow函数所创建的窗口句柄

hwnd=CreateWindow(\

WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);//创建窗口 ShowWindow(hwnd,SW_SHOWNORMAL);//窗口创建完了,显示它 UpdateWindow(hwnd); //更新窗口,让窗口毫无延迟的显示 return 0; }

是不是出错了,内存不能读取,为什么了呢,因为你创建的窗口没有消息处理函数,windows系统当然不允许这样一个窗口存在,对按键,鼠标都没有反应,这样的窗口是没有实际意义的。 wndcls.lpfnWndProc=NULL; //窗口消息处理函数,就是前面这句,必须要填

窗口过程(消息)处理函数,那这个函数是怎样定义的呢,像WinMain一样,它也有固定的格式。

窗口过程处理函数的格式:LRESULT CALLBACK WinSunProc(HWND wnd,UINT uMsg,WPARAM wParam,LPARAM lParam)

下面的这个是一个窗口创建的完整例子: #include \#include

LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) {

if(uMsg==WM_LBUTTONDOWN) MessageBox(NULL,\处理鼠标按下消息,弹出消息框

return DefWindowProc(hwnd,uMsg,wParam,lParam); //未处理的消息通过DefWindowProc函数交给系统处理 }

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

WNDCLASS wndcls; //定义一个存储窗口信息WNDCLASS变量 wndcls.cbClsExtra=0; //默认为0 wndcls.cbWndExtra=0; //默认为0

wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //背景画刷 wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); //光标


VC API常用函数简单例子大全(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:植物地理学复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: