Archive for 7 月, 2009

对话框程序

星期日, 12 7 月, 2009

对话框程序是窗口程序的子集。窗口程序大部分的工作由对话框程序执行。

对话框的相关设置在工程的.dlg文件里,使用资源编辑器可进行对话框设置。

设置对话框控件及其属性。一般常设置控件的Name和Caption属性。Name是对话框控件的标识,在C-Free里它的宏定义在rsrc.inc文件里,其有一定的命名规则。

对话框菜单设置好后,在对话框Menu属性中添加菜单。

Image控件注意Type和Image属性。

EditText控件注意xStyle属性。

资源最好保存在工程下。

对话框设置好后,需要在main.cpp中写处理函数。

注意要#include “rsrc.inc”。

按钮的点击在Main_OnCommand中。

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
 int iDrivesNum = 0;
 TCHAR cStr[10] = “IHGFEDCBA”;
    switch(id)
    {
  case IDC_BTNGO:
   TCHAR cR[256];
   GetDlgItemText(hwnd, IDC_EDTR, cR, sizeof(cR)/sizeof(TCHAR));
   float fR = atof(cR);
   fR = 3.1415926*fR*fR;
   gcvt(fR, 8, cR);
   SetDlgItemText(hwnd, IDC_EDTRESULT, cR);
  break;
  case IDC_BTNINFO:
   DWORD dInfo = GetLogicalDrives(); 
   TCHAR cInfo[256];
   TCHAR cResult[256];
   itoa(dInfo, cInfo, 2);
   for(int i = lstrlen(cInfo)-1; i >= 0; i–)
   {
    if(cInfo[i] == ‘1’)
    {
     cResult[iDrivesNum] = cStr[i];
     iDrivesNum++;   
     //TCHAR cTemp = cStr[i];
     //lstrcat(cResult, &cTemp);
     //为什么会出现特殊字符?
    }
   }
   cResult[iDrivesNum+1] = ‘\0’;
   SetDlgItemText(hwnd, IDC_EDTINFO, cResult);
  break;
        default:break;
    }

}

问题部分是因为lstrcat是连接字符串(字符指针)的,不能用来直接连接char。

参考资料:

lstrcat http://baike.baidu.com/view/1906745.htm

strcat http://baike.baidu.com/view/1028534.htm

strncat http://baike.baidu.com/view/1028544.htm

问题部分改为

    if(cInfo[i] == ‘1’)
    {
      iDrivesNum++;   
     TCHAR* cTemp = &cStr[i];
     strncat(cResult, cTemp, 1);
     //为什么只在第一个位置出现特殊字符?
    }

ZeroMemory(cResult, sizeof(cResult));

Dialog

文件打开对话框——文件多选

星期六, 11 7 月, 2009

参考资料:

http://xxkkff.blog.51cto.com/162016/26222

http://blog.csdn.net/xuminggang/archive/2009/05/21/4206010.aspx

文件多选时,GetOpenFileName(&ofn)执行后,ofn.lpstrFile的结构为

文件目录路径文件1文件2……

WavPlayer

星期六, 11 7 月, 2009

#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;
}

WavPlayer

文件打开对话框

星期五, 10 7 月, 2009

#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;
}

PlaySound

星期三, 8 7 月, 2009

头文件: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;
}

重启计算机