❶ 什麼是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光碟源代碼
;