MFC學習筆記(一)

2021-06-28 22:58:16 字數 3183 閱讀 3756

案例1   

響應視窗始終**輸出字元:

**如下

crect rectclient, recttitle;   

int nwidth = 100;

int nheight = 40;

getclientrect(&rectclient);                   //得到當前客戶區的尺寸

recttitle.left = (rectclient.width()-nwidth)/2;

recttitle.top = (rectclient.height()-nheight)/2;

recttitle.right = recttitle.left+nwidth;

recttitle.bottom = recttitle.top+nheight;      //根據客戶區尺寸計算矩形位置

pdc->rectangle(recttitle);      

crect rectclient, recttitle;   

pdc->textout(recttitle.left+10, recttitle.top+10, "hello, mfc!");   //輸出字串

知識點:

1.crect物件: 建立乙個矩形框變數,有左右上下四個屬性,起點座標為左上

2.getclientrect函式: 得到客戶區矩形的屬性

3.pdc指標: 

void creview1view::ondraw(cdc* pdc) 

指向cdc

物件的指標,用於在客戶區輸出

案例2   

響應鍵盤按鍵和滑鼠按鍵:

**如下

void cmykeybuttonview::onkeydown(uint nchar, uint nrepcnt, uint nflags) 

// todo: add your message handler code here and/or call default

cstring strdisplay;

strdisplay.format("使用者按下鍵

%c,鍵值

%d",nchar,nchar);

messagebox(strdisplay);

cview::onkeydown(nchar, nrepcnt, nflags);

void cmykeybuttonview::onlbuttondown(uint nflags, cpoint point) 

// todo: add your message handler code here and/or call default

cstring strdisplay;

strdisplay.format("x=%d,y=%d",point.x,point.y);

messagebox(strdisplay);

cview::onlbuttondown(nflags, point);

知識點:

1.vc的

classwizard

功能:直接呼叫訊息響應函式

2.cstring字串型別: 

format

函式初始化字串內容(可含變數)  

%d:輸出數值 

%c:輸出編碼

3.messagebox函式: 彈出乙個新的視窗,內容可以給定

4.onkeydown函式: 三個引數的意義:

nchar

是鍵值,

nrepcnt

是重複次數,

nflags

是訊息編號

5.onlbuttondown函式: 

cpoint

物件point

的兩個屬性分別是x和

y座標6.invalidaterect函式: 如果程式是動態的視窗程式,必須呼叫這個函式來達到動態的視窗變化,否則視窗一直顯示的是初始化的

ondraw

視窗,並不能看到任何變化。

invalidaterect(rectclient,true);

呼叫函式重新整理

rectclient

矩形區域,

true

可預設該函式向指定的

窗體更新區域新增乙個矩形,然後視窗客戶區域的這一部分將被重新繪製。

bool invalidaterect(hwnd hwnd, const rect *lprect, bool berase);引數:hwnd:要更新的客戶區所在的

窗體的控制代碼。如果為null,則系統將在函式返回前重新繪製所有的視窗, 然後傳送

wm_erasebkgnd

和 wm_paint

給視窗過程處理函式。lprect:無效區域的矩形代表,它是乙個

結構體指標

,存放著矩形的大小。如果為null,全部的視窗客戶區域將被增加到更新區域中。berase:指出無效矩形被標記為有效後,是否重畫該區域,重畫時用預先定義好的畫刷。當指定true時需要重畫。返回值:函式成功則返回非零值,否則返回零值。說明:被標記為無效矩形的區域直到

wm_paint訊息

被處理完之後才會消失,或者使用validaterect(),validatergn()函式來使之有效。當

應用程式

的訊息佇列

中為空時,並且

窗體要更新的區域非空時,系統會傳送乙個wm_paint訊息到窗體。這兩個都用於宣告客戶區無效,當下乙個wm_paint訊息到來時發生重畫。其中invalidaterect(hwnd, null, true);重畫時將擦除背景。invalidaterect(hwnd, null, false);重畫時不擦除背景

crect rectclient, recttitle;   

int nwidth = 100;

int nheight = 40;

getclientrect(&rectclient);                   //得到當前客戶區的尺寸

recttitle.left = (rectclient.width()-nwidth)/2;

recttitle.top = (rectclient.height()-nheight)/2;

recttitle.right = recttitle.left+nwidth;

recttitle.bottom = recttitle.top+nheight;      //根據客戶區尺寸計算矩形位置

pdc->rectangle(recttitle);      

MFC 學習筆記一

通過近段時間的mfc學習,對訊息機制有了更深入的理解,訊息鏈的建立,runtimeclass的理解中,對於類的組織鏈的精妙設計很嘆服,這些主要是在看mfc深入淺出的過程中體會到的,整個學習過程中,感覺記住mfc的類層次圖是非常重要和必需的。下面就對自己所學習的rtti 執行時期型別辨識 進行整理 首...

MFC學習筆記CDocTemplate 一

修改cdoctemplate可過濾的檔案型別 方法一 在建立工程的時候,第4步時選擇 高階.選項,在副檔名處填寫要過濾的副檔名。方法二 如果工程已經建立好了,那就需要手工修改,找到工程目錄,使用記事本開啟相應的rc檔案,然後找到如下字段 stringtable preload discardable...

MFC入門學習筆記(一)

最近看了一下mfc,隨手記錄下點東西,算是留著給自己偶爾看看吧 學習環境 vs2017 mfc小專案實戰 1.使用mfc平台新建文件時,可選基本對話方塊 單文件介面 多文件介面 多個頂層文件,一般選擇基本對話方塊或多文件mdi兩者就夠用了。2.檢視從mfc類cview派生。3.mfc提供了使文件與其...