青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sunshine Alike

半完美主義

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用鏈接

留言簿(15)

積分與排名

  • 積分 - 51327
  • 排名 - 451

最新隨筆

最新評(píng)論

?

了解如何使用 windows API 函數(shù)編程后,對(duì) windows 應(yīng)用程序的大體結(jié)構(gòu)框架有初步的認(rèn)識(shí)。但是直接使用 windows API 進(jìn)行編程程序員需要自己編寫(xiě)大量代碼。像我這種從一開(kāi)始接觸程序開(kāi)發(fā)就是學(xué)習(xí)的 OO 的人來(lái)說(shuō),實(shí)在是無(wú)法忍受。從現(xiàn)在開(kāi)始,我把重點(diǎn)轉(zhuǎn)到 VC++ 的另一方面,利用 MFC 進(jìn)行和向?qū)?lái)編寫(xiě) windows 程序。

MFC Microsoft Foundation Class 是用來(lái)編寫(xiě) windows 應(yīng)用程序的 C++ 類集,它封裝了大量的 windows API 函數(shù)和 windows 控件,并且以層次結(jié)構(gòu)組織起來(lái)。使程序員在開(kāi)發(fā)時(shí)能方便的進(jìn)行代碼重用,加快開(kāi)發(fā)速度并提高代碼的可靠性。

應(yīng)該注意的是 MFC 使用C++語(yǔ)言實(shí)現(xiàn)的一個(gè)類庫(kù),但并非是進(jìn)行GUI程序設(shè)計(jì)的唯一標(biāo)準(zhǔn)。

?

OO 基礎(chǔ)或者是學(xué)習(xí)過(guò) JAVA 語(yǔ)言理解 MFC 的體系結(jié)構(gòu)會(huì)比較輕松。目前, MFC 中包含了大約 100 多個(gè)類,通過(guò)定義類對(duì)象并調(diào)用對(duì)象的成員函數(shù)來(lái)實(shí)現(xiàn)相應(yīng)的功能。

?

下面簡(jiǎn)要介紹一下 MFC 的類組織結(jié)構(gòu):

1.???????? 根類 CObject

MFC 中絕大多數(shù)類和自定義子類的根類,它提供了許多編程所需要的公共操作如:對(duì)象建立和刪除、串行化支持、對(duì)象診斷、運(yùn)行時(shí)信息以及集合類的兼容等

?

2.???????? 命令相關(guān)類 CCmdTarget

它是 CObject 的直接子類,它是 MFC 中具有消息映射屬性的基類。一般很少需要程序員直接從 CcmdTarget 直接派生新類。

?

3.???????? 線程基類 CWinThread

所有線程的基類,可以直接使用,它封裝了操作系統(tǒng)的線程化功能。

?

4.???????? 窗口應(yīng)用程序類 CWinApp

每個(gè)應(yīng)用程序有且只有一個(gè)應(yīng)用程序?qū)ο螅谶\(yùn)行程序中該對(duì)象與其它對(duì)象相互協(xié)調(diào),該對(duì)象從 CwinApp 類中派生而來(lái)。它封裝了初始化,運(yùn)行,終止應(yīng)用程序的代碼。

?

5.???????? 文檔 / 視類 CDocument/CView

文檔對(duì)象由文檔模板對(duì)象創(chuàng)建,管理應(yīng)用程序的數(shù)據(jù)。 CDocument 支持標(biāo)準(zhǔn)的文檔操作,這些操作包括文檔創(chuàng)建、下載、保存等。一個(gè)應(yīng)用程序可以操作多種文檔類型,每一種文檔類型都有特定的文檔模板( document template )。

用戶通過(guò)文檔和相關(guān)聯(lián)的視圖對(duì)象( CView object )與文檔進(jìn)行交互。一個(gè)視圖顯示文檔中的信息,并把用戶在框架窗口內(nèi)的操作轉(zhuǎn)換成對(duì)文檔操作的相應(yīng)命令。當(dāng)用戶打開(kāi)一個(gè)文檔時(shí),應(yīng)用程序?qū)嶋H上創(chuàng)建了一個(gè)視圖并把這個(gè)視圖和相應(yīng)的文檔聯(lián)系在一起。一個(gè)視圖充當(dāng)了溝通用戶和文檔對(duì)象的中間橋梁的作用。

?

6.???????? 可視對(duì)象類 CWnd

