2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1 緒言1</b></p><p>  2方案的論證及選擇1</p><p>  3 重要結(jié)構(gòu)和函數(shù)1</p><p>  3.1 函數(shù)gethostname1</p><p>  3.2 函數(shù)g

2、ethostbyname2</p><p>  3.3 函數(shù)inet_ntoa2</p><p>  3.4 函數(shù)TextOut3</p><p>  3.5 函數(shù)memcpy3</p><p>  3.6 WSAData結(jié)構(gòu)3</p><p><b>  4 設(shè)計(jì)過程5</b><

3、;/p><p>  4.1 新建對(duì)話框5</p><p>  4.2 添加控件5</p><p>  4.3 添加成員變量6</p><p>  4.4 為控件添加映射消息6</p><p>  4.5 定義函數(shù)7</p><p>  4.6 添加代碼7</p><p

4、>  4.7 設(shè)計(jì)icon并運(yùn)行程序10</p><p>  5 程序運(yùn)行結(jié)果及分析10</p><p><b>  6 心得體會(huì)11</b></p><p><b>  參考文獻(xiàn)11</b></p><p>  附錄1 sanjinDlg.cpp程序12</p>

5、<p>  附錄2 頭文件sanjinDlg.h18</p><p><b>  1 緒言</b></p><p>  Microsoft Visual C++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開發(fā)多種程序等優(yōu)點(diǎn),而且通過

6、簡單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。它以擁有“語法高亮”,IntelliSense(自動(dòng)完成功能)以及高級(jí)除錯(cuò)功能而著稱。比如,它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)花費(fèi)的時(shí)間,在大型軟件計(jì)劃上尤其顯著。</p

7、><p>  在網(wǎng)絡(luò)編程中,像獲取主機(jī)名和IP地址這樣的基本應(yīng)用是必不可少的,這些基本的應(yīng)用通過適當(dāng)改變可以很容易地應(yīng)用到網(wǎng)絡(luò)軟件中。因此,獲取主機(jī)名和IP地址是用現(xiàn)實(shí)意義的。</p><p><b>  2方案的論證及選擇</b></p><p>  方案一:用Windows API進(jìn)行設(shè)計(jì)。Windows API可以很容易獲取主機(jī)名和IP地址,

8、但是在窗口設(shè)計(jì)是卻顯得比較繁瑣。</p><p>  方案二:用MFC進(jìn)行設(shè)計(jì)。用MFC設(shè)計(jì)可以更容易的設(shè)計(jì)顯示界面,在獲取主機(jī)名和IP地址方面也比不復(fù)雜。</p><p><b>  綜上,選擇方案二。</b></p><p><b>  3 重要結(jié)構(gòu)和函數(shù)</b></p><p>  3.1 函

9、數(shù)gethostname</p><p><b>  函數(shù)原型為:</b></p><p>  int gethostname(char *name,int namelen);</p><p>  其中,參數(shù)name是一個(gè)指向?qū)⒁娣胖鳈C(jī)名的緩沖區(qū)的指針,namelen用于指定緩沖區(qū)的長度。該函數(shù)把本地主機(jī)名存放入由name參數(shù)指定的緩沖區(qū)中。

10、返回的主機(jī)名是一個(gè)以NULL結(jié)束的字符串。主機(jī)名的形式取決于Windows Sockets實(shí)現(xiàn)-它可能是一個(gè)簡單的主機(jī)名,或者是一個(gè)域名。然而,返回的名字必定可以在gethostbyname()和WSAAsyncGetHostByName()中使用。如果沒有錯(cuò)誤發(fā)生,gethostname()返回0。否則它返回SOCKET_ERROR。</p><p>  3.2 函數(shù)gethostbyname</p>

11、;<p><b>  函數(shù)原型為:</b></p><p>  struct hostent* gethostbyname(const char* addr);</p><p>  其中,addr為指向主機(jī)名的指針,它一般有函數(shù)gethostname返回。該函數(shù)返回對(duì)應(yīng)于給定主機(jī)名的包含主機(jī)名字和地址信息的hostent結(jié)構(gòu)指針,該結(jié)構(gòu)的格式如下:&

