孫鑫VC 講座筆記 5 文字程式設計

2021-04-13 06:43:40 字數 3306 閱讀 5984

1,建立插入符:

void createsolidcaret( int nwidth, int nheight );//建立插入符

void createcaret( cbitmap* pbitmap );//建立位圖插入符

void showcaret( );//顯示插入符

void hidecaret( );//隱藏插入符

static void pascal setcaretpos( point point );//移動插入符號

說明:1)建立插入符要在視窗建立完成之後,createsolidcaret函式建立的插入符被初始化為隱藏,所以需要呼叫showcaret()將其顯示。

2)使用createcaret函式建立位圖插入符的時候,不能使用區域性的點陣圖物件關聯位圖資源。(與資源相關聯的c++物件,當它析構的時候會同時把與它相關聯的資源銷毀。)

2,獲取當前字型資訊的度量:cdc::gettextmetrics

bool gettextmetrics( lptextmetric lpmetrics ) const;

說明:typedef struct tagtextmetric textmetric;

3,ondraw函式:

virtual void ondraw( cdc* pdc )

當視窗(從無到有或尺寸大小改變等)要求重繪的時候,會傳送wm_pain訊息,呼叫ondraw函式進行重繪。

4,獲取字串的高度和寬度(區別字串的長度):

cdc::gettextextent

csize gettextextent( lpctstr lpszstring, int ncount ) const;

csize gettextextent( const cstring& str ) const;

說明:the csize class is similar to the windows size structure。

typedef struct tagsize size;

5,路徑層:

bool beginpath( );

//在這作圖定義路徑層剪下區域

bool endpath( );

bool selectclippath( int nmode );//呼叫這個函式來使當前路徑層剪下區域與新剪下區域進行互操作。  

//在這覆蓋作圖(包含前定義的路徑層區域)定義新的剪下區域

6,關於文字字串一些函式:

colorref getbkcolor( ) const;//得到背景顏色

virtual colorref setbkcolor( colorref crcolor );//設定背景顏色

bool settextbkcolor( colorref cr );//設定文字背景顏色

virtual colorref settextcolor( colorref crcolor );//設定文字顏色

virtual bool textout( int x, int y, lpctstr lpszstring, int ncount );//輸出文字

bool textout( int x, int y, const cstring& str );

cstring left( int ncount ) const;//得到字串左邊ncount個字元

int getlength( ) const;//得到字串長度

7,字型cfont::cfont

cfont( );//建構函式

//constructs a cfont object. the resulting object must be initialized with createfont, createfontindirect, createpointfont, or createpointfontindirect before it can be used.

選用字型事例**組:

cclientdc dc(this);

cfont font;//構造字型物件

font.createpointfont(300,"華文行楷",null);//初始化字型物件,與字型資源相關聯

cfont *poldfont=dc.selectobject(&font);//將新字型選入dc

...dc.selectobject(poldfont);//恢復原字型

說明:1)構造字型物件時候,必須初始化。(初始化是將字型物件與字型資源相關聯)。

2)初始化物件時候,選用的字型也可以是系統字型,但不一定都有效,據測試選用。

8,在mfc中ceditview 和 cricheditview類已經完成了初步的文書處理。可以讓應用程式的view類以ceditview 和 cricheditview類為基類。

9,平滑變色

cdc::textout()是乙個字母乙個字母的輸出,達不到平滑效果。

cdc::drawtext():將文字的輸出侷限於乙個矩形區域,超出矩形區域的文字都被截斷。利用這一特點,可每隔些時間增加矩形大小,從而可實現人眼中的平滑效果。

cwnd::settimer():設定定時器。按設定的時間定時傳送wm_timer訊息。

說明:uint settimer( uint nidevent, uint nelapse, void (callback export* lpfntimer)(hwnd, uint, uint, dword) );

//nidevent定時器標示,nelapse訊息傳送間隔時間,void (callback export* lpfntimer)(hwnd, uint, uint, dword)設定**函式,如果設定則由設定的**函式處理wm_timer訊息,如果沒有設定**函式設為null,這傳送的wm_timer訊息壓入訊息佇列,交由相關聯的視窗處理(新增wm_timer訊息處理函式ontimer())。

afx_msg void ontimer( uint nidevent );

//響應wm_timer訊息,nidevent為訊息對應定時器標示(可以設定不同的定時器傳送wm_timer訊息)

問題:1,在ccareview類中新增wm_create訊息響應函式oncreate(),wm_create訊息是在什麼時候被檢查到而被響應的呢?

(猜測:新增wm_create訊息後,訊息被壓入訊息佇列,然後經過訊息迴圈進行分發到具體視窗,從而進行響應)

2,現有一文字檔案內容已經讀入串str中,要求在檢視客戶區按原先文字檔案中的格式輸出。

問題是,利用cdc的textout()來在cview類派生類視窗中輸出串時,忽略了串中的tab、回車換行等格式,無論串有多長均在一行上輸出。

這其中是cdc類成員函式textout()忽略串中格式的,還是cview類派生類視窗設定從中做怪呢?怎麼解決?

孫鑫VC 講座筆記 5 文字程式設計

1,建立插入符 void createsolidcaret int nwidth,int nheight 建立插入符 void createcaret cbitmap pbitmap 建立位圖插入符 void showcaret 顯示插入符 void hidecaret 隱藏插入符 static v...

孫鑫VC 講座 筆記補充 六

1 完成對乙個menu item 的標識 checkmenuitem cmainframe ontoggletestmenuitem is a menu command handler for test menu item whose resource id is id help test it t...

孫鑫VC 講座筆記 2 C

1,c語言中,結構體struct中不能包括函式的,而在c 中struct中可以包括函式。2,c 中結構體和類可以通用,區別主要表現在訪問控制方面 struct中預設是public,而 class中預設的是private。3,建構函式最重要的作用是建立物件的本身,c 中每個類可以擁有多個建構函式,但必...