❶ 什么是MFC编程
MFC(Microsoft Foundation class)微软基本类(库),它是一个面向对象的应用程序架构。程序员利用它可以很方便搭建应用程序框架。
MFC结合了面向对象的编程技术和WINDOWS消息驱动的编程技术,并封装了WIN32API,其设计好处是:消除了WIN32API的复杂性,封装了WIN32API,统一了程序的概念,而且可扩展。
MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。VC++是Windows下开发人员使用的专业C++SDK,MFC就是挂在它之上的一个辅助软件开发包。
(1)mfc时尚编程百例扩展阅读
MFC编程优势
面对底层程序,它能很轻松的与Windows API或驱动程序结合,就是在自己的代码中直接使用API函数,而API和驱动程序的资料都是以C语言为基础的,这使得VC程序员能够更轻松的使用Windows API。
这样造成了一个很有意思的现象,即入门时VC程序员要付出更多的努力来学习,但是一旦掌握后,开发其他领域的程序或使用第三方软件时,如工业控制类的程序,由于底层的程序都是用C语言编写,反倒是VC程序员能够更快的掌握该领域的编程技术。而很多其他的编程语言甚至找不到相关的资料。
这就说明VC(MFC)实际上是一种入门困难,但是扩展学习却很轻松的语言框架。
❷ Visual C++ 6.0 时尚编程百例 这本书谁有
抱歉,我们图书馆有,我没电子版的,不过我有书后习题和程序,就是那个光盘,我做了镜像保存了起来。
❸ MFC界面编程-多窗口
你说的还是文档与视图,比如CEditView,CFormView等,还有视图的分割,这些东西都是继承CView而来的
❹ 求一本新手学习vc++6.0的可视化编程的书
VC对于对话框可视化的编程封装在MFC类库中,有一本《C++程序设计教程》中国电力出版社的,最后一章有最简单的MFC编程,之后想多了解,建议你看人民邮电出版社,同志工作室的几本书:《Visual C++ 6.0 开发技巧与实例教程》、《Visual C++ 6.0 数据库开发实例》,界面美化有一本《Visual C++ MFC时尚编程百例》
❺ MFC界面编程是什么
MFC,微软基础类(Microsoft Foundation Classe),因为Windows编程API函数庞杂,微软为简化界面方面的设计,设计了这个类库,利用C++的继承性,充分发挥代码重用的空间。
MFC编程的话一半使用VC++,编程确实简化了界面问题,但是由于对于WindowsAPI进行了封装,故而很多人无从下手,没有明显的主函数入口,没有主线。故而,建议你先熟悉Windows编程(不是要你会),同时对C++机制加深了解在使用MFC,同时,作为框架编程,它隐藏了很多技术细节,如果要有作为,真正要了解的应该是这些类的设计思维。
❻ 如何用MFC实现网络编程
一.客户端
1.创建一个DialogBased项目:CSockClient。
2.设计对话框
去掉Ok和Cancle两个按钮,增加ID_Connect(连接)、ID_Send(发送)、ID_Exit(关闭)按钮,增加ListBox控件IDC_LISTMSG和Edit控件IDC_EDITMSG,并按下表在ClassWizard中为CCSockClientDlg类添加变量。
ControlIDTypeMember
IDC_EDITMSGCEditm_MSG
IDC_LISTMSGClistBoxm_MSGS
3.CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:FD_READ、FD_WRITE、FD_ACCEPT、FD_CONNECT分别调用OnReceive、OnSend、OnAccept、OnConnect函数。
由于MFC把这些事件处理函数定义为虚函数,所以要生成一个新的C++类,以重载这些函数,做法如下:以Public方式继承CAsyncSocket类,生成新类MySock;为MySock类添加虚函数OnReceive、OnConnect、OnSend。
4.在MySock.ccp中添加以下代码
#include"CSockClient.h"
#include"CSockClientDlg.h"
5.在MySock.h中添加以下代码
public:
BOOLm_bConnected;//是否连接
UINTm_nLength;//消息长度
charm_szBuffer[4096];//消息缓冲区
6.在MySock.ccp中重载各函数
MySock::MySock()
{
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
m_bConnected=FALSE;
}
MySock::~MySock()
{
//关闭套接字
if(m_hSocket!=INVALID_SOCKET)
Close();
}
voidMySock::OnReceive(intnErrorCode)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
//下面两行代码用来获取对话框指针
CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd;
pDlg->m_MSGS.InsertString(0,m_szBuffer);
memset(m_szBuffer,0,sizeof(m_szBuffer));
CAsyncSocket::OnReceive(nErrorCode);
}
voidMySock::OnSend(intnErrorCode)
{
Send(m_szBuffer,m_nLength,0);
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);
}
voidMySock::OnConnect(intnErrorCode)
{
if(nErrorCode==0)
{
m_bConnected=TRUE;
CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd;
memcpy(m_szBuffer,"Connectedto",13);
strncat(m_szBuffer,pDlg->m_szServerAdr,
sizeof(pDlg->m_szServerAdr));
pDlg->m_MSGS.InsertString(0,m_szBuffer);
AsyncSelect(FD_READ);////提请一个“读”的网络事件,准备接收
}
CAsyncSocket::OnConnect(nErrorCode);
}
7.新建对话框IDD_Addr,用来输入IP地址和Port;生成新类CAddrDlg。增加两个Edit控件:IDC_Addr、IDC_Port按下表在ClassWizard中为CAddrDlg类添加变量。
ControlIDTypeMember
IDC_AddrCStringm_Addr
IDC_PortIntm_Port
8.在CSockClientDlg.ccp中添加代码:
#include"AddrDlg.h"
protected:
intTryCount;
MySockm_clientSocket;
UINTm_szPort;
public:
charm_szServerAdr[256];
9.双击IDD_CSOCKCLIENT_DIALOG对话框中的“连接”按钮,添加以下代码:
voidCCSockClientDlg::OnConnect()
{
m_clientSocket.ShutDown(2);
m_clientSocket.m_hSocket=INVALID_SOCKET;
m_clientSocket.m_bConnected=FALSE;
CAddrDlgm_Dlg;
//默认端口1088
m_Dlg.m_Port=1088;
if(m_Dlg.DoModal()==IDOK&&!m_Dlg.m_Addr.IsEmpty())
{
memcpy(m_szServerAdr,m_Dlg.m_Addr,sizeof(m_szServerAdr));
m_szPort=m_Dlg.m_Port;
//建立计时器,每1秒尝试连接一次,直到连上或TryCount>10
SetTimer(1,1000,NULL);
TryCount=0;
}
}
10.添加Windows消息WM_TIMER响应函数OnTimer
voidCCSockClientDlg::OnTimer(UINTnIDEvent)
{
if(m_clientSocket.m_hSocket==INVALID_SOCKET)
{
BOOLbFlag=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT);
if(!bFlag)
{
AfxMessageBox("SocketError!");
m_clientSocket.Close();
PostQuitMessage(0);
return;
}
}
m_clientSocket.Connect(m_szServerAdr,m_szPort);
TryCount++;
if(TryCount>=10||m_clientSocket.m_bConnected)
{
KillTimer(1);
if(TryCount>=10)
AfxMessageBox("ConnectFailed!");
return;
}
CDialog::OnTimer(nIDEvent);
}
11.双击IDD_CSOCKCLIENT_DIALOG对话框中的“发送”按钮,添加以下代码:
voidCCSockClientDlg::OnSend()
{
if(m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength=m_MSG.GetWindowText
(m_clientSocket.m_szBuffer,sizeof(m_clientSocket.m_szBuffer));
m_clientSocket.AsyncSelect(FD_WRITE);
m_MSG.SetWindowText("");
}
}
12.双击IDD_CSOCKCLIENT_DIALOG对话框中的“关闭”按钮,添加以下代码:
voidCCSockClientDlg::OnExit()
{
//关闭Socket
m_clientSocket.ShutDown(2);
//关闭对话框
EndDialog(0);
}
12.运行此项目,连接时输入主机名或IP均可,CAsyncSocket类会自动处理。
二.服务端
Server端的编程与Client端的类似,下面主要介绍他的Listen及Accept函数。
1.建立一个CNewSocket类,重载CAsyncSocket类的OnReceive、OnSend函数,如何进行信息的显示和发送可以参考Client程序。本例中采用将收到信息原封不动发回的方法来实现Echo功能,代码如下:
CNewSocket::OnReceive(intnErrorCOde)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
//直接转发消息
AsyncSelect(FD_WRITE);
}
CNewSocket::OnSend(intnErrorCode)
{
Send(m_szBuffer,m_nLength,0);
}
2.建立一个CMyServerSocket类,重载CAsyncSocket类的OnAccept函数代码如下
在MyServerSocket.h中声明变量
public::
CNewSocket*m_pSocket;
voidCMyServerSocket::OnAccept(intnErrorCode)
{
//侦听到连接请求,调用Accept函数
CNewSocket*pSocket=newCNewSocket();
if(Accept(*pSocket))
{
pSocket->AsyncSelect(FD_READ);
m_pSocket=pSocket;
}
else
deletepSocket;
}
3.为对话框添加一个“侦听”按钮,添加如下代码:
在CsockServerDlg.ccp中声明变量
public:
CMyServerSocketm_srvrSocket;
voidCCSockServerDlg::OnListen()
{
if(m_srvrSocket.m_hSocket==INVALID_SOCKET)
{
BOOLbFlag=m_srvrSocket.Create
(UserPort,SOCK_STREAM,FD_ACCEPT);
if(!bFlag)
{
AfxMessageBox(“SocketError!”);
M_srvrSocket.Close();
PostQuitMessage(0);
Return;
}
}
//“侦听”成功,等待连接请求
if(!m_srvrSocket。Listen(1))
{
intnErrorCode=m_srvrSocket.GetLastError();
if(nError!=WSAEWOULDBLOCK)
{
AfxMessageBox(“SocketError!”);
M_srvrSocket.Close();
❼ c语言实例的书籍
Cambridge - Numerical Recipes in C》这本书的中文版叫做《c语言数值算法程序大全(第二版)》里面基本上囊括了所有的数值算法
C++primer
C++编程思想第二版上下两卷
以上两本只是入门一下
《C++ 语言命令详解(第二版)》这本书绝对必备里面包含了所有的c语言函数
《MFC类库参考手册 (PDF,全四册)》这本作为单纯C++向MFC的过度也应该必备
我一般都使用MFC里面的类但是不少都推荐STL,所以推荐你看一下STL方面的书(但是如果你和我一样不是学这个专业的,只是专业方面需要编一些小应用软件推荐你只学MFC)
stl推荐你看一下《STL入门教程》这是一本.chm的书,里面的内容可以实时更新,囊括了所有的stl信息。
以上的书都可以从web 迅雷里下载到。
我的邮箱[email protected]
至于实例的书我觉得都没什么用,因为都太大路化了,不能解决实际问题,建议你就在网络知道里搜C++,然后看别的网友在答疑时提的问题和解决方法,效果非常好,然后试着完成一些简单小任务,赚点分,提高很快,我个人就是从给人编解一元方程地程序开始,一直到现在可以编一些稍微复杂一点的算法。
❽ 怎么学好VC++
2.计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。
3.记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。
4.C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。
6.请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。
7.对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事。C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。)
8.学习编程的秘诀是:编程,编程,再编程;
❾ 如何用MFC作界面
如果你是初学者 的话。。建议使用VC++ 6.0
然后找本VC++ 6.0方面的书。。 你就学会制作大多数界面了。。
比如 Visual C++ 6.0 时尚编程百例
之后在看高深的东西
❿ 求《Visual C++6.0 MFC 时尚编程百例》一书的CD光盘源代码
;