12、lt;/p><p>  structhostent {</p><p>  char*h_name;</p><p>  char**h_aliases;</p><p>  inth_addrtype;</p><p>  inth_length;</p><p>  char**h_addr_l

13、ist;</p><p>  #define h_addr h_addr_list[0]</p><p><b>  };</b></p><p>  其中,h_name是地址的正式名稱;h_aliases是空字節(jié)-地址的預(yù)備名稱的指針;h_addrtype地址類型,通常是AF_INET;h_length地址的比特長度;h_addr_list是

14、零字節(jié)-主機(jī)網(wǎng)絡(luò)地址指針;網(wǎng)絡(luò)字節(jié)順序;h_addr - h_addr_list中的第一地址。</p><p>  需要注意的是gethostbyname()函數(shù)屬于WinSock API庫,而在使用WinSock API之前,必須調(diào)用WSA-Startup函數(shù),只有該函數(shù)成功返回(表示應(yīng)用程序與WinSock庫成功地建立起連接),應(yīng)用程序才可以調(diào)用其他Windows Sockets DLL中的函數(shù)。當(dāng)程序?qū)⒁Y(jié)

15、束時(shí),又必須調(diào)用WSACleanup 函數(shù)進(jìn)行清理工作,以便釋放其占用的資源。WSACleanup 函數(shù)用來結(jié)束Windows Sockets DLL的使用。</p><p>  3.3 函數(shù)inet_ntoa</p><p><b>  函數(shù)原型為:</b></p><p>  char FAR * inet_ntoa( struct in_

16、addr in);</p><p>  該函數(shù)將一個(gè)IP轉(zhuǎn)換成一個(gè)互聯(lián)網(wǎng)標(biāo)準(zhǔn)點(diǎn)分格式的字符串,in為一個(gè)表示Internet主機(jī)地址的結(jié)構(gòu)。如果正確,返回一個(gè)字符指針,指向一塊存儲(chǔ)著點(diǎn)分格式IP地址的靜態(tài)緩沖區(qū)(同一線程內(nèi)共享此內(nèi)存);錯(cuò)誤,返回NULL。</p><p>  3.4 函數(shù)TextOut</p><p><b>  函數(shù)原型為:</b

17、></p><p>  BOOL TextOut(</p><p><b>  HDC hdc,</b></p><p>  int nXStart,</p><p>  int nYStart, </p><p>  LPCTSTR lpString,</p><p&g

18、t;  int cbString </p><p><b>  );</b></p><p>  Hdc:設(shè)備環(huán)境的句柄</p><p>  nXStart: 指定用于字符串對(duì)齊的基準(zhǔn)點(diǎn)的邏輯X坐標(biāo)。</p><p>  nYStart:指定用于字符串對(duì)齊的基準(zhǔn)點(diǎn)的邏輯Y坐標(biāo)。</p><p> 

19、 lpString:指向?qū)⒈焕L制字符串的指針。此字符串不必為以\0結(jié)束的,因?yàn)閏bString中指定了字符串的長度。</p><p>  cbString:指定了字符串的長度。</p><p>  該函數(shù)用當(dāng)前選擇的字體、背景顏色和正文顏色將一個(gè)字符串寫到指定位置。如果函數(shù)調(diào)用成功,返回值為非零值。如果函數(shù)調(diào)用失敗,返回值為0。</p><p>  3.5 函數(shù)me

20、mcpy</p><p><b>  函數(shù)原型為:</b></p><p>  void *memcpy(void *dest, const void *src, size_t n);</p><p>  該函數(shù)從源src所指的內(nèi)存地址的起始位置開始拷貝n個(gè)字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中。</p><p>

