亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? visual c++的程序設計技巧(轉).txt

?? C_C++技巧集
?? TXT
字號:
作者:skyhorsebj
email: XUEY@CIDC.COM.CN
日期:2001-7-3 18:12:19
Microsoft Visual C++是一種可視化編程語言,因功能強大而受到廣大程序設計人員的青睞。但是,由于VC++的應用程序框架結構非常復雜,使得許多初學者望而卻步。本文通過對設置視圖背景顏色和改變對話框標題的幾種實現方法的分析研究,揭示了VC++程序代碼執行時的一些本質特征和有關的程序設計技巧,對理解MFC庫的結構和Windows操作系統的內部工作方式提供了一定的幫助。 
設置視圖背景顏色 
對于VC++文檔、視結構中的視圖,從用戶的角度來看,只是可以改變大小、位置的普通窗口,同其他基于Windows應用程序的窗口是一樣的;從程序員的角度來看,視圖并不是普通的窗口,而是從MFC庫中CView類派生的類對象。像任何VC++對象一樣,視圖對象的行為由類的成員函數(數據成員)決定,包括派生類中應用程序定義的函數和從基類繼承來的函數。 
提出問題 
視圖的背景一般來說是白色的,在缺省情況下,它和系統定義的顏色COLOR_WINDOW是一致的。設計者一般會希望自己的程序可以讓用戶輕松地改變窗口背景顏色,或是用漂亮的圖片來充填背景。我們可以用Windows函數SetSysColors來重新指定COLOR_WINDOW所對應的實際顏色,來達到改變視圖背景顏色的目的。但這樣會同時改變其他應用程序的視圖窗口背景,使得整個Windows系統的顏色設置產生混亂。另外,我們可能會用以下方法來設置視圖的背景顏色,即在CView的OnDraw函數中添寫如下一段程序代碼: 
void CTestView::OnDraw(CDC* pDC) 
{ 
CTestDoc* pDoc = GetDocument(); 
ASSERT_VALID(pDoc); 
CRect rectClient; 
CBrush brushBkColor; 
GetClientRect(rectClient); 
brushBkColor.CreateSolidBrush(RGB(255,0,0)); 
pDC->DPtoLP(rectClient); 
pDC->FillRect(rectClient,&brushBkColor); 
} 
這樣可以達到改變當前應用程序的視圖背景的目的,但同時也產生了一些不良影響,使得程序運行效果不盡如人意。 
分析問題 
我們知道,在VC++的文檔、視結構中,CView的OnDraw函數用于實現絕大部分圖形繪制的工作。如果用戶改變窗口尺寸,或者顯示隱藏的區域,OnDraw函數都將被調用來重畫窗口。并且,當程序文檔中的數據發生改變時,一般必須通過調用視圖的Invalidate(或InvalidateRect)成員函數來通知Windows所發生的改變,對Invalidate的調用也會觸發對OnDraw函數的調用。正因為OnDraw函數被頻繁調用,所以在其執行時,每次都刷新填充一次視圖客戶區域,便會使屏幕不穩定,產生閃爍現象。 
筆者通過對VC++應用程序框架結構和Windows消息映射系統的仔細研究,找到另外一種改變視圖背景的方法,其執行效果比上述兩種方法都好。其實在程序調用OnDraw函數之前,會觸發一個Windows消息:WM_ERASEBKGND,以擦除視圖刷新區域。在缺省情況下,Windows系統使用視圖窗口注冊時窗口類中的成員hbrBackground所描述的畫刷來擦除屏幕,這一般會將屏幕刷新成COLOR_WINDOW所對應的顏色。因此,在OnDraw函數中設置背景顏色的執行過程是這樣的:先將屏幕刷新成COLOR_WINDOW所對應的顏色,接著又在OnDraw函數中填充其他顏色,這正是產生屏幕閃爍的根本原因。 
解決問題 
通過上述分析,我們應將視圖背景顏色填充移到Windows消息:WM_ERASEBKGND所對應的消息映射函數中,而不是在OnDraw函數中。我們可以通過下列步驟實現這一過程:在文檔類中增加一成員變量m_viewBkColor保存當前背景顏色,同時增加兩個成員函數GetViewBkColor和SetViewBkColor對其進行讀寫操作。這樣做的好處是可以對m_viewBkColor成員進行序列化,將其和文檔聯系在一起,打開某一文檔時,其背景將和上一次程序操作該文檔時的背景保持一致。在視圖類中為視圖的Windows消息WM_ERASEBKGND增加消息映射函數OnEraseBkgnd,代碼如下: 
BOOL CTestView::OnEraseBkgnd(CDC* pDC)  
{ 
CRect rect; 
CBrush brush; 
brush.CreateSolidBrush(GetDocument()->GetViewBkColor()); 
pDC->GetClipBox(rect); 
pDC->FillRect(rect,&brush); 
return true; 
} 
在該函數中不需要對客戶區域矩形進行設備坐標到邏輯坐標的轉換,并且Windows在調用該函數時會自動進行裁剪區域的計算,使得需要刷新的屏幕面積達到最小。這樣我們可以在程序中通過設計下列菜單函數輕松地改變視圖背景的顏色,而且運行效果相當令人滿意。 
void CTestView::OnChangeViewBkcolor()  
{ 
CColorDialog cdlg; 
if(cdlg.DoModal()==IDOK) 
{ 
GetDocument()->SetViewBkColor 
(cdlg.GetColor()); 
InvalidateRect(NULL); 
} 
} 
改變對話框標題 
提出問題 
在VC++程序設計過程中經常會遇到這樣的情況:執行程序的多個地方需要調用同一個對話框,但在不同的情況下希望給對話框加上不同的標題。開始我們可能會用下面的一段程序以達到這一目的: 
CTestDialog dlg; 
dlg.SetWindowText(“標題-1"); 
dlg.DoModal(); 
利用上述辦法,我們本希望在程序不同的地方,通過設置函數SetWindowText不同的參數,以達到使同一對話框具有不同標題的目的,但這樣做是行不通的。 
分析問題 
利用這種方法,當執行該段程序時,在一個可以忽略的錯誤之后,對話框的標題不會發生任何改變。這是因為,VC++程序設計中,大部分窗體是動態創建的。比如上述對話框,在對dlg.DoModal的調用之前,雖然已構造了對話框的VC++對象,但窗體對象還沒有被創建,顯然對一個沒有創建窗體對象的對話框設置標題是行不通的。另外,dlg.DoModal的調用結束時,對話框窗體對象將立即被釋放,因此在該函數之后設置對話框標題也是不行的。 
解決問題 
通過對VC++框架結構中函數的調用順序的分析,我們發現在dlg.DoModal執行的開始時,程序會自動調用對話框的一系列初始化函數,其中包括對對話框成員函數OnInitDialog的調用,從這里入手,將找到改變對話框標題的辦法。為此,首先為對話框引進一個類型為CString的公有成員變量m_strCaption,并將上述程序段改為: 
CTestDialog dlg; 
dlg.m_strCaption = “標題-1"; 
dlg.DoModal(); 
然后重載對話框的虛成員函數OnInitDialog如下: 
BOOL CTestDialog::OnInitDialog()  
{ 
CDialog::OnInitDialog(); 
SetWindowText(m_strCaption); 
return TRUE; 
} 
通過這種辦法,每次在打開對話框之前,只要將對話框公有成員變量m_strCaption設置為一個不同的值,就可使得對話框有不同的標題。 
小 結 
本文介紹的2個技巧有一個相似之處,就是用于解決問題的程序實現代碼基本上是相同的,只是被放在了程序流程的不同地方。這正是學習和熟練掌握VC++的一個非常重要的方面,是影響其程序執行效率和性能的關鍵。 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品福利一区二区蜜股av| 激情欧美一区二区| 成人免费视频国产在线观看| 欧美精品一区二区三区在线| 国产一区二区影院| 国产精品传媒入口麻豆| aaa亚洲精品| 一区二区三区小说| 538在线一区二区精品国产| 秋霞午夜av一区二区三区| 欧美tickling挠脚心丨vk| gogo大胆日本视频一区| www.欧美色图| 欧美亚洲高清一区| 国产精品一区一区| 人人超碰91尤物精品国产| 日韩二区三区四区| 一区二区三区国产精品| 一区二区三区国产精华| 欧美aaaaaa午夜精品| 国产乱码一区二区三区| 成人精品鲁一区一区二区| 亚洲激情一二三区| 欧美精品一区二| 欧美日韩精品福利| 色综合色综合色综合色综合色综合 | 精品捆绑美女sm三区| 久久这里都是精品| 综合婷婷亚洲小说| 久久亚洲二区三区| 日韩伦理av电影| 免费高清在线一区| caoporn国产一区二区| 欧美视频三区在线播放| 久久亚洲精华国产精华液 | 一区二区三区日韩精品| 蜜臀av性久久久久av蜜臀妖精| 一区二区欧美国产| 久草精品在线观看| 麻豆精品蜜桃视频网站| 丁香六月久久综合狠狠色| 欧美日韩视频在线一区二区| 欧美午夜理伦三级在线观看| 久久美女艺术照精彩视频福利播放 | 欧美日韩aaa| 中文字幕在线一区免费| 日本伊人色综合网| 色综合激情五月| 国产日韩欧美亚洲| 久久久久久久久久久黄色| 亚洲精品欧美二区三区中文字幕| 理论电影国产精品| 国产麻豆视频一区二区| 欧美色涩在线第一页| 自拍偷拍国产亚洲| 国产一区二区三区精品视频| 91精品啪在线观看国产60岁| 欧美国产一区视频在线观看| 欧美高清一级片在线观看| 免费观看成人av| 欧美福利视频导航| 日韩欧美在线网站| 久久久另类综合| 视频一区在线视频| 国产一区二区三区精品欧美日韩一区二区三区 | 日本视频中文字幕一区二区三区 | 日韩影院在线观看| 在线视频综合导航| 制服丝袜亚洲色图| 亚洲三级小视频| av成人免费在线观看| 国产丝袜在线精品| 一片黄亚洲嫩模| 99精品视频一区| 欧美一卡2卡三卡4卡5免费| 久久久久97国产精华液好用吗| 免费在线观看日韩欧美| 欧美一级免费大片| 欧美a级一区二区| 欧美videos中文字幕| 激情综合一区二区三区| 久久蜜桃av一区精品变态类天堂 | 免费看欧美女人艹b| 日韩欧美一区二区视频| 国产精品久久一卡二卡| 成人精品国产福利| 国产精品免费久久| 免费成人小视频| 日韩精品影音先锋| 国产成人啪午夜精品网站男同| 欧洲av一区二区嗯嗯嗯啊| 亚洲国产中文字幕| 丁香桃色午夜亚洲一区二区三区| 欧美在线观看一区二区| 婷婷综合久久一区二区三区| 欧美一区二区三区在线观看 | 亚洲自拍偷拍图区| 国产乱妇无码大片在线观看| 日本一区二区免费在线观看视频| 91丨porny丨国产入口| 精品国产伦一区二区三区免费| 国产在线不卡一卡二卡三卡四卡| 日本一区二区动态图| 色诱视频网站一区| 老司机精品视频导航| 中文字幕乱码久久午夜不卡 | www久久精品| 一本大道综合伊人精品热热| 日韩av在线发布| 国产精品久久久久久久第一福利| 欧美网站一区二区| 国产一区二区在线观看免费| 亚洲一区视频在线观看视频| 精品国产精品网麻豆系列| 94-欧美-setu| 美腿丝袜在线亚洲一区| 亚洲视频一二三区| 精品入口麻豆88视频| 色狠狠桃花综合| 久久久久国产一区二区三区四区| www欧美成人18+| 不卡区在线中文字幕| 日韩国产成人精品| 国产精品久久久久影院亚瑟| 欧美zozozo| 欧美视频精品在线| kk眼镜猥琐国模调教系列一区二区| 亚洲成人动漫一区| 欧美最猛黑人xxxxx猛交| 国产精品99久久久| 日韩精品高清不卡| 亚洲不卡在线观看| 亚洲人成影院在线观看| 欧美日韩精品一区二区| 99久久精品免费看国产| 国产又黄又大久久| 日韩va欧美va亚洲va久久| 亚洲二区在线观看| 亚洲综合一区二区三区| 亚洲日本韩国一区| 中文字幕亚洲一区二区va在线| 91麻豆精品一区二区三区| 国产91精品精华液一区二区三区 | 精品影院一区二区久久久| 亚洲国产cao| 亚洲一区二区精品久久av| 一区二区三区四区精品在线视频| 欧美高清在线一区二区| 国产婷婷色一区二区三区四区| 久久精品免费在线观看| 国产午夜亚洲精品午夜鲁丝片 | 99re热这里只有精品免费视频 | 亚洲日本va在线观看| 中文在线免费一区三区高中清不卡| 精品美女被调教视频大全网站| 日韩你懂的电影在线观看| 日韩一级大片在线观看| 日韩免费福利电影在线观看| 欧美一卡二卡在线| 久久亚洲欧美国产精品乐播 | ww久久中文字幕| 久久综合九色综合久久久精品综合| 日韩女优电影在线观看| 久久精品视频一区二区| 国产三级欧美三级日产三级99| 国产日韩欧美不卡| 国产精品麻豆一区二区| 一区二区在线看| 日韩精品一区第一页| 麻豆成人91精品二区三区| 韩日av一区二区| 成人国产一区二区三区精品| 91免费视频观看| 欧美情侣在线播放| 久久综合久久99| 亚洲欧洲一区二区三区| 亚洲国产精品久久人人爱蜜臀| 午夜视频在线观看一区二区三区| 蜜臀精品久久久久久蜜臀 | 亚洲chinese男男1069| 日本大胆欧美人术艺术动态| 韩国av一区二区三区| av中文一区二区三区| 欧美人xxxx| 日本一区二区高清| 午夜国产精品一区| 成人性生交大片免费看中文网站| 欧美综合天天夜夜久久| 久久综合久久鬼色中文字| 亚洲欧美综合色| 蜜臀av国产精品久久久久 | 婷婷六月综合亚洲| 国产丶欧美丶日本不卡视频| 欧美综合一区二区三区| 久久久91精品国产一区二区精品| 亚洲综合免费观看高清完整版在线| 久久黄色级2电影| 在线影院国内精品| 久久精品一区二区三区不卡| 亚洲午夜精品久久久久久久久|