該類提供了 MFC 中所有窗口類的基本功能,它的消息映射機(jī)制隱藏了窗口函數(shù) WndProc 。一個(gè) windows 消息通過(guò)消息映射發(fā)送到相應(yīng)的 CWnd 類的 OnMessage 成員函數(shù),通過(guò)重載 OnMessage 函數(shù)來(lái)對(duì)特定的消息進(jìn)行處理。

CWnd 類有許多經(jīng)常使用的子類,如 CMenu 類, CDialog 類, CButton 類等等。

?

7.???????? 通用類

通用類提供了許多共用服務(wù),例如文件 I/O CFile 類和 CArchive 類)、異常處理( CException 類)等。

?

8.???????? OLE

OLE1.0 規(guī)范是 MS 1991 年發(fā)布的。它是處理復(fù)合文檔的一種方法: Object Linking and Embedding 技術(shù)。所謂復(fù)合文檔,就是在一個(gè)文檔中同時(shí)保存了如文本、圖像和聲音等多種不同類型的數(shù)據(jù),而這些數(shù)據(jù)又可以通過(guò)不同的應(yīng)用程序用不同的格式產(chǎn)生。

1993 年發(fā)布的 OLE2.0 是基本對(duì)象的一整套體系結(jié)構(gòu),能夠擴(kuò)展、定制和增強(qiáng)服務(wù)功能,它的理論基礎(chǔ)是 COM 技術(shù)。

此外, ActiveX 也是一種對(duì) OLE 技術(shù)的擴(kuò)展,它使 OLE 進(jìn)入 Internet Intranet

?

9.???????? ODBC

為了支持帶有 ODBC 驅(qū)動(dòng)程序的各種數(shù)據(jù)庫(kù)管理系統(tǒng), MFC 也提供了 Cdatabase CRecordset 類,用于管理數(shù)據(jù)庫(kù)的連接及其操作。

?

10.???? MFC 中全局函數(shù)和變量

MFC 中提供的全局函數(shù)和變量一般都以 Afx 開(kāi)頭,它們可以在 MFC 應(yīng)用程序的任務(wù)地方中使用,如: AfxAbort AfxMessageBox 等等。

?

在使用 VC 生成 MFC 應(yīng)用程序時(shí), IDE 會(huì)自動(dòng)生成許多代碼,以一個(gè)簡(jiǎn)單的對(duì)話框程序?yàn)槔瑢?huì)有如下幾個(gè)主要的文件:

stdafx.h/cpp ??????????????? 標(biāo)準(zhǔn)系統(tǒng)包含文件,或是常使用但不常更改的

MFCles1.h/.cpp??????????? 應(yīng)用程序類

MFCles1Dlg.h/cpp??????? 對(duì)話框類

Resource.h?????????????????? 資源頭文件,被 MFCles1.rc 所使用

?

??????????? MFC 應(yīng)用程序的一般結(jié)構(gòu)

就設(shè)計(jì)模式來(lái)看, MFC 應(yīng)用程序是一個(gè)標(biāo)準(zhǔn)的單例模式。每一個(gè)應(yīng)用程序有且僅有一個(gè)實(shí)例對(duì)象: theApp

程序執(zhí)行的基本流程,就我現(xiàn)在的理解而言:

首先應(yīng)該從在應(yīng)用程序體系結(jié)構(gòu)類中聲明的一個(gè)全局實(shí)例對(duì)象 theApp 入手(C++里的全局類對(duì)象初始化在main函數(shù)之前),在進(jìn)入CWinApp類的構(gòu)造函數(shù)之后,程序才進(jìn)入原來(lái)Windows API里的那個(gè)入口函數(shù):AfxWinMain 我們?cè)趯?xiě)MFC程序時(shí)沒(méi)有顯示的指出WinMain入口函數(shù)的位置。這個(gè)函數(shù)的定義被安置在了APPMODUL.CPP文件里(這一文件位于VS安裝目錄下的VC98目錄里的MFC源文件里)。每個(gè)app實(shí)例被構(gòu)造后,會(huì)產(chǎn)調(diào)用相應(yīng)的InitInstance函數(shù)進(jìn)行初始化。原來(lái)的注冊(cè)窗口類的工作被放在了WINCORE.CPP文件里的AfxEndDeferRegisterClass函數(shù),這里MFC已經(jīng)為我們定義好了幾種默認(rèn)的窗口類。然后就會(huì)調(diào)用CPreCreateWnd函數(shù)進(jìn)行窗口的顯示工作。最后,使用CWinThread::Run方法啟動(dòng)消息循環(huán),至此,整個(gè)窗口應(yīng)用程序就運(yùn)行起來(lái)了。windows應(yīng)用程序可以被同時(shí)多次運(yùn)行,第一次運(yùn)行完成初始化工作后,以后每次運(yùn)行程序拷貝都全調(diào)用InitInstance函數(shù)進(jìn)行初始化工作。