21、  3.6 WSAData結(jié)構(gòu)</p><p><b>  結(jié)構(gòu)原型為:</b></p><p>  structWSAData {</p><p>  WORD wVersion;</p><p>  WORD wHighVersion;</p><p>  char szDescript

22、ion[WSADESCRIPTION_LEN+1];</p><p>  char szSystemStatus[WSASYSSTATUS_LEN+1];</p><p>  unsigned short iMaxSockets;</p><p>  unsigned short iMaxUdpDg;</p><p>  char

23、 *lpVendorInfo;</p><p><b>  };</b></p><p>  wVersion:Windows Sockets DLL期望調(diào)用者使用的Windows Sockets規(guī)范的版本。 高位字節(jié)存儲(chǔ)副版本號(hào), 低位字節(jié)存儲(chǔ)主版本號(hào),可以用WORD MAKEWORD(BYTE,BYTE ) 返回這個(gè)值,例如:MAKEWORD(1,1)<

24、/p><p>  wHighVersion:這個(gè)DLL能夠支持的Windows Sockets規(guī)范的最高版本。通常它與wVersion相同。</p><p>  szDescription:以null結(jié)尾的ASCII字符串,Windows Sockets DLL將對(duì)Windows Sockets實(shí)現(xiàn)的描述拷貝到這個(gè)字符串中,包括制造商標(biāo)識(shí)。文本(最多可以有256個(gè)字符)可以包含任何字符,但是要

25、注意不能包含控制字符和格式字符,應(yīng)用程序?qū)ζ渥羁赡艿氖褂梅绞绞前阉赡鼙唤財(cái)啵╋@示在在狀態(tài)信息中。</p><p>  szSystemStatus:以null結(jié)尾的ASCII字符串,Windows Sockets DLL把有關(guān)的狀態(tài)或配置信息拷貝到該字符串中。Windows Sockets DLL應(yīng)當(dāng)僅在這些信息對(duì)用戶或支持人員有用時(shí)才使用它們,它不應(yīng)被作為szDescription域的擴(kuò)展。</p&g

26、t;<p>  iMaxSockets:單個(gè)進(jìn)程能夠打開的socket的最大數(shù)目。Windows Sockets的實(shí)現(xiàn)能提供一個(gè)全局的socket池,可以為任何進(jìn)程分配;或者它也可以為socket分配屬于進(jìn)程的資源。這個(gè)數(shù)字能夠很好地反映Windows Sockets DLL或網(wǎng)絡(luò)軟件的配置方式。應(yīng)用程序的編寫者可以通過這個(gè)數(shù)字來粗略地指明Windows Sockets的實(shí)現(xiàn)方式對(duì)應(yīng)用程序是否有用。例如,X Windows

27、服務(wù)器在第一次啟動(dòng)的時(shí)候可能會(huì)檢查iMaxSockets的值:如果這個(gè)值小于8,應(yīng)用程序?qū)@示一條錯(cuò)誤信息,指示用戶重新配置網(wǎng)絡(luò)軟件(這是一種可能要使用szSystemStatus文本的場合)。顯然無法保證某個(gè)應(yīng)用程序能夠真正分配iMaxSockets個(gè)socket,因?yàn)榭赡苡衅渌黈indowsSockets應(yīng)用程序正在使用。</p><p>  iMaxUdpDg:Windows Sockets應(yīng)用程序能夠發(fā)送

28、或接收的最大的用戶數(shù)據(jù)包協(xié)議(UDP)的數(shù)據(jù)包大小,以字節(jié)為單位。如果實(shí)現(xiàn)方式?jīng)]有限制,那么iMaxUdpDg為零。在Berkeley sockets的許多實(shí)現(xiàn)中,對(duì)于UDP數(shù)據(jù)包有個(gè)固有的限制(在必要時(shí)被分解),大小為8192字節(jié)。Windows Sockets的實(shí)現(xiàn)可以對(duì)碎片重組緩沖區(qū)的分配作出限制。對(duì)于適合的WindowsSockets 實(shí)現(xiàn),iMaxUdpDg的最小值為512。注意不管iMaxUdpDg的值是什么,都不推薦你發(fā)回

