孫鑫《vc 深入詳解》第五章文字程式設計

2021-04-13 08:41:45 字數 3307 閱讀 2637

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類派生類視窗設定從中做怪呢?怎麼解決? 

第五章 文字

第五章 文字 用省略號 顯示溢位文字 text overflow 值 clip ellipsis clip 裁剪溢位內容 ellipsis 用省略號顯示溢位內容 說明 要實現ellipsis效果,還要宣告overflow為hidden,如果文字本來只有一行,想在一行內顯示,還需宣告white spa...

程式設計珠璣第五章

直接來習題吧 1 第一題可以看一下林銳的高質量c c 程式設計 2 3 4 5 第五題很明顯不應該每次都用 for i 0 i n 1 i assert a i a i 1 如何利用二分的性質來進行處理還是乙個問題。一種辦法是 int bs int a,int b,int e,int v retur...

C程式設計第五章

include 10.前20項和 int main printf 12.10f sum return 0 11.小球10次 int main printf 十次高度 10.6f t經過距離 10.6f n h,s return 0 12.猴子吃桃 誰家的猴子家裡能放下一千多個桃 int main p...