visual c++程式設計技巧之四
25、如何獲取有關視窗正在處理的當前訊息的資訊 26
、如何建立乙個不規則形狀的視窗 27
、如何在**中獲取工具條和狀態條的指標 28
、如何使能和禁止工具條的工具提示 29
、如何設定工具條標題 30
、如何建立和使用無模式對話方塊 31
、如何在對話方塊中顯示乙個位圖 32
、如何改變對話或窗體視窗的背景顏色
25
、如何獲取有關視窗正在處理的當前訊息的資訊
呼叫cwnd: : getcurrentmessage可以獲取乙個msg指標。例如,可以使用
classwizard將幾個選單項處理程式對映到乙個函式中,然後呼叫getcurrentmessage
來確定所選中的選單項。
viod cmainframe : : oncommmonmenuhandler ( )
26
、如何建立乙個不規則形狀的視窗
可以使用新的sdk函式setwindowrgn。該函式將繪畫和滑鼠訊息限定在視窗的一
個指定的區域,實際上使視窗成為指定的不規則形狀。
除所在的預設控制項、標題以及邊界。
給對話類增加乙個crgn資料成員,以後要使用該資料成員建立視窗區域。
class crounddlg : public cdialog ;
修改oninitdialog函式建立乙個橢圓區域並呼叫setwindowrgn將該區域分配給
視窗:bool crounddlg : : oninitdialog ( )
通過建立區域和呼叫setwindowrgn,已經建立乙個不規則形狀的視窗,下面的例
子程式是修改onpaint函式使視窗形狀看起來象乙個球形體。
voik crounddlg : : onpaint ( )
} 最後,處理wm_nchittest訊息,使當擊打視窗的任何位置時能移動視窗。
uint crounddlg : : onnchittest (cpoint point )
27
、如何在**中獲取工具條和狀態條的指標
預設時, 工作框建立狀態條和工具條時將它們作為主框視窗的子視窗,狀態條
有乙個afx_idw_status_bar識別符號,工具條有乙個afx_idw_*******識別符號,下例說
明了如何通過一起呼叫cwnd: : getdescendantwindow和afxgetmainwnd來獲取這些
子視窗的指標:
//get pointer to status bar .
cstatusbar * pstatusbar =
(cstatusbar *) afxgetmainwnd ( ) —> getdescendantwindow
(afx_idw_stutus_bar);
//get pointer to ******* .
c******* * p******* =
(c******* * ) afxgetmainwnd ( ) —> getdescendantwindow (afx_idw_*******);
28
、如何使能和禁止工具條的工具提示
如果設定了cbrs_tooltips風格位,工具條將顯示工具提示,要使能或者禁止
工具提示,需要設定或者清除該風格位。下例通過呼叫ccontrolbar : : getbarstyle
和ccontrolbar : : setbarstyle建立乙個完成此功能的成員函式:
void cmainframe : : enabletooltips ( bool bdisplaytips )
29
、如何設定工具條標題
工具條是乙個視窗,所以可以在呼叫cwnd : : setwindowtext來設定標題,例子如下:
int cmainframe : : oncreate (lpcreatestruct lpcreatestruct )
//call destroywindow instead of enddialog .
destroywindow ( ) ; }
void csampledialog : : oncancel ( )
void csampledialog : : postncdestroy ( )
最後,要建立無模式對話。可以呼叫cdialog : : domodal建立乙個模式對放, 要建立乙個無模式對話則要呼叫cdialog: : create。下面的例子說明了應用程式是如何建立無模式對話的:
void cmainframe : : onsampledialog ( )
31
、如何在對話方塊中顯示乙個位圖
這要歸功於win 32先進的靜態控制項和microsoft的資源編輯器, 在對話方塊中顯示點陣圖是很容易的, 只需將圖形控制項拖到對話中並選擇適當屬性即可,使用者也可以顯示圖示、位圖以及增強型元檔案。
32
、如何改變對話或窗體視窗的背景顏色
需要重畫對話(或對話的子控制項)時,windows向對話傳送訊息wm_ctlcolor,通常使用者可以讓windows選擇繪畫背景的刷子,也可重置該訊息指定刷子。下例說明了建立乙個紅色背景對話的步驟。
首先,給對話基類增加一人成員變數cbursh :
class cmyformview : public cformview ;
其次, 在類的建構函式中將刷子初始化為所需要的背景顏色。
cmyformview : : cmyformview ( )
最後,使用classwizard處理wm_ctlcolor訊息並返回乙個用來繪畫對話背景的刷子控制代碼。注意:由於當重畫對話控制項時也要呼叫該函式,所以要檢測nctlcolor參量。
hbrush cmyformview : : onctlcolor (cdc* pdc , cwnd*pwnd , uint nctlcolor )
Visual C 程式設計技巧之七
visual c 程式設計技巧之七 49 如何實現乙個橡皮區矩形 50 如何更新翻轉背景顏色的文字 51 如何建立乙個具有特定點大小的字型 52 如何計算乙個串的大小 53 如何顯示旋轉文字 54 如何正確顯示包含標籤字元的串 55 串太長時如何在其末尾顯示乙個省略號 56 如何快速地格式化乙個 c...
Visual C 程式設計技巧小結
example handle hinstance afxgetinstancehandle 2.如何通過 獲得應用程式主視窗的指標?主視窗的 指標儲存在cwinthread m pmainwnd中,呼叫 afxgetmainwnd實現。afxgetmainwnd showwindow sw show...
Visual C 的程式設計技巧
山東科技大學智慧型工程研究所 楊在春 何明祥 microsoft visual c 是一種視覺化程式語言,因功能強大而受到廣大程式設計人員的青睞。但是,由於vc 的應用程式框架結構非常複雜,使得許多初學者望而卻步。本文通過對設定檢視背景顏色和改變對話方塊標題的幾種實現方法的分析研究,揭示了vc 程式...