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

Sunshine Alike

半完美主義

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

常用鏈接

留言簿(15)

積分與排名

  • 積分 - 51329
  • 排名 - 451

最新隨筆

最新評論

?

了解如何使用 windows API 函數(shù)編程后,對 windows 應用程序的大體結(jié)構(gòu)框架有初步的認識。但是直接使用 windows API 進行編程程序員需要自己編寫大量代碼。像我這種從一開始接觸程序開發(fā)就是學習的 OO 的人來說,實在是無法忍受。從現(xiàn)在開始,我把重點轉(zhuǎn)到 VC++ 的另一方面,利用 MFC 進行和向?qū)砭帉?/span> windows 程序。

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

應該注意的是 MFC 使用C++語言實現(xiàn)的一個類庫,但并非是進行GUI程序設計的唯一標準。

?

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

?

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

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

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

?

2.???????? 命令相關類 CCmdTarget

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

?

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

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

?

4.???????? 窗口應用程序類 CWinApp

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

?

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

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

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

?

6.???????? 可視對象類 CWnd

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

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

?

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

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

?

8.???????? OLE

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

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

此外, ActiveX 也是一種對 OLE 技術的擴展,它使 OLE 進入 Internet Intranet

?

9.???????? ODBC

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

?

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

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

?

在使用 VC 生成 MFC 應用程序時, IDE 會自動生成許多代碼,以一個簡單的對話框程序為例,將會有如下幾個主要的文件:

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

MFCles1.h/.cpp??????????? 應用程序類

MFCles1Dlg.h/cpp??????? 對話框類

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

?

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

就設計模式來看, MFC 應用程序是一個標準的單例模式。每一個應用程序有且僅有一個實例對象: theApp

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

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

class CMFCles1App : public CWinApp

{

public:

?????? CMFCles1App();

// 重寫一些父類方法

?????? public:

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

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

?????? DECLARE_MESSAGE_MAP()

};

?

extern CMFCles1App theApp;// 代碼應用程序本身

?

以一個簡單的對話框程序為例,在InitInstance函數(shù)里完成了以下工作

CMFCles1Dlg dlg;

??? m_pMainWnd = &dlg;

INT_PTR nResponse = dlg.DoModal();

第一行聲明了一個對話框類對象,第二行將其賦值給當前應用程序類的成員變量,這是一個指向主窗口的指針,最后一行顯示窗口。

?

了解了一點關于應用程序類的知識后,再來分析剩下的與GUI有關的另一個類,這里使用一個對話框類作一點說明。

同樣, MFCles1Dlg 則派生自 CDialog

class CMFCles1Dlg : public CDialog

{

public:

?????? CMFCles1Dlg(CWnd* pParent = NULL);??? // 標準構(gòu)造函數(shù)

?

protected:

?????? HICON m_hIcon;// 應用程序圖標的句柄

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() 是一個用來定義消息映射的宏,而下面以 afx_msg 開頭的函數(shù)都是消息的響應函數(shù),這比起 API 里面把消息都寫在一些 switch 語句中要更清楚,也方便了修改。要實現(xiàn)對話框?qū)ο⒌捻憫€需要在類中加上這兩行

?

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

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

posted on 2009-03-25 19:02 Sunshine Alike 閱讀(557) 評論(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)系起來的?通過函數(shù)名嗎(函數(shù)名也不一樣)?  回復  更多評論
  

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

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

# re: MFC Intro 2009-03-26 14:49 一秋草木
存在三種情況:
1、User define message
在MESSAGE_MAP中關聯(lián)
ON_MESSAGE()
2、MW_XXX message
MFC自身進行映射。可以通過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中關聯(lián)
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
  回復  更多評論
  

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

# re: MFC Intro 2009-03-28 14:59 likenk
MFC 不算C++ 語言中的一個子集。
程序執(zhí)行的流程,你的理解是錯誤的。
個人覺得學MFC,候捷的深入淺出MFC是必看的。
你的那些問題,自己的理解,書上都給出了詳細的解答。  回復  更多評論
  

# re: MFC Intro 2009-03-28 15:19 Sunshine Alike
@likenk
謝謝,剛學不久,難免會有錯誤的地方。
寫子集是不太合適,是我表意不清  回復  更多評論
  

