VC++中小知识点

原创 2007年10月08日 20:17:00

VC++ Format: keyword blue  Number 紫色 CString 灰色 函数 棕色                     ID_ 菜单命令项 
IDR_ 主菜单资源、工具栏、快捷键资源  IDD_ 对话框资源 IDC_ 控件和光标 IDS_ 字符串 IDP_ 提示信息对话框的字符串 
Construct 创建一个对象; Attributes 属性; Operations 操作;  
Parameters  参数;  connected socket 连接插件;  abstraction 抽象;  inherited 继承;
2007.8.8 E:/wang/通讯实验/单向通讯/server12/serverDlg.cpp  
1.
:: 是作用域运算符. 类名:: 函数   
2.
(in MESSAGE MAP,前无)ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend) 
单击函数(ID,函数) 
3.
(调用时,前无)GetDlgItemText(IDC_EDIT,strSendText);      (ID,字符串)
Specifies the actual number of bytes copied to the buffer, not including the terminating null character.
The value is 0 if no text is copied.    内容从 IDC_EDIT 拷贝到 字符串  。
指定了被拷贝到缓冲区中的实际字节数,不包括结尾的null字符。如果没有拷贝文本,则返回0。
4.
通信流程:
服务器:(需要定义两个对象,一个需创建)创建一个,绑定,侦听,循环接受(产生另一个对象=Accept),发送,关闭。
客户端:创建一个对象,要求连接,接收数据,关闭。
用的CSocket 类是CAsyncSocket 类的子类。

(类 创建对象,前无)CSocket chatsend;    
Constructs a CSocket object. After construction, you must call the Create member function.
创建一个csocket对象chatsend. 创建后,你必须调用创建成员函数!!!

chatsend.Create(nPort,SOCK_STREAM)    SOCK_STREAM: 面向连接
chatsend.Bind(nPort,IPaddress)
chatsend.Listen(5(默认)); 
chatsend.Accept(server);     server 是另一个 CSocket 对象!!!
server.Send(strSendText,1000,NULL);    (String,nBufLen,) nBufLen:The length of the data in lpBuf(缓冲器) in bytes.
chatreceive.Receive(sreceive,1024,0);  
server.Close();

Operations
Accept  Accepts a connection on the socket.
Close   Closes the socket.
Connect Establishes a connection to a peer socket.
Listen  Establishes a socket to listen for incoming connection requests.
Receive Receives data from the socket.
ReceiveFrom     Receives a datagram and stores the source address.
Send    Sends data to a connected socket.  

2007.8.9
在名.cpp中  :
BOOL CServerApp::InitInstance()        //在这里 添加 重要的 初始化
{
 if (!AfxSocketInit())                                     //程序
 {
  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);           //程序
  return FALSE;                                     //程序 
 }
AfxSocketInit() 
Call this function in your CWinApp::InitInstance override to initialize Windows Sockets. 在 初始化 Windows 插件之前。

AfxMessageBox(IDP_SOCKETS_INIT_FAILED)      IDP_SOCKETS_INIT_FAILED???怎么 在哪 添加 ?

2007.8.17 !!!
C++中的虚函数 http://blog.csdn.net/guoqlee/archive/2007/08/17/1748364.aspx 
一、 基本概念
首先,C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,
对消息的处理方式可能随接手消息的对象而变"的处理方式被称为多态性。"在某个基类上建立起来的类的层次构造中,
可以对任何一个派生类的对象中的同名过程进行调用,而被调用的过程提供的处理可以随其所属的类而变。
"虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。

 二、 虚函数的定义与派生类中的重定义
class 类名{public:       virtual 成员函数说明;}     class 类名:基类名{   public:  virtual 成员函数说明;}     
三、 注意:多态不是函数重载 !!!!

函数重载
C++提供了对函数重载的支持
两个以上的函数,取相同的函数名,但是 ! 型参的个数或者类型不同 ! 编译器根据实参和型参的类型及个数的最佳匹配,
自动确定调用哪一个函数,这就是函数的重载。
常见错误:  (1)编译器不能以型参名来区分函数          (2)编译器不能以返回值来区分函数

2007.8.20
!! 1.  !!!
常指针 是指向常量的指针(Pointer to Constant data)。就是规定指针 !所指向的 !内容! 不可以通过指针的间接引用来改变。
常指针说明的格式是:   const <类型名> *<指针名>;      例如: const int *ptint;

指针常量               (Pointer constant)。        指针本身的内容是个常量,不可以改变,只可指向一个 地址。
指针常量声明的格式是:  <类型名> *const <指针名>(=<初值>);   例如: char ch, *const ptch=&ch;

!!! const 右边是什么,什么的内容 就不可以改变 !!!

当对象不改变时 用 const 保护,当改变时要用 通过引用传递。 