29、一個(gè)比網(wǎng)絡(luò)的最大傳送單元(MTU)還大的廣播數(shù)據(jù)包。(Windows Sockets API 沒有提供發(fā)現(xiàn)MTU的機(jī)制,但是它不會(huì)小于512個(gè)字節(jié))。WinSock2.0版中已被廢棄。</p><p>  lpVendorInfo:指向銷售商的數(shù)據(jù)結(jié)構(gòu)的指針。這個(gè)結(jié)構(gòu)的定義(如果有)超出了WindowsSockets規(guī)范的范圍。WinSock2.0版中已被廢棄。</p><p><b

30、>  4 設(shè)計(jì)過程</b></p><p><b>  4.1 新建對(duì)話框</b></p><p>  啟動(dòng)Visual C++ 6.0,新建對(duì)話框應(yīng)用程序,工程名為sanjin,對(duì)話框標(biāo)題改為“主機(jī)名和IP地址”。</p><p><b>  4.2 添加控件</b></p><p&

31、gt;  刪除掉對(duì)話框模板上的控件,添加新控件,如下表所示。</p><p>  表1 控件及其屬性一覽表</p><p>  添加完控件后的對(duì)話框模板如下圖所示。</p><p>  圖1 添加完控件后的對(duì)話框模板圖</p><p>  4.3 添加成員變量</p><p>  打開ClassWizard對(duì)話框的

32、Member Variables標(biāo)簽,為下列控件添加成員變量。如下表所示。</p><p>  表2 控件及變量屬性</p><p>  4.4 為控件添加映射消息</p><p>  選擇MFC ClassWizard對(duì)話框的Message Maps標(biāo)簽,為以下控件添加映射消息。如下表所示。</p><p>  表3 控件映射消息&l

33、t;/p><p><b>  4.5 定義函數(shù)</b></p><p>  在sanjinDlg.h中定義一個(gè)Draw函數(shù)。</p><p><b>  public:</b></p><p>  void Draw();</p><p><b>  4.6 添加代碼&

34、lt;/b></p><p>  在sanjinDlg.cpp文件中添加代碼,實(shí)現(xiàn)功能。</p><p><b>  添加程序代碼如下:</b></p><p>  void CSanjinDlg::OnButton1() </p><p><b>  {</b></p><

35、;p>  // TODO: Add your control notification handler code here</p><p>  Invalidate();</p><p><b>  }</b></p><p>  void CSanjinDlg::OnButton2() </p><p><

36、b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  OnOK();</b></p><p><b>  }</b></p><p>  void CSa

37、njinDlg::OnCheck1() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_Chk1=!m_Chk1;//初始化</p><p><b>  Dra

38、w();</b></p><p><b>  }</b></p><p>  void CSanjinDlg::Draw()</p><p><b>  {</b></p><p>  CClientDC dc(this);</p><p>  int heigh

39、t;</p><p>  CFont font;</p><p>  height=75;</p><p>  if(m_Chk1)</p><p>  font.CreateFont(20,10,0,0,FW_NORMAL,false,false,false,</p><p>  GB2312_CHARSET,OUT

40、_DEVICE_PRECIS,</p><p>  CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,</p><p>  DEFAULT_PITCH,"宋體");</p><p><b>  else</b></p><p>  font.CreateFont(20,10,0,

41、0,FW_NORMAL,false,false,false,</p><p>  GB2312_CHARSET,OUT_DEVICE_PRECIS,</p><p>  CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,</p><p>  DEFAULT_PITCH,"楷體_GB2312");</p><

42、;p>  CRect rect(15,25,336,276);</p><p>  dc.FillSolidRect(&rect,RGB(215,210,206));</p><p>  dc.SelectObject(&font);</p><p>  dc.SetBkMode(TRANSPARENT);</p><p&g

43、t;  //初始化:如果不初始化,以下代碼將無法執(zhí)行</p><p>  WSAData data;</p><p>  if(WSAStartup(MAKEWORD(1,1),&data)!=0)</p><p><b>  {</b></p><p>  dc.TextOut(25,45,"初始化錯(cuò)

44、誤,無法獲取主機(jī)信息...");</p><p><b>  }</b></p><p>  char host[255];</p><p><b>  //獲取主機(jī)名</b></p><p>  if(gethostname(host,sizeof(host))==SOCKET_ERRO

45、R)</p><p><b>  {</b></p><p>  dc.TextOut(25,45,"無法獲取主機(jī)名");</p><p><b>  }</b></p><p><b>  else</b></p><p><