class CMFCles1App : public CWinApp

{

public:

?????? CMFCles1App();

// 重寫(xiě)一些父類方法

?????? public:

?????? virtual BOOL InitInstance();

// 實(shí)現(xiàn)消息映射的宏

?????? DECLARE_MESSAGE_MAP()

};

?

extern CMFCles1App theApp;// 代碼應(yīng)用程序本身

?

以一個(gè)簡(jiǎn)單的對(duì)話框程序?yàn)槔?span lang="EN-US">InitInstance函數(shù)里完成了以下工作

CMFCles1Dlg dlg;

??? m_pMainWnd = &dlg;

INT_PTR nResponse = dlg.DoModal();

第一行聲明了一個(gè)對(duì)話框類對(duì)象,第二行將其賦值給當(dāng)前應(yīng)用程序類的成員變量,這是一個(gè)指向主窗口的指針,最后一行顯示窗口。

?

了解了一點(diǎn)關(guān)于應(yīng)用程序類的知識(shí)后,再來(lái)分析剩下的與GUI有關(guān)的另一個(gè)類,這里使用一個(gè)對(duì)話框類作一點(diǎn)說(shuō)明。

同樣, MFCles1Dlg 則派生自 CDialog

class CMFCles1Dlg : public CDialog

{

public:

?????? CMFCles1Dlg(CWnd* pParent = NULL);??? // 標(biāo)準(zhǔn)構(gòu)造函數(shù)

?

protected:

?????? HICON m_hIcon;// 應(yīng)用程序圖標(biāo)的句柄

DECLARE_MESSAGE_MAP()

?

?????? // 生成的消息映射函數(shù)

?????? virtual BOOL OnInitDialog();

?????? afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

?????? afx_msg void OnPaint();

?????? afx_msg HCURSOR OnQueryDragIcon();

};

DECLARE_MESSAGE_MAP() 是一個(gè)用來(lái)定義消息映射的宏,而下面以 afx_msg 開(kāi)頭的函數(shù)都是消息的響應(yīng)函數(shù),這比起 API 里面把消息都寫(xiě)在一些 switch 語(yǔ)句中要更清楚,也方便了修改。要實(shí)現(xiàn)對(duì)話框?qū)ο⒌捻憫?yīng)還需要在類中加上這兩行

?

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

所有的消息映射函數(shù)都要寫(xiě)在這兩行之間,例如ON_WM_RBUTTONDOWN( )就定義了一個(gè)右鍵按下的消息映射。MFC已經(jīng)有了預(yù)定義好了許多消息映射函數(shù)的格式,需要查看可以參考MSDN

posted on 2009-03-25 19:02 Sunshine Alike 閱讀(557) 評(píng)論(8)  編輯 收藏 引用 所屬分類: MFC

Feedback

# re: MFC Intro 2009-03-25 20:19 擇日而亡
// 生成的消息映射函數(shù)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

這些消息映射函數(shù)與
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
。。。
END_MESSAGE_MAP()

之間的消息映射函數(shù)是怎么聯(lián)系起來(lái)的?通過(guò)函數(shù)名嗎(函數(shù)名也不一樣)?  回復(fù)  更多評(píng)論
  

# re: MFC Intro[未登錄](méi) 2009-03-26 10:32 Sunshine Alike
@擇日而亡
我感覺(jué)是這樣的,映射宏名字是MFC已經(jīng)定好了的,比如在消息映射宏之間有這一句說(shuō)明
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1,&CAboutDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

就聲明了一個(gè)按鈕(ON_BN)單擊(_CLICKED)的消息映射。這種后面的參數(shù)前一個(gè)(IDC_BUTTON1)是標(biāo)識(shí)需要響應(yīng)此消息的控件,這里是一個(gè)按鈕
后一個(gè)是當(dāng)這一消息發(fā)送到按鈕后用于響應(yīng)的函數(shù)(函數(shù)名取了地址,其實(shí)就是一個(gè)函數(shù)指針)。
例如我在對(duì)話框類成員函數(shù)CScrollBarDlg::OnBnClickedButton1里寫(xiě)上:
MessageBox(_T("ok"))
就會(huì)出現(xiàn)一個(gè)確認(rèn)消息框,如果需要進(jìn)行其它操作同理。
如果需要更換新的消息處理函數(shù),只要把函數(shù)指針換一下就可以了  回復(fù)  更多評(píng)論
  

