📄 pcrecorddlg.cpp
字号:
// PCRecordDlg.cpp : 实现文件
//
#include <windows.h>
#include "stdafx.h"
#include "PCRecord.h"
#include "PCRecordDlg.h"
#include "wavefile.h"
#include "wavrec.h"
#include<time.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CPCRecordDlg 对话框
CPCRecordDlg::CPCRecordDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPCRecordDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPCRecordDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_SAVE_FILE, m_strFile);
}
BEGIN_MESSAGE_MAP(CPCRecordDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(OnStart, &CPCRecordDlg::OnBnClickedOnstart)
ON_BN_CLICKED(IDC_BROWSE, &CPCRecordDlg::OnBnClickedBrowse)
ON_WM_TIMER()
END_MESSAGE_MAP()
// CPCRecordDlg 消息处理程序
BOOL CPCRecordDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CPCRecordDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_PCRECORD_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_PCRECORD_DIALOG));
}
#endif
void CPCRecordDlg::OnBnClickedOnstart()
{
if (m_strFile.IsEmpty())
{
AfxMessageBox(_T("请先输入要保存的文件名"));
return;
}
//pFile=m_strFile.GetBuffer(m_strFile.GetLength());
//MessageBox(pFile,TEXT("msg"),MB_OK);
UpdateData(true);
//////////////
DWORD dwThreadID;
HANDLE hThread = CreateThread(NULL, // no security attributes
0, // use default stack size
(LPTHREAD_START_ROUTINE)ThreadFunc,
(LPVOID)NULL, // 可以通过这个参数传送一个参数的指针到处理函数中
0, // creation flag
&dwThreadID); // thread identifier
if (hThread == NULL)
MessageBox(TEXT("创建线程出错!"),TEXT("msg"),MB_OK);;
StartRe=(char *)m_strFile.GetBuffer(m_strFile.GetLength());
SetTimer(1, 1000, NULL);
clocker=-1;
////////////////////////////////
}
DWORD ThreadFunc(LPVOID lpVoid) //lpVoid即为创建线程时传入的参数,可以为空
{
//在你的线程中的处理。
//MessageBox(NULL,TEXT("msg"),TEXT("msg"),MB_OK);
StartRecord(StartRe);
stop=true;
return 0;
}
void CPCRecordDlg::OnBnClickedBrowse()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog Dlg(false);
if (Dlg.DoModal() == IDCANCEL)
return;
m_strFile = Dlg.GetPathName();
m_strFile+= ".wav";
//MessageBox(m_strFile,TEXT("msg"),MB_OK);
UpdateData(false);
}
void CPCRecordDlg::OnTimer(UINT nIDEvent)
{
//MessageBox(TEXT("OnTimer"),TEXT("msg"),MB_OK);
CString str,strWnd;
//MessageBox((LPCTSTR)hFile,TEXT("msg"),MB_OK);
// Show file size
//GetDlgItem(IDC_FILE_SIZE)->SetWindowInt(dwLen);
// MessageBox(TEXT("msg"),(LPCTSTR)hFile,MB_OK);
//MessageBox((LPCTSTR)hFile,TEXT("msg"),MB_OK); Int2MB(GetFileSize(hFile,NULL),str); GetDlgItem(IDC_FILE_SIZE)->SetWindowText(str);
clocker++;
// Show record time
Int2Time(clocker,str);
GetDlgItem(IDC_SECOND)->SetWindowText(str);
CDialog::OnTimer(nIDEvent);
if(stop==true)
KillTimer(1);
}
BOOL CPCRecordDlg::DestroyWindow()
{
KillTimer(1);
return CDialog::DestroyWindow();
}
////////////////////////////////////////////////////////////////////
// Name : Int2Time
// Description : Change integer into time string
// Parameter : None
// Return : None
// Remark : None
////////////////////////////////////////////////////////////////////
void CPCRecordDlg::Int2Time(int delta, CString &strRet)
{
CString str;
strRet = "";
// weeks
if (delta >= 604800)
{
str.Format(L"%d周", delta/604800);
strRet += str;
delta = delta % 604800;
}
// days
if (delta >= 86400)
{
str.Format(L"%d天", delta/86400);
strRet += str;
delta = delta % 86400;
}
// hours
if (delta >= 3600)
{
str.Format(L"%d时", delta/3600);
strRet += str;
delta = delta % 3600;
}
// minutes
if (delta >= 60)
{
str.Format(L"%d分", delta/60);
strRet += str;
delta = delta % 60;
}
// seconds
str.Format(L"%d秒",delta);
strRet += str;
return;
}
////////////////////////////////////////////////////////////////////
// Name : Int2MB
// Description : Translate integer value into Size string
// Parameter : None
// Return : None
// Remark : None
////////////////////////////////////////////////////////////////////
void CPCRecordDlg::Int2MB(int fsize, CString &strRet)
{
CString str;
strRet = "";
if (fsize >= 1048576)
{
str.Format(L"%d", fsize / 1048576);
strRet = str;
}
else if (fsize >= 1024)
{
str.Format(L"%d KB", fsize / 1024);
strRet += str;
}
else
{
str.Format(L"%d Byte", fsize);
strRet += str;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -