第一篇:第三章 單文檔應用程序
第三章 單文檔應用程序
在本學習情境中主要學習:(1)單文檔應用框架(2)文檔與視圖
3.1 MFC消息處理
3.1.1事件驅動程序設計
事件驅動程序設計是一種全新的程序設計方法,它不是由事件的順序來控制,而是由事件的發生來控制,而這種事件的發生是隨機的、不確定的,并沒有預定的順序,這樣就允許程序的的用戶用各種合理的順序來安排程序的流程。對于需要用戶交互的應用程序來說,事件驅動的程序設計有著過程驅動方法無法替代的優點。它是一種面向用戶的程序設計方法,它在程序設計過程中除了完成所需功能之外,更多的考慮了用戶可能的各種輸入,并針對性的設計相應的處理程序。它是一種“被動”式程序設計方法,程序開始運行時,處于等待用戶輸入事件狀態,然后取得事件并作出相應反應,處理完畢又返回并處于等待事件狀態。它的框圖如圖1所示:
圖1事件驅動程序模型
3.1.2 MFC的消息處理
在DOS應用程序下,可以通過getchar()、getch()等函數直接等待鍵盤輸入,并直接向屏幕輸出。而在Windows下,由于允許多個任務同時運行,應用程序的輸入輸出是由Windows來統一管理的。
Windows操作系統包括三個內核基本元件:GDI, KERNEL ,USER。其中GDI(圖形設備接口)負責在屏幕上繪制像素、打印硬拷貝輸出,繪制用戶界面包括窗口、菜單、對話框等。系統內核KERNEL支持與操作系統密切相關的功能:如進程加載,文本切換、文件I/O,以及內存管理、線程管理等。USER為所有的用戶界面對象提供支持,它用于接收和管理所有輸入消息、系統消息并把它們發給相應的窗口的消息隊列。消息隊列是一個系統定義的內存塊,用于臨時存儲消息;或是把消息直接發給窗口過程。每個窗口維護自己的消息隊列,并從中取出消息,利用窗口函數進行處理。框圖2如下:
圖2 消息驅動模型
從消息的發送途徑上看,消息分兩種:隊列消息和非隊列消息。隊列消息送到系統消息隊列,然后到線程消息隊列;非隊列消息直接送給目的窗口過程。
Windows維護一個系統消息隊列(System message queue),每個GUI線程有一個線程消息隊列(Thread message queue)。
鼠標、鍵盤事件由鼠標或鍵盤驅動程序轉換成輸入消息并把消息放進系統消息隊列,例如WM_MOUSEMOVE、WM_LBUTTONUP、WM_KEYDOWN、WM_CHAR等等。Windows每次從系統消息隊列移走一個消息,確定它是送給哪個窗口的和這個窗口是由哪個線程創建的,然后,把它放進窗口創建線程的線程消息隊列。線程消息隊列接收送給該線程所創建窗口的消息。線程從消息隊列取出消息,通過Windows把它送給適當的窗口過程來處理。
除了鍵盤、鼠標消息以外,隊列消息還有WM_PAINT、WM_TIMER和WM_QUIT。這些隊列消息以外的絕大多數消息是非隊列消息。
通過消息映射,我們可以把消息和它的消息處理函數聯系起來。VC++為我們提供了Class Wizard 來為用戶添加一個消息映射關系,而用戶只需編寫該消息發生響應的函數即可。
從View菜單中選擇“ClassWizard”命令,便可調出如圖3所示的ClassWizard對話框,它一共分為五個選項卡,依次分別是消息映射、成員變量、自動化、ActiveX事件和類信息。最常用的是消息映射和成員變量兩個選項卡,如果程序中使用了ActiveX控件,那么還需要使用ActiveX事件選項卡來添加事件處理函數,類信息選項卡可用來了解各個類的文件名、基類和資源等信息,自動化選項卡只有在編寫OLE自動化服務器時才用得著。下面我們就來看看消息映射和成員變量兩個選項卡的特點和用途。
消息映射選項卡主要用途是為選中的類添加消息處理函數。其中,Projects組合框用于選擇Workspace中的一個工程,Class name組合框用于選擇工程中的一個類。Objects IDs中列出了所選擇的類的名稱及屬于它的一系列ID,對于CXXXView類來說,列出的ID基本上都是菜單命令,對于一個對話框類來說,列出的ID多數對應著對話框模板中的控件。
從Objects IDs選擇不同的類名或ID后,右邊的Messages列表框中的內容也會跟著改變,選中類名時,Messages列表框中會顯示出所有該類能處理的標準Windows消息以及該類可以重載的成員函數,選中一個ID時,Messages列表框中會顯示出這個ID對應的對象(菜單選項或控件)所能引發的命令消息和通知消息。在Messages列表框中選擇一條消息(或一個可以重載的成員函數)后,如果該消息還沒有相應的消息處理函數(或還未重載該成員函數),那么ClassWizard對話框右上角的Add Function按鈕就會變為有效,提示我們可以添加一個消息處理函數(或重載該成員函數),按下Add Function按鈕后,ClassWizard就會在所選的類中添加一個處理函數(為一個ID添加處理函數時,還會彈出一個對話框,要求輸入函數名),并在Member funtions列表框中顯示出剛添加的函數,在這個列表框中雙擊該函數名后,ClassWizard對話框將自動關閉,文本編輯器會定位在函數的實現代碼處,這些代碼及它在類定義中的聲明都是由ClassWizard自動生成的。
圖 3Class wizard 對話框
Member functions列表框并沒有列出類的所有成員函數,而只是列出了消息處理函數和重載的成員函數,其中每個函數的左邊都有一個小圖標,如果小圖標為“W”字樣,表示該函數是一個消息處理函數,除了Add function按鈕外,消息映射選項卡中還有三個按鈕,其中Delete Function用來刪除一個消息處理函數或重載的成員函數,但是此按鈕只能刪除函數在類定義中的聲明,函數的實現代碼還需要手工來刪除;Edit Code按鈕的用途相當于在Member functions中雙擊一個成員函數;Add Class按鈕則可用于向工程中添加一個新的類。3.1.3 文檔與視圖
先利用Appwizard 來新建一個單文檔工程。在SDI框架程序中,主要包含四個類:
主框架類:CMainFrame用于管理主程序窗口,從MFC 類的CFrameWnd派生。
應用類:CXXXApp負責初始化及程序結束前的整理工作,從MFC 類的CWinApp派生。
文檔類:CXXXDoc負責存放程序數據和在磁盤上讀寫數據,從MFC 類的CDocment派生。
視圖類:CXXXView負責數據的顯示及處理用戶的輸入,從MFC類的CView派生。用戶對話框類:CAboutDlg負責用戶對話框的設置,從MFC類的CDialog類派生。
文檔是存儲的對象.文檔類負責數據的維護,包括數據的讀取、存儲和修改,并將更改的數據通知相關視圖,另外它還負責將數據存儲到文件及從文件中讀取數據。
文檔是一種數據源,數據源有很多種,最常見的是磁盤文件,但它不必是一個磁盤文件,文檔的數據源也可以來自串行口、網絡或攝像機輸入信號等。文檔對象負責來自所有數據源的數據的管理。
視圖類的作用是與用戶交互。視圖對象負責對保存在文擋對象中的數據以某種方式進行顯示,并接受用戶的輸入,將這些輸入交文擋類進行處理。
視圖是數據的用戶窗口,為用戶提供了文檔的可視的數據顯示,它把文檔的部分或全部內容在窗口中顯示出來。視圖還給用戶提供了一個與文檔中的數據交互的界面,它把用戶的輸入轉化為對文檔中數據的操作。每個文檔都會有一個或多個視圖顯示,一個文檔可以有多個不同的視圖。比如,在Excel電子表格中,我們可以將數據以表格方式顯示,也可以將數據以圖表方式顯示。一個視圖既可以輸出到窗口中,也可以輸出到打印機上。
圖 文檔與視圖關系
3.1.4 鼠標消息舉例
我們先通過一個例子來說明如何用class wizard 來實現捕獲鼠標消息,進行消息映射和定義消息處理函數.利用class wizard來設置消息選項。選擇ClassName中的CXXXView,選擇其中相對應的WM_LBUTTONDOWN,雙擊選中的消息,單擊Edit Code 按紐,如圖4所示,并增加相關代碼,如圖5所示。
圖4 增加鼠標消息映射
圖5 增加代碼
圖6 運行結果
3.1.4鍵盤消息舉例
鍵盤的輸入是從掃描碼開始的,windows鍵盤驅動程序將這些掃描碼轉換成為與硬件無關的形式,即虛擬鍵碼.WM_CHAR:此消息在鍵被按下時產生,通常用于處理非打印鍵中的按鍵消息.圖7 在工程中增加相關變量
圖8 增加變量Text
圖9 初始化變量為空
圖10 增加鍵盤的消息影射
圖11 編寫Onchar處理函數
圖12 輸出接收到的字符
圖13 運行結果 為了能夠實現輸入字符的換行功能,在CXXXDoc類中增加一個用來計算行數的成員變量m_Line,如圖14所示,并初始化變量m_Line,如圖15所示。
圖 增加成員變量
圖15 初始化成員變量
為了保存字符串行的數據,定義一個字符串列表變量m_strList,如圖16所示。
圖16 定義字符串列表變量
修改CXXXView類中的OnChar函數,如下所示。
void CSDIView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){ // TODO: Add your message handler code here and/or call default
CSDIDoc *pDoc=GetDocument();ASSERT_VALID(pDoc);
} if(nChar==VK_RETURN){ pDoc->m_Line++;pDoc->m_strList.AddTail(pDoc->Text);pDoc->Text.Empty();
Invalidate();} else {
pDoc->Text+=nChar;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
int nLineHeight=tm.tmHeight+tm.tmExternalLeading;
dc.TextOut(0,pDoc->m_Line*nLineHeight,pDoc->Text);} CView::OnChar(nChar, nRepCnt, nFlags);為了保證能夠將CXXXDoc類中m_strList的數據輸出出來,增加一個DrawText函數,如圖17所示和圖18所示。
圖17 在CXXXDoc類中增加成員函數
圖18 增加DrawText函數
實現CXXXDoc類中的DrawText函數,如下所示。void CSDIDoc::DrawText(CDC *pDC){
TEXTMETRIC tm;
CString str;int line=0;
pDC->GetTextMetrics(&tm);
int nLineHeight=tm.tmHeight+tm.tmExternalLeading;
POSITION pos=m_strList.GetHeadPosition();for(;pos!=NULL;m_strList.GetNext(pos)){
str=m_strList.GetAt(pos);
pDC->TextOut(0,line*nLineHeight,str);
line++;} } 修改CXXXView類中的OnDraw函數,如下所示。
void CSDIView::OnDraw(CDC* pDC){ CSDIDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);
pDoc->DrawText(pDC);
// TODO: add draw code for native data here }
第二篇:Windows應用程序——畫圖教案
《Windows應用程序—畫圖》教案
西民中初一 鄒政宏
教材分析
本節內容目的是使學生了解和掌握信息技術的基礎知識,具有使用計算機工具進行簡單圖形繪制和圖形處理的基礎能力。
學情分析
授課對象為七年級學生。學生經過計算機基礎知識和windows操作系統的學習,對計算機基本操作有了一定的了解。通過本節課的學習,大部分學生能用畫圖程序進行簡單的圖形繪制和圖像處理,提高學生應用信息技術的能力。
教學目標
1.知識與技能
(1)學會啟動與退出畫圖程序。
(2)認識畫圖窗口的組成和畫圖工具箱中的工具。
(3)能用畫圖程序畫一幅圖畫。
2.過程與方法
(1)通過Windows 7附件程序的學習,讓學生體驗學習應用程序的方法。
(2)通過畫圖程序的學習,培養學生創造性探索和解決問題的能力。
3.情感、態度與價值觀
培養學生良好的學習習慣和學習興趣。
教學重點與難點
重點:
1、“畫圖”程序的啟動。
2、熟悉“畫圖”程序工具箱中的工具。
難點:“畫圖”程序中工具的使用。
教學準備
多媒體課件、圖片。
教學方法
講授法、演練法、自主探究法
課時安排
一課時
教學過程
1、啟動“畫圖”程序
問題:如何打開“畫圖”程序?(1)學生動手探索。(2)教師講解并演示啟動“畫圖”程序的操作步驟。
步驟:開始→程序→附件→畫圖
啟動后的屏幕窗口如下圖所示:
2、認識“畫圖”程序
(1)標題欄:它包含了程序的名稱和圖畫的命名。
(2)菜單欄:有六個下拉式菜單。
(3)工具箱:有許多繪圖工具,繪畫時任選一項工具,選擇工具后,講鼠標移到繪圖區,指針就變成工具的形狀。
(4)繪圖區:在該區作圖、繪畫。
(5)調色板:左面是交叉重疊的矩形,左上角的矩形顯示當前前景色,右下角矩形顯示當前背景色,右邊有28種顏色供選擇。
3、認識“畫圖”工具
(1)重點講解
橡皮工具:可以擦除圖面中不想要的部分
涂色工具:用前景色對封閉區填充。
噴槍工具:該工具由鼠標的拖動速度決定的,速度越們慢,斑點越密,速度越快,斑點越稀少。
文字工具:利用文字工具可以在圖畫上寫字。
直線工具:利用它可以畫直線、水平線、垂直線。
曲線工具:利用它可以畫單彎頭曲線、雙彎頭曲線。
鉛筆工具:可以在繪圖區內任意畫線。
橢圓工具:可以畫一些垂直或水平的橢圓環。
(2)簡單講解
剪切工具、選定工具、取色工具、放大鏡、刷子工具、矩形、多邊形 圓角矩形。
存盤:選擇“文件”菜單下的“保存”命令, 將所繪制的圖畫保存磁盤上。退出畫圖程序:
方法一:單擊畫圖窗口右側的關閉按鈕;
方法二:單擊菜單中“文件”選項中的退出命令
三、課堂練習
(1)繪制學案上的“小房子”圖。(2)學生作品展示。
五、課后作業
使用畫圖工具繪制一張節日賀卡圖片。
第三篇:Windows應用程序——畫圖教案
《Windows XP應用程序—畫圖》教案
教材分析
本節內容為上海科技教育出版社出版的七年級信息技術教材第二單元第四小節《使用應用程序》,目的是使學生了解和掌握信息技術的基礎知識,具有使用計算機工具進行圖形繪制和圖形處理的能力。
學情分析
授課對象為七年級學生。學生經過計算機基礎知識和windows XP操作系統的學習,對計算機基本操作有了一定的了解。通過本節課的學習,大部分學生能用畫圖程序進行簡單的圖形繪制和圖像處理,提高學生應用信息技術的能力。
教學目標
1.知識與技能
(1)學會啟動與退出畫圖程序。
(2)認識畫圖窗口的組成和畫圖工具箱中的工具。
(3)能用畫圖程序畫一幅圖畫。
2.過程與方法
(1)通過Windows XP附件程序的學習,讓學生體驗學習應用程序的方法。
(2)通過畫圖程序的學習,培養學生創造性探索和解決問題的能力。
3.情感、態度與價值觀
培養學生良好的學習習慣和學習興趣。
教學重點與難點
重點:
1、“畫圖”程序的啟動。
2、熟悉“畫圖”程序工具箱中的工具。
難點:“畫圖”程序中工具的使用。
教學準備
多媒體課件、圖片。
教學方法
講授法、演練法、自主探究法
課時安排
一課時
教學過程
一、導入
回憶:同學們都上過美術課,都畫過畫,畫畫時大家都用過哪些工具呢?
學生回答??。展示圖片:
這兩幅圖是我用你們剛才說的這些工具來畫的,只不過我是用電腦來畫的,同學們這兩幅圖漂亮嗎?學生回答??。這兩幅圖是我用Windows XP系統自帶的應用程序—畫圖程序來畫的,同學們想不想學習這個畫圖程序呢?學生回答??,好,這節課我就和大家一塊來學習Windows XP應用程序—畫圖。
二、新課探究
1、啟動“畫圖”程序
問題:如何打開“畫圖”程序?(1)學生動手探索。
(2)教師講解并演示啟動“畫圖”程序的操作步驟。
步驟:開始→程序→附件→畫圖
啟動后的屏幕窗口如下圖所示:
2、認識“畫圖”程序
(1)標題欄:它包含了程序的名稱和圖畫的命名。(2)菜單欄:有六個下拉式菜單。
(3)工具箱:有許多繪圖工具,繪畫時任選一項工具,選擇工具后,講鼠標移到繪圖區,指針就變成工具的形狀。
(4)繪圖區:在該區作圖、繪畫。
(5)調色板:左面是交叉重疊的矩形,左上角的矩形顯示當前前景色,右下角矩形顯示當前背景色,右邊有28種顏色供選擇。
3、認識“畫圖”工具
(1)重點講解
橡皮工具:可以擦除圖面中不想要的部分
涂色工具:用前景色對封閉區填充。
噴槍工具:該工具由鼠標的拖動速度決定的,速度越們慢,斑點越密,速度越快,斑點越稀少。
文字工具:利用文字工具可以在圖畫上寫字。
直線工具:利用它可以畫直線、水平線、垂直線。
曲線工具:利用它可以畫單彎頭曲線、雙彎頭曲線。
鉛筆工具:可以在繪圖區內任意畫線。
橢圓工具:可以畫一些垂直或水平的橢圓環。
(2)簡單講解
剪切工具、選定工具、取色工具、放大鏡、刷子工具、矩形、多邊形 圓角矩形。
4.實例:荷塘月色(教師演示)5.作品存盤退出:(講解并演示)
存盤:選擇“文件”菜單下的“保存”命令, 將所繪制的圖畫保存磁盤上。退出畫圖程序:
方法一:單擊畫圖窗口右側的關閉按鈕;
方法二:單擊菜單中“文件”選項中的退出命令
三、課堂練習
(1)繪制學案上的“小雞吃米”圖。(2)學生作品展示。
四、課堂小結
本節課主要學習了畫圖程序的啟動與退出,畫圖窗口的組成以及畫圖工具箱中工具的使用。
五、課后作業
使用畫圖工具繪制一張圣誕賀卡圖片。
六、課后反思
第四篇:Android應用程序開發-個人總結
《Android應用開發》個人總結報告
一、項目簡介:
送祝福App是一款逢年過節為方便發送祝福信息的軟件,并且介紹各種節日的相關情況。包含節日祝福短信,支持直接發送短信給好友,也可定時發送給好友,編寫模版。為生活提供了便利。
二、個人在項目中承擔的任務:
我是任務是整合成員負責的模塊,把各個模塊整合到一起,然后把主界面的效果做出來,主界面參考的是微信的界面
三、學習本門課程收獲、體會及建議:
在本門課程中,我初步認識了安卓應用開發所需基本知識,比如安裝體系結構,常用的控件以及API的使用方法,知道了安卓體系存儲數據的方式。這一學期,安卓相關的知識自己掌握的不多,不過也透過安卓課程看到移動端應用的火熱。這一個學期里,老師講得比較細,自己單獨下來練一個知識點了,也可以,不過當幾個知識點的內容整合到一起,自己就凌亂了,自己的思路就不清晰。在期末項目中,我是任務是整合成員負責的模塊,把各個模塊整合到一起,然后把主界面的效果做出來,主界面參考的是微信的界面,由于時間和能力的限制,只完成了部分功能,功能沒有完全實現。
第五篇:怎樣解決iexplore.exe應用程序錯誤
作者:江西新華電腦學院
怎樣解決iexplore.exe應用程序錯誤
最近觀察到有很多用戶上網時,系統經常報錯:iexplore.exe-應用程序錯誤。分析了常見iexplore.exe 應用程序錯誤的原因后,發現主要是病毒木馬影響,其次是瀏覽器加載項。
iexplore.exe應用程序錯誤的現象:瀏覽器是上網的最主要通道。目前,使用IE瀏覽器的人仍然是主流,國內流行的第三方瀏覽器也大多是IE內核。任何原因導致IE出錯,都會導致上網瀏覽障礙。
比如很多網民瀏覽器頻繁崩潰時會問:
(1)iexplore.exe應用程序錯誤
(2)iexplore.exe是什么進程可以結束嗎
(3)iexplore.exe 遇到問題需要關閉
(4)iexplore.exe是什么進程
而瀏覽器崩潰時出錯的提示往往是“iexplore.exe 應用程序錯誤”,“0x02e87a90”指令引用的“0x02e87a90”內存.該內存不能為“read”等等。
iexplore.exe應用程序錯誤的原因:情況主要有以下幾種:
1:iexplore.exe會經常被病毒假冒或者病毒直接插入iexplore.exe進程,病毒木馬程序的BUG會經常導致iexplore.exe應用程序錯誤。但顯然,病毒木馬作者會無視這一點。
2:病毒木馬感染系統文件的過程中,采取了一些非主流的方式加載,這類方式非常不穩定,容易導致iexplore.exe的崩潰,出現iexplore.exe應用程序錯誤;最常見的也就是出現iexplore.exe 遇到問題需要關閉;
3:具體表現一般為“internet explorer遇到加載項需要關閉,我們對此引起的不便表示道歉.如果你正處于進程中,請提交?? 等對話框。
4:一般的加載到iexplore.exe的病毒多為盜號木馬,主要是針對大型網游和網銀進行盜號;還有對淘寶支付寶帳號下手。除此之外,有些病毒木馬還是下載器,中毒后,會下載大量其它木馬。或者安裝不需要的軟件,或彈出廣告。
5:除病毒之外的原因就是第三方廠商設計的瀏覽器加載項,一般稱之為瀏覽器插件。插件的BUG,也會導致iexplore.exe應用程序錯誤。
工具/原料
a:金山毒霸2011
b:控制面板,IE選項
解決iexplore.exe應用程序錯誤的步驟/方法
方案一:采用金山毒霸最新版本查殺病毒,并修復系統錯誤。一般情況下不需要全盤查殺,只需要快速查殺,3-5分鐘之后,按提示選擇修復即可。
方案二:如果金山毒霸最新版本沒有檢查到病毒,但仍然有iexplore.exe應用程序錯誤的情況發生,應檢查IE加載項。方法是啟動控制面板,找到internet選項,高級頁,點擊管理加載項。將可能有影響的插件禁用。
若管理插件無效,還可以重置或重裝IE。
注意事項:
瀏覽器故障通常是小問題,不要匆匆忙忙重裝系統。絕大多數情況下,3-5分鐘即可搞定。
2013-4-5