# re: MFC Intro 2009-03-26 14:49 一秋草木
存在三種情況:
1、User define message
在MESSAGE_MAP中關(guān)聯(lián)
ON_MESSAGE()
2、MW_XXX message
MFC自身進(jìn)行映射。可以通過(guò)F12查看。如ON_WM_CREATE
#define ON_WM_CREATE() \
{ WM_CREATE, 0, 0, 0, AfxSig_is, \
(AFX_PMSG) (AFX_PMSGW) \
(static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT) > ( &ThisClass :: OnCreate)) }

3、ON_COMMAND message
在MESSAGE_MAP中關(guān)聯(lián)
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
  回復(fù)  更多評(píng)論
  

# re: MFC Intro 2009-03-26 15:31 Sunshine Alike
@一秋草木
謝謝了,正在學(xué)習(xí)中,頗有疑惑,可否指教?  回復(fù)  更多評(píng)論
  

# re: MFC Intro 2009-03-28 14:59 likenk
MFC 不算C++ 語(yǔ)言中的一個(gè)子集。
程序執(zhí)行的流程,你的理解是錯(cuò)誤的。
個(gè)人覺(jué)得學(xué)MFC,候捷的深入淺出MFC是必看的。
你的那些問(wèn)題,自己的理解,書(shū)上都給出了詳細(xì)的解答。  回復(fù)  更多評(píng)論
  

# re: MFC Intro 2009-03-28 15:19 Sunshine Alike
@likenk
謝謝,剛學(xué)不久,難免會(huì)有錯(cuò)誤的地方。
寫(xiě)子集是不太合適,是我表意不清  回復(fù)  更多評(píng)論
  

# re: MFC Intro[未登錄](méi) 2009-05-22 20:13 123
afx_msg 開(kāi)頭的代碼都是mfc自動(dòng)生成的嗎?  回復(fù)  更多評(píng)論
  