46、b>  {</b></p><p>  dc.TextOut(25,45,"本機(jī)主機(jī)名為:");</p><p>  dc.TextOut(75,75,host);</p><p><b>  }</b></p><p>  //獲取計(jì)算機(jī)IP:gethostbyname也需要初始化

47、(上面已初始化)</p><p>  struct hostent *p=gethostbyname(host);</p><p><b>  if(p==0)</b></p><p><b>  {</b></p><p>  dc.TextOut(25,45,"無法獲取計(jì)算機(jī)主機(jī)名及I

48、P...");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  //本機(jī)IP:利用循環(huán),輸出本機(jī)所有IP</p><p>  for(int i=

49、0;p->h_addr_list[i]!=0;i++)</p><p><b>  {</b></p><p>  struct in_addr in;</p><p>  memcpy(&in,p->h_addr_list[i],sizeof(struct in_addr));</p><p>  

50、dc.TextOut(25,height+(i+1)*height/3,"塊網(wǎng)卡IP為:");//除以3只能正常</p><p>  //顯示兩個(gè)IP,要想顯示多個(gè)IP地址還需添加一個(gè)計(jì)算IP地址個(gè)數(shù)的循環(huán)</p><p>  dc.TextOut(75,height+(i+1)*height*2/3,inet_ntoa(in));</p><p&g

51、t;<b>  }</b></p><p><b>  }</b></p><p>  WSACleanup();</p><p><b>  }</b></p><p>  程序說明:函數(shù)OnButton1()調(diào)用Invalidate()實(shí)現(xiàn)擦除功能,函數(shù)OnButton1

52、()調(diào)用OnOK()實(shí)現(xiàn)退出功能,OnCheck1()作為觸發(fā)主要功能程序Draw()運(yùn)行的函數(shù)。Draw()函數(shù)定義了一個(gè)CClientDC類的對(duì)象dc,和一個(gè)Cfont類的對(duì)象font。定義對(duì)象dc來實(shí)現(xiàn)將所獲得的主機(jī)名和IP地址顯示在對(duì)話框上,定義對(duì)象font來設(shè)置字體樣式。</p><p>  4.7 設(shè)計(jì)icon并運(yùn)行程序</p><p>  在Resource View中擦除原

53、icon,為自己設(shè)計(jì)一個(gè)Icon。然后將程序編譯并鏈接,運(yùn)行程序,查看運(yùn)行結(jié)果。</p><p>  5 程序運(yùn)行結(jié)果及分析</p><p>  程序運(yùn)行的最終效果如圖所示。</p><p>  圖2 最終效果圖</p><p>  點(diǎn)擊運(yùn)行后,調(diào)用Draw()函數(shù),Draw()函數(shù)調(diào)用gethostname()和getbyhostnam

54、e()得到本地主機(jī)名和IP地址,并調(diào)用TextOut()顯示在窗口的指定位置。</p><p><b>  6 心得體會(huì)</b></p><p>  本次課設(shè)實(shí)現(xiàn)了獲取本地主機(jī)名和IP地址的功能,并用基本對(duì)話框顯示所獲得的結(jié)果,可以說是成功的。有一個(gè)小缺點(diǎn)是要使程序顯示出主機(jī)名和IP地址是通過點(diǎn)擊復(fù)選框,這不符合通常我們都是點(diǎn)擊按鈕的習(xí)慣。但總體上我以為是成功的。&l

55、t;/p><p>  為了做這個(gè)課設(shè),我確實(shí)花了一番心思。雖說有C語言的基礎(chǔ),但實(shí)際上從我拿到題目查資料到最終做出來,我有一種從零學(xué)起的感覺。這主要是因?yàn)閂C++內(nèi)容太多,一時(shí)之間難以接受這么多。當(dāng)然,這也從另一方面反映了VC++功能之強(qiáng)大,對(duì)這一點(diǎn)還從我查資料的過程中有所體會(huì)。這次課設(shè)最大的收獲可以說是更進(jìn)一步了解了什么是學(xué)習(xí),最大的進(jìn)步是學(xué)會(huì)了如何面對(duì)問題。以前遇到問題,我通常都會(huì)變得心浮氣躁,甚至?xí)搿傲T工”,