2.
动态内存是在程序执行时才可以申请、使用和释放的内存。也就是存放动态数据的内存区域。存放动态数据的区域称为“堆”,动态内存也称为堆内存。
动态内存不能通过变量名来使用,而只能通过指针来使用。

C++中通过运算符new申请动态内存,运算符delete释放动态内存。
动态内存申请运算符new的使用格式:
 类型名 *指针名=new 类型名;
运算的结果:如果申请成功,返回指定类型内存的地址;如果申请失败,返回NULL指针。
动态内存使用完毕后,要用delete运算来释放。delete运算符使用格式:  delete <指针名>;后必须有:指针名=0;  
                                                                           只应删除 一次 指针,即只用一次  delete !!!
内存泄漏是指动态申请的内存空间,没有正常释放,但是也不能继续使用的情况。
让指针指向一个已经释放的空间,即所谓的指针悬挂(Dangling)。
3.
网桥
  网桥是局域网和局域网之间的互联设备。
集线器(Hub)是局域网的一种连接设备,双绞线通过集线器将网络中的计算机连接在一起,完成网络的通信功能。
              其中一个端口和网络连接,其他的端口和网络中的计算机连接。
交换机:   代替集线器完成局域网的扩展。 交换机中每一个用户独占信道,传输速度更快,安全性更好。
路由器
    广域网上的主要的互联设备,主要用于广域网的接续。
4.
IPv6协议规定用128二进制数表示IP地址,          
16字节地址表示成用冒号(:)隔开的8组,每组4个16进制位,例如,8000:0000:0000:0000:0123:4567:89AB:CDEF
5.
函数形参为(类型 *p )指针,则实参为 (&对象)。

2007.8.21
1.
引用:类型 &别名=变量名(已定义); 只是换个名字,完全一样,操作时可 当换回来 想。两个地址完全相同。

!2.  !!!
消息中:AfxMessageBox();??    函数中:MessageBox();???   

