分享学习心得,记录学习笔记
文章:38   访问:110349
今天是:
2019年10月19日 星期六
  >   文章列表   >   文章详情

这篇博客是我在学习C++时的笔记,全部手打,转载请注明地址
更新时间:
2017/9/24 23:40:48

VC++6.0快捷键

功能快捷键
Build(建立)F7
Compile(编译)Ctrl+F7
Execute(编译+链接+运行)Ctrl+F5
ClassWizard(类向导)Ctrl+W
剪切一行Ctrl+L
插入资源(常用Dialog)Ctrl+R

VC++开发常见小问题

VC打开,VC出错,VC打开出错,VC+打开失败,VC打不开,VC错误,VC提示,VC显示,VC打开提示,VC提示错误,VC故障,VC++6.0

1.MFC控件不小心关闭了

  • 菜单栏旁边空白处右键->控件

2.不能访问类查看信息文件

  • 删除目录中的clw 和ncb文件

3.安装的vc++6.0无法运行

  • 安装完VC++6.0后
  • 在桌面上右击VC++6.0图标→属性→快捷方式→打开文件位置
  • 找到VC++6.0安装文件夹Bin下的MSDEV.EXE程序
  • 将MSDEV名字改为MSDEV1
  • 右击改好的MSDEV1→属性→兼容性,勾上“在兼容模式下运行”,选择“window XP (Service Pack 3 )确定
  • 右键MSDEV1→发送到→桌面快捷方式
  • 把桌面上原来的快捷方式删除,以后就用这个进入VC++6.0

4.打开VC++工程文件显示“不能访问类查看文件”

  • 当打开一个vc++工程时,提示“不能访问类查看信息文件 类查看信息将不可用”, 解决办法:删除掉目录中clw及ncb文件,再打开,就可以了。

5.VC++不显示类名,类名消失,类视图不显示类名

  • 打开工程所在文件夹,把里面的APS,CLW,NCB类型文件删除,再重新打开工程文件就可以了.

6.打开出错:the classwizard database....clw不存在,打开ClassWizard失败,打开ClassWizard出错*

  • 显示***.clw不存在,选择添加,在选择框里选择***这个cpp文件点击OK就行

7.VC++6.0编写的程序在其他电脑不能运行(缺少MFCxx.dll 等等)

  • 工程--设置(或者Alt+F7)--常规--Microsoft基础类-使用MFC静态链接库
  • 注意:该方法产生文件较大,如果文件未变,将Debug中内容全部删除,重新编译、链接

8.VC++6.0显示行号

  • 下载VC6LineNumberAddin.dll插件(需要注册机)
  • 使用方法:
  1. 将VC6LineNumberAddin.dll拷贝到VC++6.0安装路径的一下位置(D盘为例): D:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns
  2. 双击VC6LineNumberAddin.reg进行注册
  3. 打开VC++6.0 -> tools -> 定制 -> 附加项和宏文件 勾选VCLineNumber Developer Studio add-in
  • 如果报错!请看,解决办法: VC++安装插件失败、安装行号显示失败、添加附件失败、添加附件和宏文件失败
  1. 以管理员身份运行电脑的命令提示符
  2. 输入D: 进入D盘,再输入cd Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns进入该目录
  3. 输入regsvr32.exe VC6LineNumberAddin.dll回车
  4. 再进入VC++6.0勾选VCLineNumber Developer Studio add-in


VC++6.0基本操作

  1. 为控件关联事件
    • ctrl+w 打开ClassWizard,菜单中Message Maps中找到对应控件ID,Message中即为事件
  2. 为控件关联变量
    • ClassWizard中Member Variables找到对应ID,点击右边add veriables即可关联变量
  3. 删除创建的类
    • 先在打开项目目录,删除该类的.cpp及.h文件,再到ClassWizard中Add Class,输入相同类名字,及提示已存在,是否修复或者Remove,选择Remove即可
  4. 导出做好的界面和功能到另一个项目
    • 在ClassView中选择需要导出的类,右键Add to Gallery
    • 在新工程中选择"Project" - 插入工程到工作空间 - 文件类型选择"全部文件",打开VC安装路径(例如D:\Program Files\VC\Microsoft Visual Studio\Common\MSDev98\Gallery),选择刚才导出的文件,即可
  5. 新建类一定要以大写C开头,否则类视图不能显示

数据库操作

创建连接数据库的程序准备工作

1.ODBC驱动

  • 使用MySQL数据库:mysql_ODBCx86_x64驱动
  • 使用Access数据库:32位2010 ACCESS的ODBC驱动

2.在头文件stdafx.h中加入

	#include <afxdb.h>	// 支持数据库对象

3.用ClassWizard为数据库中的每一个表映射一个记录集(添加新类)

  1. Name : CloginSet(自定义,要求大写字母C开头)
  2. Base Class : CRecordset
  3. ODBC:StudentDB(自定义)
  4. Recordset type:Dynaset
  5. 选择一个数据库表
  • 重复操作2,为每一个表做一个记录集

数据库语法操作