56、但這一次卻沒有。這一次的課設(shè)過程還是我的一個(gè)新認(rèn)識(shí)的落實(shí)。說實(shí)話,我是這學(xué)期才明白“鉆研”是什么意思,我覺得所謂“鉆研”其實(shí)和“死磕”很有點(diǎn)像,只不過“鉆研”需要心平氣和,因?yàn)椴恍钠綒夂途筒蝗菀组L久。我覺得我這次的課設(shè)就有點(diǎn)在和VC++“死磕”的感覺。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]管皓,高永麗.別樣詮釋—一個(gè)Visual C

57、++老鳥10年學(xué)習(xí)與開發(fā)心得.北京:北京航空航天大學(xué)出版社,2012.11</p><p>  [2]梁海英.Visual C++程序設(shè)計(jì).北京:清華大學(xué)出版社,2013</p><p>  [3]唐文超.Visual C++網(wǎng)絡(luò)編程.北京:清華大學(xué)出版社,2013</p><p>  [4]趙永發(fā),劉莉莉.Visual C++入門經(jīng)典.北京:機(jī)械工業(yè)出版社,201

58、3</p><p>  [5]張水波,董志鵬.Visual C++網(wǎng)絡(luò)大講堂.北京:清華大學(xué)出版社,2013</p><p>  附錄1 sanjinDlg.cpp程序</p><p>  // sanjinDlg.cpp : implementation file</p><p><b>  //</b><

59、/p><p>  #include "stdafx.h"</p><p>  #include "sanjin.h"</p><p>  #include "sanjinDlg.h"</p><p>  #ifdef _DEBUG</p><p>  #defin

60、e new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////

61、////////////////////////////////////////</p><p>  // CSanjinDlg dialog</p><p>  CSanjinDlg::CSanjinDlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CSanjinDlg::IDD, pParent)</p>

62、;<p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CSanjinDlg)</p><p>  m_Chk1 = FALSE;</p><p>  //}}AFX_DATA_INIT</p><p>  // Note that LoadIcon does not re

63、quire a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b>  }</b></p><p>  void CSanjinDlg::DoDataExchange(CDataExcha

64、nge* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CSanjinDlg)</p><p>  DDX_Check(pDX, IDC_CHECK1, m_Chk1);</p&

65、gt;<p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CSanjinDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CSanjinDlg)</p><p>  ON_WM_PAINT

66、()</p><p>  ON_WM_QUERYDRAGICON()</p><p>  //添加消息響應(yīng)函數(shù),為每個(gè)消息處理函數(shù)加入一個(gè)入口</p><p>  ON_BN_CLICKED(IDC_BUTTON1, OnButton1)</p><p>  ON_BN_CLICKED(IDC_BUTTON2, OnButton2)</

67、p><p>  ON_BN_CLICKED(IDC_CHECK1, OnCheck1)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  //////////////////////////////////////////////////////////////////

68、///////////</p><p>  // CSanjinDlg message handlers</p><p>  BOOL CSanjinDlg::OnInitDialog()</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p>

69、<p>  // Set the icon for this dialog. The framework does this automatically</p><p>  // when the application's main window is not a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set b

70、ig icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  // TODO: Add extra initialization here</p><p>  return TRUE; // return TRUE unless you set the focus to a c

71、ontrol</p><p><b>  }</b></p><p>  // If you add a minimize button to your dialog, you will need the code below</p><p>  // to draw the icon. For MFC applications using

72、 the document/view model,</p><p>  // this is automatically done for you by the framework.</p><p>  void CSanjinDlg::OnPaint() </p><p><b>  {</b></p><p>  

