EVC基础
时间:2010-04-22 来源:macker1989
EVC基础
在app下
MessageBox(NULL,TEXT("hello"),TEXT("msg"),MB_OK);
在dlg
MessageBox(TEXT("hello"),TEXT("msg"),MB_OK);
格式化(LPCTSTR
MessageBox((LPCTSTR)port,TEXT("msg"),MB_OK);
这个更简单
AfxMessageBox(L"1111");
AfxMessageBox(str);
///////////////////////////////////////////////////////////////
DWORD dwDuration 转为字符串
CString str;
str.Format(L"%d",dwDuration); //注意其中的 "L"
AfxMessageBox(str);
当 dwDuration 为double 时 str.Format(L"%lf",dwDuration);
转为 char *
CString str="6565445665564546df5s65fd465afs465adf465asf465";
char *sql="";
memset( sql, 0,128);//这里的128如果改成256会出错,程序要关掉才能正常,浪费半个多小时
WideCharToMultiByte( CP_ACP, 0, str, -1, sql, 128, NULL, NULL);
已绝对OK的CString转换char *!
有来有往!!!
//////////////////////////////////////////////////////////////////////////////////
GetDlgItem(IDC_BROWSE)->EnableWindow(false); //禁止IDC_BROWSE 控件
//////////////////////////////////////////////////////////
SetTimer(1, 10, NULL); //1为ID号即 nIDEvent
afx_msg void OnTimer(UINT nIDEvent);//.h 定义
void CPCRecordDlg::OnTimer(UINT nIDEvent) //为响应函数
KillTimer(1);// 关闭
不要忘了在消息映射(BEGIN_MESSAGE_MAP)的地方加上 ON_WM_TIMER()
////////////////////////
1.IDC_COMBO 添加多项时 CTRL+回车
2.获得 COMBOX值
CString port;
GetDlgItemText(IDC_COMBO2,port);
3.在dialog 时 点击COMBOX 小三角形,设置是否下拉和下拉长度
//////
IDC_EDIT 选择 MultiLine 支持多行,WantReturn 支持回车,vertical scroll 高滚动
/////
是否CHECK被选中(复选框)
if(IsDlgButtonChecked(IDC_CHECK1)==BST_CHECKED)
关窗口
////////////////////
if (MessageBox(_T("确定要退出吗?"),_T("提示"),MB_YESNO|MB_DEFBUTTON2)==IDYES)
{
PostQuitMessage(0); //这个最常用
// ExitProcess(0);//这个关得最快
//CWnd::OnClose(); 里个关不掉
}
return TRUE; // return TRUE unless you set the focus to a control
}
//////////////////////////////
系统时间
SYSTEMTIME st;
GetLocalTime(&st);
CString str,str1,str2;
str.Format(_T("%d-%d-%d %d:%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
增加时间
DWORD dwSeconds=11; //增加秒数
union
{
FILETIME ft;
ULONGLONG ut;
}t;
SystemTimeToFileTime(&st, &t.ft);
t.ut+=UInt32x32To64(dwSeconds, 10000000);
FileTimeToSystemTime(&t.ft, &st);
////////////////////////////////////
当文件存在时都不会再创建
//SP-A1用CFile 来创建文件
CFile file;
if(file.Open(L"test1.TXT",CFile::modeReadWrite))
{
MessageBox(L"Open File OK");
}
else
{
file.Open(L"test1.TXT",CFile::modeCreate | CFile::modeReadWrite);
MessageBox(L"File not exist to create");
}
/*
//SP-A2创建文件2用CreateFile创建文件
HANDLE g_hFile = 0; // Handle to the opened file
g_hFile = CreateFile(L"test.txt",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
*/
来创建文件夹/目录
if(CreateDirectory(L"\\main\\",NULL))
{
AfxMessageBox(_T("成功"));
}
else
{
AfxMessageBox(_T("失败"));
}
if(RemoveDirectory(L"\\main\\")) //目录下有文件时删除不了
{
AfxMessageBox(_T(" 删除成功"));
}
else
{
AfxMessageBox(_T("删除失败"));
}
MoveFile(L"\\text.htm",L"\\temp\\text.htm");//转移
CopyFile(L"\\temp \\text.htm",L"\\temp\\text2.htm",true);//true表示存在时是否覆盖
DeleteFile(L"\\main\\text.htm");
HANDLE g_hFile = 0; // Handle to the opened file//再创建文件
g_hFile = CreateFile(L"\\main\\test.txt",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
CloseHandle(g_hFile); //打开左就要关闭资源
if(!file.Open(L"1.htm",CFile::modeReadWrite))
{
MessageBox(L" 文件不存在将创建");
file.Open(L"1.htm",CFile::modeCreate | CFile::modeReadWrite);
}
else
MessageBox(L"文件已存在");
写文件
LPCTSTR buf=_T("welcome");
DWORD dwBytesWritten;
for(int i=0;i<100;i++)
{
WriteFile(g_hFile,buf,wcslen(buf)*2,&dwBytesWritten,NULL);
}
CloseHandle(g_hFile);
追加
char *str;
str="hello,worldsdssdsdsdsdlllp!";
FILE *file=fopen("\\text.htm","a+");
fwrite(str,1,strlen(str),file);
fclose(file);
TCHAR szExp[] = TEXT("example");
int len = _tcslen(szExp)/sizeof(szExp[0]);
LPCTSTR szExpD = TEXT("example");
用 TEXT宏定义常量字符串,在Unicode 和 ANSI编码的移植中,只需要 #define UNICODE , 而不需要更改其他源码
纯属个人意见
读文件
获取文件大小
DWORD dwSize = GetFileSize(g_hFile, NULL);
//////////////////////////////////////
注册表读写 不知道为什么 年龄读出来会是错的!
HKEY hopenKey;
long lresult=0;
DWORD dwopenstyle;
DWORD dwkeyvaluelength=0;
DWORD dwkeyvaluetype=0;
LPCTSTR keyname=L"Mysofe\\regtest";
lresult=RegCreateKeyEx(HKEY_CURRENT_USER,keyname,0,L"",0,0,NULL,&hopenKey,&dwopenstyle);
ASSERT(lresult==ERROR_SUCCESS);
LPCTSTR strkeyname=L"作者";
LPCTSTR strkeyvale=L"王五";
lresult=RegSetValueEx(hopenKey,strkeyname,0,REG_SZ,(BYTE*)strkeyvale,wcslen(strkeyvale)*2);
ASSERT(lresult==ERROR_SUCCESS);
LPCTSTR DWkeyname=L"年龄";
DWORD DWkeyvale=254;
lresult=RegSetValueEx(hopenKey,DWkeyname,0,REG_SZ,(BYTE*)DWkeyvale,sizeof(DWkeyvale));
ASSERT(lresult==ERROR_SUCCESS);
RegCloseKey(hopenKey);
////////////////////////////////////////////////////////
lresult=RegOpenKeyEx(HKEY_CURRENT_USER,keyname,0,0,&hopenKey);
TCHAR keyva[500];
ZeroMemory(keyva,500*2);
dwkeyvaluelength=500*2;
lresult=RegQueryValueEx(hopenKey,strkeyname,0,&dwkeyvaluetype,(BYTE*)keyva,&dwkeyvaluelength);
DWORD dwkeyv=0;
LPCTSTR keynl=L"年龄";
dwkeyvaluelength=sizeof(dwkeyv);
lresult=RegQueryValueEx(hopenKey,keynl,0,&dwkeyvaluetype,(BYTE*)&dwkeyv,&dwkeyvaluelength);
CString str;
str.Format(L"作者:%s 年龄:%d",keyva,dwkeyv); //注意其中的 "L"
AfxMessageBox(str);
///////////////////////////////
list control 应用
CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LST_STUDENT);
CRect rt;
pListCtrl->GetClientRect(&rt);
pListCtrl->InsertColumn(0,_T(" 编号"), LVCFMT_LEFT, rt.Width() * 0.2);
pListCtrl->InsertColumn(1,_T("姓名"), LVCFMT_LEFT, rt.Width() * 0.3);
pListCtrl->InsertColumn(2, _T("出生日期"), LVCFMT_LEFT, rt.Width() * 0.3);
pListCtrl->InsertColumn(3, _T("身高"), LVCFMT_LEFT, rt.Width() * 0.2);
// TODO: Add your control notification handler code here
for (int k=0;k<4;k++)
{ pListCtrl->InsertItem(k,_T("Test"));
//添加学生编号
pListCtrl->SetItemText(k,0,_T("Test"));
// 添加学生姓名
pListCtrl->SetItemText(k,1,_T("Test"));
pListCtrl->SetItemText(k,2,_T("Test"));
//添加学生姓名
pListCtrl->SetItemText(k,3,_T("Test"));
}
CString转为CTime(时间)
CTime m_birthday;
CString str("2008-4-15");
COleDateTime cdt;
cdt.ParseDateTime(str);
SYSTEMTIME st;
cdt.GetAsSystemTime(st);
CTime ct(st);
m_birthday = ct;
键字 Afx全局函数及MFC常见数据类型
原作者姓名 相生昌
介绍
Afx全局函数及MFC常见数据类型
正文
AfxBeginThread:开始一个新的线程
AfxEndThread:结束一个旧的线程
AfxFormatString1:类似printf一般地将字符串格式化
AfxFormatString2:类似printf一般地将字符串格式化
AfxMessageBox:类似Windows API 函数 MessageBox
AfxOuputDebugString:将字符串输往除错装置
AfxGetApp:获得application object (CwinApp派生对象)的指针
AfxGetMainWnd:获得程序主窗口的指针
AfxGetInstance:获得程序的instance handle
MFC数据类型
下面这些是和Win32程序共同使用的数据类型
BOOL:布尔值,取值为TRUE or FALSE
BSTR:32- bit 字符指针
BYTE:8-bit整数,未带正负号
COLORREF:32-bit数值,代表一个颜色值
DWORD:32- bit整数,未带正负号
LONG:32-bit整数,带正负号
LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数
LPCSTR:32-bit指针,指向一个常数字符串
LPSTR:32-bit指针,指向一个字符串
LPCTSTR:32- bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCS
LPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCS
LPVOID:32-bit指针,指向一个未指定类型的数据
LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值
UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带 正负号整数,
WNDPROC:32-bit指针,指向一个窗口函数
WORD:16-bit 整数 ,未带正负号
WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit
下面这些是MFC独特的数据类型
POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常 用于MFC collection classes(即数据处理类,如CArray)
LPCRECT:32-bit指针,指向一个不变的RECT结构
在app下
MessageBox(NULL,TEXT("hello"),TEXT("msg"),MB_OK);
在dlg
MessageBox(TEXT("hello"),TEXT("msg"),MB_OK);
格式化(LPCTSTR
MessageBox((LPCTSTR)port,TEXT("msg"),MB_OK);
这个更简单
AfxMessageBox(L"1111");
AfxMessageBox(str);
///////////////////////////////////////////////////////////////
DWORD dwDuration 转为字符串
CString str;
str.Format(L"%d",dwDuration); //注意其中的 "L"
AfxMessageBox(str);
当 dwDuration 为double 时 str.Format(L"%lf",dwDuration);
转为 char *
CString str="6565445665564546df5s65fd465afs465adf465asf465";
char *sql="";
memset( sql, 0,128);//这里的128如果改成256会出错,程序要关掉才能正常,浪费半个多小时
WideCharToMultiByte( CP_ACP, 0, str, -1, sql, 128, NULL, NULL);
已绝对OK的CString转换char *!
有来有往!!!
//////////////////////////////////////////////////////////////////////////////////
GetDlgItem(IDC_BROWSE)->EnableWindow(false); //禁止IDC_BROWSE 控件
//////////////////////////////////////////////////////////
SetTimer(1, 10, NULL); //1为ID号即 nIDEvent
afx_msg void OnTimer(UINT nIDEvent);//.h 定义
void CPCRecordDlg::OnTimer(UINT nIDEvent) //为响应函数
KillTimer(1);// 关闭
不要忘了在消息映射(BEGIN_MESSAGE_MAP)的地方加上 ON_WM_TIMER()
////////////////////////
1.IDC_COMBO 添加多项时 CTRL+回车
2.获得 COMBOX值
CString port;
GetDlgItemText(IDC_COMBO2,port);
3.在dialog 时 点击COMBOX 小三角形,设置是否下拉和下拉长度
//////
IDC_EDIT 选择 MultiLine 支持多行,WantReturn 支持回车,vertical scroll 高滚动
/////
是否CHECK被选中(复选框)
if(IsDlgButtonChecked(IDC_CHECK1)==BST_CHECKED)
关窗口
////////////////////
if (MessageBox(_T("确定要退出吗?"),_T("提示"),MB_YESNO|MB_DEFBUTTON2)==IDYES)
{
PostQuitMessage(0); //这个最常用
// ExitProcess(0);//这个关得最快
//CWnd::OnClose(); 里个关不掉
}
return TRUE; // return TRUE unless you set the focus to a control
}
//////////////////////////////
系统时间
SYSTEMTIME st;
GetLocalTime(&st);
CString str,str1,str2;
str.Format(_T("%d-%d-%d %d:%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
增加时间
DWORD dwSeconds=11; //增加秒数
union
{
FILETIME ft;
ULONGLONG ut;
}t;
SystemTimeToFileTime(&st, &t.ft);
t.ut+=UInt32x32To64(dwSeconds, 10000000);
FileTimeToSystemTime(&t.ft, &st);
////////////////////////////////////
当文件存在时都不会再创建
//SP-A1用CFile 来创建文件
CFile file;
if(file.Open(L"test1.TXT",CFile::modeReadWrite))
{
MessageBox(L"Open File OK");
}
else
{
file.Open(L"test1.TXT",CFile::modeCreate | CFile::modeReadWrite);
MessageBox(L"File not exist to create");
}
/*
//SP-A2创建文件2用CreateFile创建文件
HANDLE g_hFile = 0; // Handle to the opened file
g_hFile = CreateFile(L"test.txt",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
*/
来创建文件夹/目录
if(CreateDirectory(L"\\main\\",NULL))
{
AfxMessageBox(_T("成功"));
}
else
{
AfxMessageBox(_T("失败"));
}
if(RemoveDirectory(L"\\main\\")) //目录下有文件时删除不了
{
AfxMessageBox(_T(" 删除成功"));
}
else
{
AfxMessageBox(_T("删除失败"));
}
MoveFile(L"\\text.htm",L"\\temp\\text.htm");//转移
CopyFile(L"\\temp \\text.htm",L"\\temp\\text2.htm",true);//true表示存在时是否覆盖
DeleteFile(L"\\main\\text.htm");
HANDLE g_hFile = 0; // Handle to the opened file//再创建文件
g_hFile = CreateFile(L"\\main\\test.txt",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
CloseHandle(g_hFile); //打开左就要关闭资源
if(!file.Open(L"1.htm",CFile::modeReadWrite))
{
MessageBox(L" 文件不存在将创建");
file.Open(L"1.htm",CFile::modeCreate | CFile::modeReadWrite);
}
else
MessageBox(L"文件已存在");
写文件
LPCTSTR buf=_T("welcome");
DWORD dwBytesWritten;
for(int i=0;i<100;i++)
{
WriteFile(g_hFile,buf,wcslen(buf)*2,&dwBytesWritten,NULL);
}
CloseHandle(g_hFile);
追加
char *str;
str="hello,worldsdssdsdsdsdlllp!";
FILE *file=fopen("\\text.htm","a+");
fwrite(str,1,strlen(str),file);
fclose(file);
TCHAR szExp[] = TEXT("example");
int len = _tcslen(szExp)/sizeof(szExp[0]);
LPCTSTR szExpD = TEXT("example");
用 TEXT宏定义常量字符串,在Unicode 和 ANSI编码的移植中,只需要 #define UNICODE , 而不需要更改其他源码
纯属个人意见
读文件
获取文件大小
DWORD dwSize = GetFileSize(g_hFile, NULL);
//////////////////////////////////////
注册表读写 不知道为什么 年龄读出来会是错的!
HKEY hopenKey;
long lresult=0;
DWORD dwopenstyle;
DWORD dwkeyvaluelength=0;
DWORD dwkeyvaluetype=0;
LPCTSTR keyname=L"Mysofe\\regtest";
lresult=RegCreateKeyEx(HKEY_CURRENT_USER,keyname,0,L"",0,0,NULL,&hopenKey,&dwopenstyle);
ASSERT(lresult==ERROR_SUCCESS);
LPCTSTR strkeyname=L"作者";
LPCTSTR strkeyvale=L"王五";
lresult=RegSetValueEx(hopenKey,strkeyname,0,REG_SZ,(BYTE*)strkeyvale,wcslen(strkeyvale)*2);
ASSERT(lresult==ERROR_SUCCESS);
LPCTSTR DWkeyname=L"年龄";
DWORD DWkeyvale=254;
lresult=RegSetValueEx(hopenKey,DWkeyname,0,REG_SZ,(BYTE*)DWkeyvale,sizeof(DWkeyvale));
ASSERT(lresult==ERROR_SUCCESS);
RegCloseKey(hopenKey);
////////////////////////////////////////////////////////
lresult=RegOpenKeyEx(HKEY_CURRENT_USER,keyname,0,0,&hopenKey);
TCHAR keyva[500];
ZeroMemory(keyva,500*2);
dwkeyvaluelength=500*2;
lresult=RegQueryValueEx(hopenKey,strkeyname,0,&dwkeyvaluetype,(BYTE*)keyva,&dwkeyvaluelength);
DWORD dwkeyv=0;
LPCTSTR keynl=L"年龄";
dwkeyvaluelength=sizeof(dwkeyv);
lresult=RegQueryValueEx(hopenKey,keynl,0,&dwkeyvaluetype,(BYTE*)&dwkeyv,&dwkeyvaluelength);
CString str;
str.Format(L"作者:%s 年龄:%d",keyva,dwkeyv); //注意其中的 "L"
AfxMessageBox(str);
///////////////////////////////
list control 应用
CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LST_STUDENT);
CRect rt;
pListCtrl->GetClientRect(&rt);
pListCtrl->InsertColumn(0,_T(" 编号"), LVCFMT_LEFT, rt.Width() * 0.2);
pListCtrl->InsertColumn(1,_T("姓名"), LVCFMT_LEFT, rt.Width() * 0.3);
pListCtrl->InsertColumn(2, _T("出生日期"), LVCFMT_LEFT, rt.Width() * 0.3);
pListCtrl->InsertColumn(3, _T("身高"), LVCFMT_LEFT, rt.Width() * 0.2);
// TODO: Add your control notification handler code here
for (int k=0;k<4;k++)
{ pListCtrl->InsertItem(k,_T("Test"));
//添加学生编号
pListCtrl->SetItemText(k,0,_T("Test"));
// 添加学生姓名
pListCtrl->SetItemText(k,1,_T("Test"));
pListCtrl->SetItemText(k,2,_T("Test"));
//添加学生姓名
pListCtrl->SetItemText(k,3,_T("Test"));
}
CString转为CTime(时间)
CTime m_birthday;
CString str("2008-4-15");
COleDateTime cdt;
cdt.ParseDateTime(str);
SYSTEMTIME st;
cdt.GetAsSystemTime(st);
CTime ct(st);
m_birthday = ct;
键字 Afx全局函数及MFC常见数据类型
原作者姓名 相生昌
介绍
Afx全局函数及MFC常见数据类型
正文
AfxBeginThread:开始一个新的线程
AfxEndThread:结束一个旧的线程
AfxFormatString1:类似printf一般地将字符串格式化
AfxFormatString2:类似printf一般地将字符串格式化
AfxMessageBox:类似Windows API 函数 MessageBox
AfxOuputDebugString:将字符串输往除错装置
AfxGetApp:获得application object (CwinApp派生对象)的指针
AfxGetMainWnd:获得程序主窗口的指针
AfxGetInstance:获得程序的instance handle
MFC数据类型
下面这些是和Win32程序共同使用的数据类型
BOOL:布尔值,取值为TRUE or FALSE
BSTR:32- bit 字符指针
BYTE:8-bit整数,未带正负号
COLORREF:32-bit数值,代表一个颜色值
DWORD:32- bit整数,未带正负号
LONG:32-bit整数,带正负号
LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数
LPCSTR:32-bit指针,指向一个常数字符串
LPSTR:32-bit指针,指向一个字符串
LPCTSTR:32- bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCS
LPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCS
LPVOID:32-bit指针,指向一个未指定类型的数据
LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值
UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带 正负号整数,
WNDPROC:32-bit指针,指向一个窗口函数
WORD:16-bit 整数 ,未带正负号
WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit
下面这些是MFC独特的数据类型
POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常 用于MFC collection classes(即数据处理类,如CArray)
LPCRECT:32-bit指针,指向一个不变的RECT结构
相关阅读 更多 +