1.执行SQL语句的几种方法

  • 首先创建记录集,数据库所有字段记录集中必须都有

  • Open()之后增加,修改,删除为:AddNew()、Edit()、Delete();

  • 增加、修改执行之后需要Update();

  • 多条数据使用MoveNext()将记录集下移一条

  • 执行SQL语句方法1适用查找:.

  • m_student.Open(CRecordset::snapshot,strSQL);

  • 执行方法SQL语句2适用修改:

  • m_student.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

//实例:

CStudent m_student 					//实例化数据库表的记录集

CString strSQL;						//定义存放SQL的变量
int a=1;

//--增加:
m_student.Open();					//不需执行SQL语句
m_student.AddNew();					//新增
m_student.m_name="张三";				//数据
m_student.Update();					//更新
m_student.Close();					//关闭记录集


//SQL语句(Format是一个神奇的格式化工具,后面有介绍)
strSQL.Fremat("select * from student where name='%s'",a);

//--修改 ,只能先查出来,再修改
m_student.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);//找到这一条
m_student.Edit();					//修改
m_student.m_name="张三";				//数据
m_student.Update();					//更新
m_student.Close();					//关闭记录集

//--查询
m_student.Open(CRecordset::snapshot,strSQL);//找到这一条
while(!m_student.IsEof())			//数据非空
{
	str1=m_student.m_name(); 		//取值
	m_student.MoveNext();			//记录集下移一条
}
m_student.Close();					//关闭记录集

//--删除
if(!m_student.IsEof())				//数据非空
{
	m_student.Open(CRecordset::snapshot,strSQL);//找到这一条
	m_student.Delete(); 			//执行删除
	m_student.Close();				//关闭记录集
}

//逐条删除
m_student.Open();					//可直接打开打开记录集
m_student.MoveFirst();				//将记录移到第一个
while(!m_student.IsEOF())			//判断数据是否存在
{
	m_student.Delete();				//删除当前记录
	m_student.MoveNext();			//后移记录
}

错误捕捉

try 
{
	.....
}
catch(CDBException *e )
{
	e->ReportError();
	return;
}

抓取网页

获取网页内容,访问网站,访问网页
实例

#include <stdio.h>   
#include <afxinet.h>
int main()   
{   
    CInternetSession session("HttpClient");   
    char * url = "http://www.milinger.com";
    CHttpFile *pfile = (CHttpFile *)session.OpenURL(url);   
       
    DWORD dwStatusCode;   
    pfile->QueryInfoStatusCode(dwStatusCode);   
    if(dwStatusCode == HTTP_STATUS_OK)   
    {   
        CString content;   
        CString data;   
	while (pfile->ReadString(data))   
        {   
			content  += data + "\r\n";
        }   
        content.TrimRight();   
        printf(" %s\n ", content);   
    }    
    pfile->Close();   
    delete pfile;   
    session.Close();   
    return    0 ;   
} 

获取时间

使用调用windows系统方法,显示时间,输出时间

#include <iostream>
#include <windows.h> //调用系统方法必须
int main( void ) 
{ 
SYSTEMTIME sys; 
GetLocalTime( &sys ); 
printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); 

//获取的时间数据为整型,如需转换为字符串如下

char shijian[100];
sprintf(shijian,"%4d%02d%02d%02d%02d%02d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);
CString gtime=shijian;

return 0;
}

计时

计算程序运行消耗的时间,计算时间

#include "time.h"//获取时间所需特殊头文件
#include <iostream>
using namespace std;
void main()
{
	double dur;
    clock_t start,end;
    start = clock();
	for(int i=1;i<=1000;i++)
	{
		cout<<i<<"\t";
		if(i%10==0)
		{
			cout<<endl;
		}		
	}
    end = clock();
    dur = (double)(end - start);
	cout<<"用时"<<(dur/CLOCKS_PER_SEC)<<endl;
}

字符转换

整型转字符串,数据类型转换,字符串转换

方法一:Format

//神奇的Format
CString hang;
hang.Format("%d",nIndex+1);

方法二:sprintf

#include <iostream>
void main()
{
	//获取的时间数据为整型,如需转换为字符串如下
	int a=80;
	char b[3];		//定义一个字符型变量
	sprintf(b,"%03d",a);//自动补零
	printf("%s",b);//输出080
}

方法三:itoa

#include <iostream>
void main()
{
	//获取的时间数据为整型,如需转换为字符串如下
	int a=100;
	char b[3];		//定义一个字符型变量
	itoa(a,b,10);	//a赋值给c,原数据为10进制
	printf("%s",b);
}

###强制转码 乱码,字符,转码,转换,utf8

#include <iostream>
void main()
{
	content=UTF8ToGB(content);
}
CString CShowWeb::UTF8ToGB(const char *str)
{
	CString result;
	WCHAR *strSrc;
	LPSTR szRes;

	//获得临时变量的大小
	int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
	strSrc = new WCHAR[i+1];
	MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);

	//获得临时变量的大小
	i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
	szRes = new CHAR[i+1];
	WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

	result = szRes;
	delete []strSrc;
	delete []szRes;

	return result;
}


友情链接 doywb

2018 Copyright© 米灵尔 小熊 豫ICP备15007436号-1

豫公网安备 41152302000146号