73、if (IsIconic())</p><p><b>  {</b></p><p>  CPaintDC dc(this); // device context for painting</p><p>  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</p&

74、gt;<p>  // Center icon in client rectangle</p><p>  int cxIcon = GetSystemMetrics(SM_CXICON);</p><p>  int cyIcon = GetSystemMetrics(SM_CYICON);</p><p>  CRect rect;</p&g

75、t;<p>  GetClientRect(&rect);</p><p>  int x = (rect.Width() - cxIcon + 1) / 2;</p><p>  int y = (rect.Height() - cyIcon + 1) / 2;</p><p>  // Draw the icon</p>&l

76、t;p>  dc.DrawIcon(x, y, m_hIcon);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  CDialog::OnPaint();</p>

77、<p><b>  }</b></p><p><b>  }</b></p><p>  // The system calls this to obtain the cursor to display while the user drags</p><p>  // the minimized win

78、dow.</p><p>  HCURSOR CSanjinDlg::OnQueryDragIcon()</p><p><b>  {</b></p><p>  return (HCURSOR) m_hIcon;</p><p><b>  }</b></p><p> 

79、 void CSanjinDlg::OnButton1() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  Invalidate();//設(shè)置無效</p><p><b

80、>  }</b></p><p>  void CSanjinDlg::OnButton2() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  OnOK()

81、;//退出</p><p><b>  }</b></p><p>  void CSanjinDlg::OnCheck1() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code her

82、e</p><p>  m_Chk1=!m_Chk1;//初始化</p><p>  Draw();//調(diào)用函數(shù)</p><p><b>  }</b></p><p>  void CSanjinDlg::Draw()</p><p><b>  {</b></p&g

83、t;<p>  CClientDC dc(this);//定義對(duì)象dc以調(diào)用CClientDC中的成員函數(shù)</p><p>  int height;</p><p>  CFont font;//定義對(duì)象font以設(shè)置字體</p><p>  height=75;</p><p>  if(m_Chk1)</p>

84、<p>  font.CreateFont(20,10,0,0,FW_NORMAL,false,false,false,</p><p>  GB2312_CHARSET,OUT_DEVICE_PRECIS,</p><p>  CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,</p><p>  DEFAULT_PITCH,&q

85、uot;宋體");</p><p><b>  else</b></p><p>  font.CreateFont(20,10,0,0,FW_NORMAL,false,false,false,</p><p>  GB2312_CHARSET,OUT_DEVICE_PRECIS,</p><p>  CLIP

86、_DEFAULT_PRECIS,DEFAULT_QUALITY,</p><p>  DEFAULT_PITCH,"楷體_GB2312");</p><p>  CRect rect(15,25,336,276);//畫矩形框</p><p>  dc.FillSolidRect(&rect,RGB(215,210,206));//設(shè)置矩

87、形框的顏色</p><p>  dc.SelectObject(&font);</p><p>  dc.SetBkMode(TRANSPARENT);</p><p>  //初始化:如果不初始化,以下代碼將無法執(zhí)行</p><p>  WSAData data;</p><p>  if(WSAStartu

88、p(MAKEWORD(1,1),&data)!=0)</p><p>  //在使用WinSock API之前,必須調(diào)用WSA-Startup函數(shù),</p><p>  //只有該函數(shù)成功返回(表示應(yīng)用程序與WinSock庫成功地建立起連接),</p><p>  //應(yīng)用程序才可以調(diào)用其他Windows Sockets DLL中的函數(shù)。當(dāng)程序?qū)⒁Y(jié)束時(shí),&

89、lt;/p><p>  //又必須調(diào)用WSACleanup 函數(shù)進(jìn)行清理工作,以便釋放其占用的資源。</p><p><b>  {</b></p><p>  dc.TextOut(25,45,"初始化錯(cuò)誤,無法獲取主機(jī)信息...");//調(diào)用TextOut函數(shù)</p><p><b>  }

90、 </b></p><p>  char host[255];</p><p><b>  //獲取主機(jī)名</b></p><p>  if(gethostname(host,sizeof(host))==SOCKET_ERROR)</p><p>  //把本地主機(jī)名存放入由host參數(shù)指定的緩沖區(qū)中&l

