visual c++程式設計技巧之七
49、如何實現乙個橡皮區矩形 50
、如何更新翻轉背景顏色的文字 51
、如何建立乙個具有特定點大小的字型 52
、如何計算乙個串的大小 53
、如何顯示旋轉文字
54、如何正確顯示包含標籤字元的串 55
、串太長時如何在其末尾顯示乙個省略號 56
、如何快速地格式化乙個
cstring物件
49
、如何實現乙個橡皮區矩形
crecttracker是乙個很有用的類,可以通過呼叫crecttracker:: trackrubberband響應wm_lbuttondown訊息來建立乙個橡皮區矩形。下例表明使用crecttracker移動和重置視窗中的藍色橢圓的大小是很容易的事情。
首先,在檔案檔中宣告乙個crecttracker資料成員:
class csampleview : public cview ;
其次,在文件類的建構函式中初始化crecttracker 物件:
csampledoc:: csampledoc ()
然後,在ondraw函式中畫橢圓和蹤跡矩形:
void csampleview:: ondraw (cdc* pdc)
最後,使用classwizard處理wm_lbuttondown訊息,並增加下述**。該段**根據滑鼠擊鍵情況可以拖放、移動或者重置橢圓的大小。
void csampleview::onlbuttondown (uint nflags, cpoint point)
else
pdoc->m-tracker.trackrubberband (this,point,true);
cview:: onlbuttondown (nflags,point); }
50
、如何更新翻轉背景顏色的文字
呼叫cdc:: setbkmode並傳送opaque用當前的背景顏色填充背景,或者呼叫cdc::setbkmode並傳送transpaarent使背景保持不變,這兩種方法都可以設定背景模式。下例設定背景模式為transparent,可以兩次更新串,用花色帶黑陰影更新文字。黑色串在紅色串之後,但由於設定了背景模式仍然可見。
void csampleview:: ondraw (cdc* pdc)
51
、如何建立乙個具有特定點大小的字型
可以指定字型邏輯單位的大小,但有時指定字型的點的大小可能會更方便一些。可以如下將字型的點轉換為字型的高度:
int nheigth=muldiv (npointsize, -dc.getdevicecaps (logpixelsy), 72);
下例建立了乙個8點的apial字型:
cclientdc dc (aqfxgetmainwnd ());
m_font. createfont (muldiv (8, -dc.getdevicecaps (logpixelsy),
72),0,0,0,fw_normal,0,0,0,ansi_charset,
out_stroke_precis,clip_stroke_precis,draft_quality,
variable_pitch | ff-swiss,_t ("arial"));
52
、如何計算乙個串的大小
函式cdc:: det text extent 根據當前選擇的字型計算乙個串的高度和寬度。如果使用的不是系統字型而是其他字型,則在呼叫gettextextent之前將字型選進裝置上下文中是很重要的,否則計算高度和寬度時將依據系統字型,由此得出的結果當然是不正確的。下述樣板程式當改變下壓按鈕的標題時動態調整按鈕的大小,按鈕的大小由按鈕的字型和標題的大小而定。響應訊息wm_settext時呼叫onsettext,該訊息使用on_messae巨集指令定義的使用者自定義訊息。
lresult cmybutton:: onsettext (wparam wparam, lparam lparam)
53
、如何顯示旋轉文字
只要使用者使用truetype或者gdi筆或字型就可以顯示旋轉文字(有些硬體裝置也支援旋轉光柵字型)。logfont結構中的ifescapement成員指定了文字行和x軸的角度,角度的單位是十分之一度而不是度,例如,ifescapement為450表示字型旋轉45度。為確保所有的字型沿座標系統的同一方向旋轉,一定要設定ifescapement成員的clip_lh_angles位,否則,有些字型可能反向旋轉。下例使用了14點arial字型每間隔15度畫乙個串。
void csampleview:: ondraw (cdc* pdc)
} 54、如何正確顯示包含標籤字元的串
呼叫gdi文字繪畫函式時需要展開標籤字元,這可以通過呼叫cdc:: tabbedtextout或者cdc:: drawtext並指定dt_expandtabs標誌來完成。tabbedtextout函式允許指定標籤位的陣列,下例指定每20裝置單位展開乙個標籤:
void csampleview:: ondraw (cdc* pdc)
55
、串太長時如何在其末尾顯示乙個省略號
呼叫cdc:: drawtext並指定dt_end_ellipsis標誌,這樣就可以用小略號取代串末尾的字元使其適合於指定的邊界矩形。如果要顯示路徑資訊,指定dt_end_ellipsis標誌並省略號取代串中間的字元。
void csampleview:: ondraw (cdc* pdc)
56
、如何快速地格式化乙個
cstring
物件
呼叫cstring:: format,該函式和printf函式具有相同的引數,下例說明了如何使用format函式:
//get size of window.
crect rcwindow;
getwindowrect (rcwindow);
//format message string.
cstring strmessage;
strmessage.format (_t ("window size (%d, %d)"),
rcwindow.width (), rcwindow.height ());
//display the message.
messagebox (strmessage);
Visual C 程式設計技巧之四
visual c 程式設計技巧之四 25 如何獲取有關視窗正在處理的當前訊息的資訊 26 如何建立乙個不規則形狀的視窗 27 如何在 中獲取工具條和狀態條的指標 28 如何使能和禁止工具條的工具提示 29 如何設定工具條標題 30 如何建立和使用無模式對話方塊 31 如何在對話方塊中顯示乙個位圖 3...
Visual C 程式設計技巧小結
example handle hinstance afxgetinstancehandle 2.如何通過 獲得應用程式主視窗的指標?主視窗的 指標儲存在cwinthread m pmainwnd中,呼叫 afxgetmainwnd實現。afxgetmainwnd showwindow sw show...
Visual C 的程式設計技巧
山東科技大學智慧型工程研究所 楊在春 何明祥 microsoft visual c 是一種視覺化程式語言,因功能強大而受到廣大程式設計人員的青睞。但是,由於vc 的應用程式框架結構非常複雜,使得許多初學者望而卻步。本文通過對設定檢視背景顏色和改變對話方塊標題的幾種實現方法的分析研究,揭示了vc 程式...