# re: MFC Intro[未登錄] 2009-05-22 20:13 123
afx_msg 開頭的代碼都是mfc自動生成的嗎?  回復  更多評論
  

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   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一区二区三区| 美女免费视频一区| 久久久精品欧美丰满| 欧美图区在线视频| 亚洲永久免费| 久久av红桃一区二区小说| 欧美少妇一区| 亚洲午夜精品17c| 99热在这里有精品免费| 欧美jjzz| 日韩亚洲欧美中文三级| 国产一区二区三区的电影| 欧美一区二区三区婷婷月色| 99国内精品久久| 欧美精品乱码久久久久久按摩| 国产精品亚洲成人| 亚洲香蕉伊综合在人在线视看| 亚洲欧美综合精品久久成人| 国产一区二区三区网站| 国产精品电影在线观看| 亚洲一区影音先锋| 亚洲激情啪啪| 欧美日韩中国免费专区在线看| 亚洲色在线视频| 亚洲国产清纯| 欧美中文字幕在线播放| 亚洲精品一区二区三区不| 亚洲永久视频| 亚洲一区精品视频| 午夜国产精品影院在线观看| 国产有码一区二区| 99这里只有精品| 中文在线不卡视频| 久久中文字幕导航| 亚洲影院色在线观看免费| 蜜臀91精品一区二区三区| 欧美偷拍一区二区| 亚洲伦理网站| 日韩亚洲欧美中文三级| 久久免费视频在线| 亚洲高清影视| 亚洲精品一区二区三区婷婷月 | 久久久精品日韩| 亚洲欧美日韩在线一区| 国产手机视频一区二区| 久久久精品午夜少妇| 久久亚洲一区二区三区四区| 国产视频精品xxxx| 老牛嫩草一区二区三区日本| 久久亚洲影院| 99人久久精品视频最新地址| 免费不卡在线视频| 亚洲欧美99| 免费在线成人av| 亚洲视频久久| 久久亚洲欧洲| 午夜在线观看欧美| 蜜桃av综合| 亚洲综合视频在线| 一本久久青青| 久久久久99| 亚洲综合二区| 麻豆91精品| 久久久久久有精品国产| 欧美日韩国产在线播放网站| 久久久久久欧美| 国产精品爱啪在线线免费观看| 免费高清在线视频一区·| 国产日产欧美一区| 99国产精品久久久久久久久久| 国产午夜精品久久久| 日韩亚洲精品电影| 亚洲欧洲精品天堂一级| 久久久久久久尹人综合网亚洲| 国产精品成人一区二区网站软件 | 欧美成人免费视频| 国语精品一区| 亚洲大片一区二区三区| 国自产拍偷拍福利精品免费一| 极品少妇一区二区三区精品视频| 激情视频一区二区| 午夜老司机精品| 国产一区二区精品久久99| 亚洲国产精品日韩| 国产一区二区成人久久免费影院| 中文国产成人精品久久一| 日韩视频在线你懂得| 国产精品美女久久久免费| 一区二区三区免费在线观看| 亚洲电影在线看| 久久精品国产久精国产一老狼| 亚洲欧美一级二级三级| 1204国产成人精品视频| 久久伊人免费视频| 亚洲欧洲综合另类| 国产精品久久久久久久久果冻传媒 | av不卡在线看| 国产精品日日摸夜夜摸av| 亚洲精品在线视频| 在线亚洲欧美| 久久精品91久久久久久再现| 欧美日韩一区二区三区四区在线观看 | 欧美一区二区三区四区在线观看 | 亚洲区一区二| 国产午夜亚洲精品理论片色戒| 美女视频黄免费的久久| 亚洲一区视频在线| 蜜桃av一区二区三区| 亚洲欧美国产毛片在线| 99精品国产一区二区青青牛奶 | 久久午夜视频| 欧美在线免费观看| 国产精品久久久久久超碰| 久久久www成人免费精品| 日韩视频在线一区| 亚洲精品一线二线三线无人区| 欧美电影在线观看完整版| 久久久精品国产免费观看同学| 欧美亚洲视频在线观看| 亚洲午夜女主播在线直播| 一本色道久久综合一区| 亚洲精品国久久99热| 亚洲人成人一区二区在线观看| 影音先锋亚洲视频| 最新日韩中文字幕| 正在播放亚洲| 亚洲一二三四区| 欧美一区二区视频在线观看| 久久精品人人做人人综合| 久久夜色精品国产| 亚洲第一区在线| 亚洲精品在线视频观看| 亚洲男人av电影| 久久精品99无色码中文字幕| 蜜桃av一区二区| 国产精品盗摄久久久| 黄色精品免费| 欧美亚洲视频一区二区| 欧美jizz19性欧美| 一区二区高清在线观看| 欧美有码在线观看视频| 欧美日韩在线播放三区| 在线视频国产日韩| 亚洲欧美日韩区| 亚洲国产婷婷综合在线精品| 亚洲欧美国产毛片在线| 欧美黑人多人双交| 黄网动漫久久久| 久久一区二区三区av| 中文亚洲字幕| 欧美性视频网站| 亚洲一区二区三区在线播放| 洋洋av久久久久久久一区| 一区二区三区偷拍| 免费成人高清在线视频| 久久久久国产精品厨房| 亚洲国产小视频在线观看| 久久久人人人| 国产主播精品在线| 欧美一级视频免费在线观看| 免费欧美日韩| 久久福利资源站| 国产在线精品成人一区二区三区 | 日韩一级成人av| 欧美一级片一区| 欧美一级播放| 亚洲国产成人久久| 亚洲盗摄视频| 欧美日韩亚洲一区二区| 99精品热视频只有精品10| 亚洲伦理自拍| 国产视频一区在线观看一区免费| 亚洲欧美综合国产精品一区| 欧美一区二区在线播放| 亚洲国产视频一区二区| 亚洲性人人天天夜夜摸| 中文精品视频一区二区在线观看| 一区二区三区三区在线| 欧美一级大片在线观看| 国产一区在线免费观看| 一本一本久久| 亚洲欧洲一二三| 欧美一级电影久久| 亚洲欧美激情视频| 欧美黄色小视频| 蜜臀av一级做a爰片久久 | 亚洲国产成人av在线| 国产精品视频免费一区| 最新热久久免费视频| 在线观看日韩专区| 久久黄色网页| 久久久久久久久久久久久久一区| 国产精品爽爽ⅴa在线观看| 国产精品毛片| 欧美一级欧美一级在线播放| 久久婷婷国产麻豆91天堂| 亚洲人体偷拍|