91、t;/p><p><b>  {</b></p><p>  dc.TextOut(25,45,"無法獲取主機(jī)名");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>

92、;  {</b></p><p>  dc.TextOut(25,45,"本機(jī)主機(jī)名為:");</p><p>  dc.TextOut(75,75,host);</p><p><b>  }</b></p><p>  //獲取計(jì)算機(jī)IP:gethostbyname也需要初始化(上面已

93、初始化)</p><p>  struct hostent *p=gethostbyname(host);</p><p>  //返回對(duì)應(yīng)于給定主機(jī)名的包含主機(jī)名字和地址信息的hostent結(jié)構(gòu)指針</p><p><b>  if(p==0)</b></p><p><b>  {</b><

94、;/p><p>  dc.TextOut(25,45,"無法獲取計(jì)算機(jī)主機(jī)名及IP...");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

95、  //本機(jī)IP:利用循環(huán),輸出本機(jī)所有IP</p><p>  for(int i=0;p->h_addr_list[i]!=0;i++)</p><p><b>  {</b></p><p>  struct in_addr in;</p><p>  memcpy(&in,p->h_addr_

96、list[i],sizeof(struct in_addr));</p><p>  //從源p->h_addr_list[i]所指的內(nèi)存地址的起始位置</p><p>  //開始拷貝sizeof(struct in_addr)個(gè)字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中</p><p>  dc.TextOut(25,height+(i+1)*heigh

97、t/3,"IP地址為:");</p><p>  dc.TextOut(75,height+(i+1)*height*2/3,inet_ntoa(in));</p><p>  //函數(shù)inet_ntoa將一個(gè)IP轉(zhuǎn)換成一個(gè)互聯(lián)網(wǎng)標(biāo)準(zhǔn)點(diǎn)分格式的字符串</p><p><b>  }</b></p><p&

98、gt;<b>  }</b></p><p>  WSACleanup();//來結(jié)束Windows Sockets DLL的使用。</p><p><b>  }</b></p><p>  附錄2 頭文件sanjinDlg.h</p><p>  // sanjinDlg.h : heade

99、r file</p><p><b>  //</b></p><p>  #if !defined(AFX_SANJINDLG_H__351C02BB_27DD_410A_968A_AE76FDF3C7CE__INCLUDED_)</p><p>  #define AFX_SANJINDLG_H__351C02BB_27DD_410A_96

100、8A_AE76FDF3C7CE__INCLUDED_</p><p>  #if _MSC_VER > 1000</p><p>  #pragma once</p><p>  #endif // _MSC_VER > 1000</p><p>  ////////////////////////////////////////

101、/////////////////////////////////////</p><p>  // CSanjinDlg dialog</p><p>  class CSanjinDlg : public CDialog</p><p><b>  {</b></p><p>  // Construction<

102、;/p><p><b>  public:</b></p><p>  CSanjinDlg(CWnd* pParent = NULL);// standard constructor</p><p>  void Draw();//定義一個(gè)Draw函數(shù)</p><p>  // Dialog Data</p>

103、<p>  //{{AFX_DATA(CSanjinDlg)</p><p>  enum { IDD = IDD_SANJIN_DIALOG };</p><p>  BOOLm_Chk1;//IDC_CHECK1對(duì)應(yīng)的變量</p><p>  //}}AFX_DATA</p><p>  // ClassWizard ge

104、nerated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CSanjinDlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support</p>&

105、lt;p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  HICON m_hIcon;</p><p>  // Generated message map functions</p><p>  //{{A

106、FX_MSG(CSanjinDlg)</p><p>  virtual BOOL OnInitDialog();</p><p>  afx_msg void OnPaint();</p><p>  afx_msg HCURSOR OnQueryDragIcon();</p><p>  afx_msg void OnButton1();

107、//添加的控件對(duì)應(yīng)的函數(shù)</p><p>  afx_msg void OnButton2();</p><p>  afx_msg void OnCheck1();</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };&

108、lt;/b></p><p>  //{{AFX_INSERT_LOCATION}}</p><p>  // Microsoft Visual C++ will insert additional declarations immediately before the previous line.</p><p>  #endif // !defined(A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論