参考资料:
http://xxkkff.blog.51cto.com/162016/26222
http://blog.csdn.net/xuminggang/archive/2009/05/21/4206010.aspx
文件多选时,GetOpenFileName(&ofn)执行后,ofn.lpstrFile的结构为
文件目录路径文件1文件2……
参考资料:
http://xxkkff.blog.51cto.com/162016/26222
http://blog.csdn.net/xuminggang/archive/2009/05/21/4206010.aspx
文件多选时,GetOpenFileName(&ofn)执行后,ofn.lpstrFile的结构为
文件目录路径文件1文件2……
#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
int choice = 0;
do
{
OPENFILENAME ofn;
char szFile[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT(‘\0’);
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT(“*.wav\0*.wav\0”);
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
{
PlaySound(szFile, NULL, SND_FILENAME | SND_SYNC);
choice = MessageBox(NULL, TEXT(“wav播放完毕,是否重新选择wav文件?”), TEXT(“播放完毕”), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON1);
if(choice == IDYES)
choice = 1;
else
choice = 0;
}
}while(choice);
return 0;
}
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
{
OPENFILENAME ofn;
//文件打开对话框主要通过GetOpenFileName函数实现
//其参数为OPENFILENAME指针类型
//此处定义一个OPENFILENAME类型的变量ofn
char szFile[MAX_PATH];
//定义保存打开文件路径的char数组
//数组长度为MAX_PATH
//MAX_PATH是Windows操作系统中的路径最长长度常量为260
ZeroMemory(&ofn, sizeof(ofn));
//OPENFILENAME是种结构体
//ZeroMemory将结构体置零
//对比memset函数
ofn.lStructSize = sizeof(ofn);
//结构体本身能够知道自己的大小,为什么很多WINAPI结构体中都有存储结构体大小的变量?
//Windows发展的历史原因。
ofn.lpstrFile = szFile;
//ofn.lpstrFile指针指向szFile
ofn.lpstrFile[0] = TEXT(‘\0’);
//相当于szFile[0] = ‘\0’
//也就是置零
//ofn.lpstrFile和szFile[MAX_PATH]是如何取得值的?
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT(“文本文档(*.txt)\0*.txt\0所有文件\0*.*\0”);
//文件类型过滤器
//’\0’将其分隔
//每两段为一组,前面部分为显示值,后面部分为过滤。
ofn.nFilterIndex = 1;
//默认过滤文件类型索引
//此处的索引数字从1开始
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
//OFN_EXPLORER——新界面
//OFN_PATHMUSTEXIST——文件路径必须存在
//OFN_FILEMUSTEXIST——文件必须存在
if(GetOpenFileName(&ofn))
MessageBox(NULL, szFile, NULL, MB_OK);
return 0;
}
头文件:mmsystem.h
函数原型:BOOL WINAPI PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)
参考http://zhidao.baidu.com/question/41366091.html
#include <windows.h>
#include <mmsystem.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
int choice = MessageBox(NULL, TEXT(“重启计算机?”), TEXT(“重启”), MB_OKCANCEL | MB_ICONQUESTION | MB_DEFBUTTON2);
if(choice == IDOK)
{
PlaySound(“C:WINDOWSMediaWindows XP 关机.wav”, NULL, SND_FILENAME | SND_ASYNC);
MessageBox(NULL, TEXT(“关闭计算机……”), TEXT(“关闭”), MB_OK);
PlaySound(NULL, NULL, SND_FILENAME);
choice = MessageBox(NULL, TEXT(“启动计算机?”), TEXT(“启动”), MB_YESNO | MB_ICONQUESTION);
if(choice == IDYES)
{
PlaySound(“C:WINDOWSMediaWindows XP 启动.wav”, NULL, SND_FILENAME | SND_SYNC);
MessageBox(NULL, TEXT(“计算机已成功启动!”), TEXT(“启动成功”), MB_OK);
}
}
return 0;
}
函数原型:int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
函数功能:创建、显示和操作一个消息框。消息框含有应用程序定义的消息标题和内容,加上预定义图标与按钮的任何组合。
hWnd标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。
lpText消息框内容,lpCaption消息框标题,uType指定一个决定对话框的内容和行为的位标志集。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBox(NULL, TEXT(”Hello, windows!”), TEXT(”Msg”), MB_OK);
return 0;
}
有关uType取值可查看winuser.h。
/*
* MessageBox() Flags
*/
#define MB_OK 0×00000000L
#define MB_OKCANCEL 0×00000001L
#define MB_ABORTRETRYIGNORE 0×00000002L
#define MB_YESNOCANCEL 0×00000003L
#define MB_YESNO 0×00000004L
#define MB_RETRYCANCEL 0×00000005L
#define MB_ICONHAND 0×00000010L
#define MB_ICONQUESTION 0×00000020L
#define MB_ICONEXCLAMATION 0×00000030L
#define MB_ICONASTERISK 0×00000040L
注意到不同取值的分组位规律,采用按位或运算“|”进行组合。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
int choice = MessageBox(NULL, TEXT(“你是好人吗?”), TEXT(“你是好人吗?”), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
switch(choice)
{
case IDYES:
MessageBox(NULL, TEXT(“一看你就不是好人,点击【确定】开始格式化C盘!”), TEXT(“是”), MB_OK | MB_ICONWARNING);
break;
case IDNO:
MessageBox(NULL, TEXT(“尝试把你变成好人失败,是否重试?”), TEXT(“否”), MB_RETRYCANCEL);
break;
default:
;
}
return 0;
}