2007.8.28
捕获错误:      try
  {    ...  //可能出错的代码  }
  catch (_com_error &e)
  {    AfxMessageBox(e.Description()); //发生错误的处理代码 }  

2007.8.31 //真快啊
CString.Format:(祥解)它通过格式操作使任意类型的数据转换成一个字符串.
http://blog.tom.com/blog/read.php?bloggerid=177050&blogid=47194

2007.9.2
1.
在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置、
大小、一些用户设置的数据等等,Win32 编程中,那就是使用注册表或者 ini 文件(Profile)来保存少量数据。
http://blog.sina.com.cn/s/blog_4171e80d010008qm.html
2.
被框架调用,用来改变和验证对话框的数据。在这个函数中一般是将控件和某些变量关联,当在其它地方改变量的值,
  通过UpdateData 进行双向交换。如:
UpdateData();//将控件的值传给变量
num3=m_num1+m_num2;//分别为控件的变量
UpateData(FALSE);//将变量的值传给控件
3.
数字转 CString:UINT/int t=12345; CString str;  str.Format("%d",t);   
把int或者UINT转换成char *  。那么用itoa, 就是int to char的意思。
CString-> char *p:  CString s;  char *p;    p= (LPTSTR)(LPCTSTR)s;
4.
CString成员函数
http://wbymcs51.blog.bokee.net/bloggermodule/blog_viewblog.do?id=569200

2007.9.3
LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等。LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。
LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
2007.9.4
1.数据库基础:
从本质上说,数据库就是一种不断增长的复杂的数据组织结构。
在MySQL数据库中,用于保存数据记录的结构被称为数据表。而每一条数据记录则是由更小的数据对象,即数据类型组成。
因此,总体来说,一个或多个数据类型组成一条数据记录,一条或多条数据记录组成一个数据表,一个或多个数据表组成一个数据库。
(1)数据库查询实例:     //由clientid 查询 clientnumber ,存到CString对象tempNumber  
初始定义:   _RecordsetPtr m_data; _variant_t  v; m_data.CreateInstance(__uuidof(Recordset)); char sql[512];CString sql,tempNumber;
SQL语句:    sprintf("select clientnumber from tb_clientinfor where clientid='%s'",clientid);
             //或者CString sql; sql.Fomate("select clientnumber from tb_clientinfor where clientid='%s'",clientid);
查询:       m_data=ado.GetRecordset(sql);
      if(!m_data->GetadoEOF())      //是否为空
      {  v=m_data->GetCollect("clientnumber"); //从查询中,取得clientnumber暂存在 v
         tempNumber=(char*)_bstr_t(v);      } //存到 tempNumber,若存为文本格式:tempNumber=(TCHAR*)(_bstr_t)v;
(2)数据库插入实例:     //  
初始定义:   _RecordsetPtr m_data; _variant_t  v; m_data.CreateInstance(__uuidof(Recordset)); char sql[512];
             sprintf(sql,"insert into tb_clientonline values('%s','%s','%s',NULL,NULL//NULL必须够数)",clientnumber,strIP,online//按顺序);
             try{ m_data=ado.ExecuteSQL(_bstr_t(sql2));  }
      catch (_com_error & e)
      { char m_szTmp[1024] ;
                sprintf(m_szTmp, "执行==>%s<==, 数据库操作失败,错误原因:%s/n",sql2, LPCTSTR(e.Description())); 
                AfxMessageBox(m_szTmp);   }
2.
switch,case 中不能有定义,即使for(int i=0;i<3;i++) 中也不行
3.
产生随机数:例子0-9:   重要:srand((unsigned)time(0));   int iRand = rand();
   if (iRand<10)     iRand+=48;
   else       iRand=(iRand%10)+48;
5.
try{}catch{} 时,try中正常执行,但却执行了catch{}中语句,不应该啊????
2007.9.21
!!!!!!!使用CSocket编程第一步准备:
(1)在StdAfx.h中 写:#include <Afxsock.h>
(2)BOOL C工程名App::InitInstance()
{第一句即为: if (!AfxSocketInit())   //自己添加
 { //AfxMessageBox(IDP_SOCKETS_INIT_FAILED);    //什么玩意???
   return FALSE;   }
6.
switch case 中case下的语句必须为:{。。。 break;}每个下一个{}!!!

1.
http://www.ttadd.com/diannao/HTML/6694.html

如何自定义消息
1) 手工定义消息,可以这么写
#define WM_MY_MESSAGE(WM_USER+100),
MS 推荐的至少是 WM_USER+100

(2)写消息处理函数,用
WPARAM,LPARAM返回LRESULT.
LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam)

{
temp目录: Use "GetTempPath"
//加入你的处理函数 irectory"
}
2.
我需要在我的程序中设置全局变量,以使文档中的所有类都能访问。我应该吧它放到哪儿?
把 该 变 量 放 到 该 应 用 程 序 类 的 头 文 件 中 的 attribute 处。然 后,在 程 序 的 任 何 地 方,
你 都 可 以 用 下 面 的 方 法 来 访 问 该 变 量:

    CMyApp *app = (CMyApp *)AfxGetApp();
    app->MyGlobalVariable = ...
3.
CString 删除空格:str.TrimRight(' '); str.TrimLeft(' ');
4.
产生随机数:例子0-9:   重要:srand((unsigned)time(0));   int iRand = rand();
   if (iRand<10)     iRand+=48;
   else       iRand=(iRand%10)+48;

VC++程序设计基础认识

虽然接触程序设计有几年了,但是一些基础知
  • xw20084898
  • xw20084898
  • 2014-04-25 14:15:03
  • 843

江苏计算机二级基础知识整理

  • 2012年10月10日 20:00
  • 100KB
  • 下载

代码中小知识点

1.ArrayList.toArray(new T[size]);如果size大于ArrayList的大小的话,后面用null进行填充。...
  • yao123long
  • yao123long
  • 2016-04-01 16:36:59
  • 135

Hibernate中小知识点

1. 映射文件fetch属性取值join和select的区别 如果你用的是hibernate的话,就有可能是: 映射文件中有fetch属性,它有两个可选值:join和select 这个属性决定了你在...
  • oathevil
  • oathevil
  • 2012-09-02 20:25:28
  • 483

mysql 中小知识点

ENGINE=InnoDB 指定表的引擎为InnoDB类型,该类型表支持事务。 MySQL默认采用MyISAM引擎,该类型表不支持事务,仅存储数据,有点在于读写很快。 -- ENGINE=In...
  • u012843189
  • u012843189
  • 2016-08-02 17:14:42
  • 105

Android开发中小知识点记录

一、开启蓝牙的方式 1、startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));//会跳到设置界面 2、startActivityF...
  • Ming825569719
  • Ming825569719
  • 2016-09-09 11:31:53
  • 155

5个vc++中小项目

  • 2008年06月13日 07:27
  • 6.98MB
  • 下载

CASS 9.1中小比例单机版for2004

  • 2014年06月18日 21:38
  • 26.97MB
  • 下载

Android 开发过程中小知识点汇总

一丶慨述 很容易发现开发中有时候会百度,谷歌,有时候相同的小知识点搜了几遍,本文用于记录开发中的小知识点 二丶正文 1.限制EditText显示输入字符串位数 edt_reportSalesAmou...
  • DT235201314
  • DT235201314
  • 2017-05-22 21:17:35
  • 642

busness_managment

  • 2009年05月14日 14:56
  • 249KB
  • 下载
收藏助手
不良信息举报
您举报文章:VC++中小知识点
举报原因:
原因补充:

(最多只允许输入30个字)