# re: MFC Intro 2009-05-22 20:36 Sunshine Alike
@123
不是的,可以自己手工寫(xiě)上去
afx_msg是一個(gè)宏,你可以在MSDN里查一下它的定義  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            美女黄毛**国产精品啪啪| 亚洲欧美精品在线观看| 欧美精品一区二区视频| 免费看成人av| 欧美不卡视频一区发布| 欧美激情精品久久久久久久变态| 久久亚洲综合色| 欧美a级片一区| 欧美日韩国产成人在线91| 欧美一区二区三区在| 国产欧美视频一区二区三区| 国产精品日韩在线播放| 国产欧美日韩综合一区在线播放| 国产女精品视频网站免费| 国产一区二区欧美日韩| 又紧又大又爽精品一区二区| 日韩视频免费观看高清在线视频 | 欧美99久久| 最新国产拍偷乱拍精品| 欧美激情精品久久久久久变态 | 亚洲精品日本| 亚洲亚洲精品在线观看| 久久久久se| 欧美日本不卡视频| 国产午夜精品美女毛片视频| 亚洲国产美女久久久久| 亚洲欧美日韩国产综合| 欧美h视频在线| 亚洲影院色在线观看免费| 久久久99爱| 国产精品日韩精品| 亚洲欧洲在线免费| 久久精品在线| 在线亚洲免费视频| 欧美成人一区二区三区| 国产亚洲精品美女| 亚洲视频免费| 欧美国产成人在线| 欧美一区二区三区啪啪| 欧美日韩一级大片网址| 亚洲国产精品久久久久婷婷老年| 香蕉免费一区二区三区在线观看| 亚洲国产日韩一区二区| 久久在线精品| 精品69视频一区二区三区| 亚洲男女自偷自拍| 亚洲卡通欧美制服中文| 欧美福利电影在线观看| 国内精品视频在线观看| 性欧美1819sex性高清| 99国产精品久久久| 欧美激情视频给我| 亚洲日本中文字幕区 | 一区二区三区视频在线播放| 蜜桃久久精品乱码一区二区| 激情亚洲一区二区三区四区| 欧美一区二区观看视频| 亚洲特黄一级片| 国产精品人成在线观看免费| 亚洲一级黄色片| 这里是久久伊人| 国产精品99一区二区| 欧美日本国产视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品有限公司| 午夜日韩在线| 亚洲男人av电影| 国产无一区二区| 久久免费午夜影院| 久久久久久久高潮| 在线免费不卡视频| 欧美激情久久久久| 欧美激情1区| 宅男66日本亚洲欧美视频| 亚洲伦理久久| 国产女主播在线一区二区| 欧美一级精品大片| 久久成年人视频| 亚洲三级网站| 亚洲色图自拍| 黄色成人在线免费| 亚洲电影免费观看高清完整版在线 | 欧美—级a级欧美特级ar全黄| 亚洲精品男同| 一区二区三区精品在线| 国产午夜亚洲精品不卡| 麻豆9191精品国产| 欧美激情久久久久| 午夜在线精品| 久久夜色精品国产亚洲aⅴ| 亚洲精品123区| 中日韩在线视频| 国内精品**久久毛片app| 亚洲成人在线视频播放| 欧美午夜视频在线| 鲁大师影院一区二区三区| 欧美精品国产| 久久九九99视频| 欧美精品v日韩精品v国产精品| 午夜国产精品视频免费体验区| 欧美一区二区三区啪啪| 一区二区av在线| 久久精品视频在线观看| 亚洲特黄一级片| 久久久久久午夜| 香蕉成人久久| 欧美绝品在线观看成人午夜影视| 久久久精品国产一区二区三区| 欧美国产日产韩国视频| 久久精品亚洲精品国产欧美kt∨| 欧美激情一区二区三区在线| 久久综合九九| 国产精品视频第一区| 亚洲激情社区| 亚洲高清久久网| 午夜宅男欧美| 午夜视频一区在线观看| 欧美麻豆久久久久久中文| 久久女同互慰一区二区三区| 欧美日在线观看| a91a精品视频在线观看| 久久资源av| 国产精品视频一二三| 亚洲精品偷拍| 日韩午夜免费| 欧美成人午夜| 免费亚洲一区二区| 国产亚洲成精品久久| 国产精品99久久久久久有的能看| 99爱精品视频| 欧美黄在线观看| 亚洲国产午夜| 99精品热6080yy久久| 欧美777四色影视在线| 免费观看亚洲视频大全| 国产一区二区三区在线观看精品| 亚洲一级二级在线| 午夜欧美理论片| 国产精品嫩草久久久久| 中文精品视频| 午夜精品福利电影| 国产精品揄拍500视频| 亚洲欧美国产三级| 久久精品人人做人人爽电影蜜月| 国产精品美女诱惑| 亚洲嫩草精品久久| 欧美专区在线观看| 国产一区二区三区奇米久涩 | 亚洲一区黄色| 欧美在线你懂的| 国产一区视频在线观看免费| 欧美一区二区三区婷婷月色| 久久久久88色偷偷免费| 国模一区二区三区| 久久性天堂网| 日韩亚洲欧美一区二区三区| 亚洲一区在线免费观看| 国产精品中文字幕欧美| 欧美在线观看网址综合| 毛片av中文字幕一区二区| 亚洲国产经典视频| 欧美日本高清视频| 亚洲女ⅴideoshd黑人| 久久综合色影院| 一区二区免费在线观看| 国产精品久久精品日日| 久久精品国产精品亚洲精品| 欧美刺激性大交免费视频| 亚洲视频一区| 国语精品中文字幕| 欧美激情精品久久久久久黑人| 亚洲私人影院| 欧美黄色成人网| 亚欧美中日韩视频| 亚洲精品1234| 国内成人精品视频| 国产精品vvv| 久久综合999| 亚洲一区影院| 亚洲日本中文字幕| 久久先锋影音av| 亚洲综合色视频| 亚洲国产精品一区二区久| 国产精品美女久久福利网站| 久久这里只有| 久久er精品视频| 亚洲视频福利| 亚洲国产美女精品久久久久∴| 久久av一区二区三区| 一区二区三区欧美在线观看| 亚洲欧美日韩一区二区在线 | 日韩亚洲欧美一区二区三区| 国产伦精品一区二区三区免费| 久久人人九九| 亚洲综合电影| 中日韩高清电影网| 最新国产精品拍自在线播放| 久久综合久久美利坚合众国| 亚洲欧美日韩中文播放| 亚洲美女少妇无套啪啪呻吟|