亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap42.htm

?? 經典的C入門教程,想學習VC的朋友們可以看一下
?? HTM
字號:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>自定標題的繪制</title>
<link rel="stylesheet" href="../../../include/style.css">
</head>

<body>
<font SIZE="2">

<p><small><a href="../../../index.htm">首頁</a> &gt;&gt; <a href="../../program.htm">程序設計</a> 
  &gt;&gt; <a href="../cbuilder.htm">C++ Builder</a>&nbsp; &gt;&gt;&nbsp; </small>自定標題的繪制<br>
</p>

<p align="left"><!--webbot bot="ImageMap" rectangle=" (40,1) (71, 23)  chap43.htm" rectangle=" (4,1) (36, 23)  chap41.htm" src="../ch1/NextBack.gif" width="72" height="24" alt="NextBack.gif (743字節)" border="0" startspan --><MAP NAME="FrontPageMap"><AREA SHAPE="RECT" COORDS="40, 1, 71, 23" HREF="chap43.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap41.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch4/chap42.htm/map"><img ismap usemap="#FrontPageMap" border="0" height="24" alt="NextBack.gif (743字節)" src="../ch1/NextBack.gif" width="72"></a><!--webbot bot="ImageMap" endspan i-checksum="23282" --></p>
</font>

<p align="left"><font SIZE="2">自定標題的繪制</font></p>

<p><font SIZE="2">由於我們要使用自定的標題,所以你必須將程式所使用的 
TForm的BorderStyle性質設為 bsNone,如此你的TForm就不會有標題棒了。 </font></p>

<p><font SIZE="2">再來你就必須自行繪制標題棒,我們希望繪制一個位於左於的標題,因此我們必須處理TForm的OnPaint事件,然後在此事件中繪制標題棒。以下即為其事件處理函式: 
</font></p>

<p><font SIZE="2">void __fastcall TForm1::FormPaint(TObject *Sender)</font> </p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; RECT rc;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; ::SetRect(&amp;rc,0,0,ClientWidth,ClientHeight);</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; DrawButtonFace(Canvas,rc,1);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Pen-&gt;Color=clGreen;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Brush-&gt;Color=clGreen;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Rectangle(0,0,20,ClientHeight);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; :// 以下略去</font> </p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">你可以看到,我們畫出一個寬為20,顏色為綠色的標題棒。因此我們處理WM_NCHITTEST訊息的處理函式也必須做相對應的修改: 
</font></p>

<p><font SIZE="2">void __fastcall TForm1::OnNcHitTest(TMessage&amp; Msg)</font> </p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; TPoint pt;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; pt.x=LOWORD(Msg.LParam);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; pt.y=HIWORD(Msg.LParam);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; pt =ScreenToClient(pt);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; RECT rc;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp; </font> <font SIZE="2">::SetRect(&amp;rc,0,0,20,ClientHeight);</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; if (PtInRect(&amp;rc,pt))</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Msg.Result = HTCAPTION;</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; else</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DefaultHandler(&amp;Msg);</font> 
</p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">OnNcHitTest函式首先取得目前滑鼠所在點,注意,WM_NCHITTEST訊息所傳入的點為相對於螢幕的絕對座標,因此在取得該點後必須利用ScreenToClient函數將它轉為TForm的相對座標值,然後再據以判斷是否落於我們所定義的標題棒范圍內,若是則傳回HTCAPTION值,否則就交由內定的處理函式DefaultHandler來處理。如此就完成了一個位於左方的標題棒了。 
</font></p>

<p><font SIZE="2" color="#FF0000">旋轉文字的輸出</font></p>

<p><font SIZE="2">仔細觀察圖一,你會發現它所使用的標題字元的方向,已經因應標題棒的轉向而成為90旋轉的文字,這是如何達成的呢?</font></p>

<p><font SIZE="2">其實說穿了沒什麼,只是利用傳統SDK的繪圖方法來畫出來的。因為在C++Builder的TFont物件并沒有定義文字旋轉的屬性,所以我們只好透過傳統的GDI繪圖方法來達成這個目標。 
</font></p>

<p><font SIZE="2">char* msg=Caption.c_str();</font> </p>

<p><font SIZE="2">LOGFONT fontRec;</font> </p>

<p><font SIZE="2">memset(&amp;fontRec,0,sizeof(LOGFONT));</font> </p>

<p><font SIZE="2">fontRec.lfHeight = -13;</font> </p>

<p><font SIZE="2">fontRec.lfWeight = FW_NORMAL;</font> </p>

<p><font SIZE="2">fontRec.lfEscapement = 900; // 旋轉文字的關鍵</font> </p>

<p><font SIZE="2">lstrcpy(fontRec.lfFaceName,&quot;細明體&quot;);</font> </p>

<p><font SIZE="2">HFONT hFont=CreateFontIndirect(&amp;fontRec);</font> </p>

<p><font SIZE="2">HFONT hOld=::SelectObject(Canvas-&gt;Handle,hFont);</font> </p>

<p><font SIZE="2">::SetRect(&amp;rc,0,0,20,ClientHeight);</font> </p>

<p><font SIZE="2">::SetTextColor(Canvas-&gt;Handle,RGB(255,255,255));</font> </p>

<p><font SIZE="2">::TextOut(Canvas-&gt;Handle,3,ClientHeight-3,msg,lstrlen(msg)); </font></p>

<p><font SIZE="2">::SelectObject(Canvas-&gt;Handle,hOld);</font> </p>

<p><font SIZE="2">::DeleteObject(hFont);</font></p>

<p><font SIZE="2">以上的程式我不打算詳加說明,簡單地說,它就是建立一個旋轉90度的字形,然後將字串以此字形畫於螢幕上,此段程式碼的關鍵在於你必須知道Canvas-&gt;Handle即是代表GDI繪圖的HDC。其馀的函式說明你都可以在一般講解傳統Windows 
SDK繪圖的書籍中找到。</font></p>

<p><font SIZE="2">由此我們也可以得到一個經驗:雖然C++Builder的快速程式發展環境已經取代了傳統SDK式的程式設計中大部份的工作,然而通曉一些必要的SDK程式技巧卻可以使你上一層樓。所以我建議你在『行有馀力』時,不妨可以看看SDK相關書籍,充實基礎知識。或許我們可以名之為『立足 
BCB,放眼 SDK』的學習態度吧!</font></p>

<p><font SIZE="2" color="#FF0000">其他說明</font></p>

<p><font SIZE="2">在本程式中因為TForm的BorderStyle性質為bsNone。因此并沒有外框,為了美化視窗,所以我寫了幾個輔助函式來繪出立體框。若你在其他程式中有類似的需求,也可以使用之。 
</font></p>

<p><font SIZE="2">void DoRect(TCanvas* Canvas,RECT&amp; rect,COLORREF cTopColor,COLORREF 
cBottomColor)</font> </p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; POINT p[3];</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[0].x = rect.right;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[0].y = rect.top;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[1].x = rect.left;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[1].y = rect.top;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[2].x = rect.left;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[2].y = rect.bottom;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Pen-&gt;Color=TColor(cTopColor);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Polyline(p,3);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[1].x = rect.right;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[1].y = rect.bottom;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; p[2].x--;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Pen-&gt;Color=TColor(cBottomColor);</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Polyline(p,3);</font> </p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">void Frame3D(TCanvas* Canvas,RECT&amp; rect,COLORREF cTopColor,COLORREF 
cBottomColor,int iColWidth)</font> </p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; rect.bottom--; rect.right--;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; while (iColWidth &gt; 0)</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; {</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iColWidth--;</font> </p>

<p><font SIZE="2"> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DoRect(Canvas,rect,cTopColor,cBottomColor);</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InflateRect(&amp;rect,-1,-1);</font> 
</p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; }</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; rect.bottom++; rect.right++;</font> </p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">void DrawButtonFace(TCanvas* Canvas,RECT&amp; rect,int nBevelWidth)</font> 
</p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;Brush-&gt;Color=clBtnFace;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Canvas-&gt;FillRect(TRect(rect));</font> </p>

<p><font SIZE="2"> 
&nbsp;&nbsp;&nbsp; Frame3D(Canvas,rect,::GetSysColor(COLOR_BTNSHADOW),::GetSysColor 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>

<p><font SIZE="2"> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (COLOR_WINDOWFRAME),nBevelWidth);</font> 
</p>

<p><font SIZE="2"> 
&nbsp;&nbsp;&nbsp; Frame3D(Canvas,rect,::GetSysColor(COLOR_BTNHIGHLIGHT),::GetSysColor 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>

<p><font SIZE="2"> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (COLOR_BTNSHADOW),nBevelWidth);</font> 
</p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">這叁個函式中最重要的就是 DrawButtonFace,它是用來在一個矩形范圍中畫出一個類似Button的立體方框,在本程式中我用它來畫出TForm的邊框。你可以由圖一看出它的視覺效果。</font> 
</p>

<p><font SIZE="2">程式的改進</font></p>

<p><font SIZE="2">前面我們提到改進bsNone視窗視覺效果的方式是利用自行撰寫的DrawButtonFace函式來達成,它雖不失為一個解決問題的方法,但是卻也因此增加了程式的復雜度,再來我為你示范一種利用改寫CreateParams函式的技巧來達成類似功能的方法。 
</font></p>

<p><font SIZE="2">CreateParams是一個虛擬函式,你可以經由它來修改windows的style,因為原先在C++Builder中所定義的Form是一個Dialog(交談窗),而交談窗的外形內定是有標題棒的,然而如果我們如前面的方法將外框設為bsNone 
的話,那就必須自行畫出假的視窗外框,否則看起來不好看。</font></p>

<p><font SIZE="2">但是在Windows系統中除了前面的Dialog式的視窗之外,還提供了另一種POPUP式的視窗,只不過在C++Builder并未提供該選項罷了。因此我們其實可以透過改寫CreateParams的方式來產生WS_POPUP形式的視窗,如此一來我們就不必煞費周章地撰寫畫外框的函式了。它的程式其實很簡單,只是將Params.Style的WS_DLGFRAME 
(代表使用Dialog外框),改成另一種WS_POPUP 
(彈出式視窗)。要做到以上效果,只要利用and及or運算就可以達到了。以下即為其程式碼: 
</font></p>

<p><font SIZE="2">void __fastcall TForm1::CreateParams(TCreateParams&amp; Params)</font> </p>

<p><font SIZE="2">{</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; TForm::CreateParams(Params);</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Params.Style |= WS_POPUP;</font> </p>

<p><font SIZE="2">&nbsp;&nbsp;&nbsp; Params.Style ^= WS_DLGFRAME;</font> </p>

<p><font SIZE="2">}</font></p>

<p><font SIZE="2">圖二為改寫後的程式執行結果,不僅程式簡潔了許多,而且外觀也較好看,那是因為我們在畫標題棒時,不會像前面一樣將外框蓋住的緣故。 
</font></p>

<p><img SRC="IMG00002.GIF" WIDTH="364" HEIGHT="216"></p>

<p><font SIZE="2">圖二 利用CreateParams技巧的新程式。<br>
</font></p>

<p align="right"><font SIZE="2"><!--webbot bot="ImageMap" rectangle=" (40,1) (71, 23)  chap43.htm" rectangle=" (4,1) (36, 23)  chap41.htm" src="../ch1/NextBack.gif" width="72" height="24" alt="NextBack.gif (743字節)" border="0" startspan --><MAP NAME="FrontPageMap1"><AREA SHAPE="RECT" COORDS="40, 1, 71, 23" HREF="chap43.htm"><AREA SHAPE="RECT" COORDS="4, 1, 36, 23" HREF="chap41.htm"></MAP><a href="../../../_vti_bin/shtml.exe/program/C++/ch4/chap42.htm/map1"><img ismap usemap="#FrontPageMap1" border="0" height="24" alt="NextBack.gif (743字節)" src="../ch1/NextBack.gif" width="72"></a><!--webbot bot="ImageMap" endspan i-checksum="41510" --></font></p>
<font SIZE="2">

<p><small><a href="../../../index.htm">首頁</a> &gt;&gt; <a href="../../program.htm">程序設計</a> 
  &gt;&gt; <a href="../cbuilder.htm">C++ Builder</a>&nbsp; &gt;&gt;&nbsp; </small>自定標題的繪制</p>
</font>
</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久人人做人人爰| 偷拍一区二区三区四区| 成人免费视频app| 26uuu亚洲综合色欧美| 精彩视频一区二区三区| 欧美tickle裸体挠脚心vk| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线成人av网站| 日韩激情中文字幕| 久久丝袜美腿综合| 成人av在线影院| 亚洲高清视频在线| 欧美精品一区男女天堂| 99精品欧美一区二区三区小说| 亚洲欧美日韩久久精品| 欧美一级片在线看| 懂色一区二区三区免费观看| 一区二区三区国产精品| 精品国产一区二区在线观看| a在线欧美一区| 精品一区二区免费看| 亚洲黄色免费电影| 久久久久久黄色| 91精品国产日韩91久久久久久| 成人深夜在线观看| 日本视频一区二区三区| 亚洲日本欧美天堂| 精品av久久707| 欧美久久久久久久久中文字幕| 粉嫩高潮美女一区二区三区| 免费在线观看不卡| 亚洲一区二区成人在线观看| 国产精品欧美一区喷水| 久久久久久久综合日本| 欧美一级艳片视频免费观看| 欧美在线免费播放| 欧美色视频在线| 色女孩综合影院| 99久久99久久精品免费观看| 亚洲电影在线播放| 国产欧美一区二区精品性| 欧美精品国产精品| 日本韩国精品一区二区在线观看| a4yy欧美一区二区三区| 成年人网站91| 91麻豆国产福利精品| av电影在线不卡| 99精品久久免费看蜜臀剧情介绍| 国产乱码精品一区二区三区忘忧草 | 九一久久久久久| 精品影视av免费| 国产99精品国产| 不卡的av电影| 欧美日韩视频在线观看一区二区三区 | 日韩精品欧美成人高清一区二区| 亚洲一区二区三区四区在线| 成人三级在线视频| 在线观看一区二区精品视频| 在线不卡中文字幕| 久久综合色天天久久综合图片| 国产清纯在线一区二区www| 中文字幕在线一区| 婷婷成人综合网| 韩国女主播一区| 色乱码一区二区三区88| 日韩亚洲欧美在线| 成人免费一区二区三区在线观看| 亚洲综合在线视频| 麻豆91精品视频| av高清不卡在线| 欧美日韩国产乱码电影| 中文欧美字幕免费| 日韩国产欧美视频| 91一区二区三区在线观看| 日韩精品一区二区三区视频播放| 亚洲少妇最新在线视频| 在线精品亚洲一区二区不卡| 久久综合视频网| 三级不卡在线观看| 色婷婷亚洲婷婷| 亚洲免费色视频| 国产亚洲午夜高清国产拍精品 | 欧美一区二区国产| 91久久精品一区二区三区| 久久99精品久久久| 亚洲成a人片在线观看中文| 九九在线精品视频| 欧美日本高清视频在线观看| 天天综合网天天综合色| 欧美国产日产图区| 欧美二区三区的天堂| 国产精品一二二区| 亚洲成人7777| 久久综合视频网| 欧美色涩在线第一页| 国产福利精品导航| 三级亚洲高清视频| 国产精品久久久久久亚洲伦| 欧美一二区视频| 91蝌蚪porny九色| 国产乱码字幕精品高清av| 亚洲电影在线播放| 国产精品久久久久久亚洲伦| 久久综合九色欧美综合狠狠| 欧美日韩五月天| 韩国av一区二区三区| 日本一区二区视频在线观看| 成人永久看片免费视频天堂| 中文字幕五月欧美| 欧美亚洲高清一区| 国精产品一区一区三区mba桃花 | 婷婷一区二区三区| 欧美成人性福生活免费看| 国产91在线观看| 亚洲va欧美va天堂v国产综合| 日韩一级高清毛片| 99精品国产热久久91蜜凸| 天天色综合天天| 欧美经典一区二区| 欧美男人的天堂一二区| 国产成人av一区二区三区在线观看| 亚洲视频在线观看三级| 欧美成人精品1314www| 91精彩视频在线| 东方欧美亚洲色图在线| 日韩 欧美一区二区三区| 国产精品精品国产色婷婷| 日韩亚洲欧美在线| 欧美久久久影院| 91黄视频在线| 91久久香蕉国产日韩欧美9色| 精品一区二区三区免费观看| 亚洲电影一区二区| 亚洲欧美另类图片小说| 国产精品久久久久久妇女6080 | 国产欧美日韩久久| 久久综合九色综合97婷婷女人 | 欧美三级韩国三级日本一级| av亚洲精华国产精华| 国产成人精品一区二区三区网站观看| 亚洲超丰满肉感bbw| 亚洲天堂中文字幕| 亚洲综合成人网| 亚洲成av人片一区二区梦乃| 日本sm残虐另类| 青草国产精品久久久久久| 免费观看成人av| 国产一区二区在线看| 岛国一区二区三区| 97se亚洲国产综合自在线观| 色呦呦一区二区三区| 欧美网站大全在线观看| 精品污污网站免费看| 欧美一区二区美女| 国产视频一区二区在线观看| 中文字幕一区二区三区乱码在线 | 国产精品传媒在线| 亚洲午夜久久久久久久久电影院| 亚洲成a人片综合在线| 国产传媒一区在线| 在线观看免费成人| 久久综合色婷婷| 亚洲天堂免费看| 性久久久久久久久| 成人免费高清在线| 日韩欧美国产一区二区在线播放 | 亚洲自拍偷拍综合| 成人免费高清视频在线观看| www国产精品av| 精品制服美女丁香| 欧美一级片免费看| 偷拍自拍另类欧美| 欧美精选午夜久久久乱码6080| 亚洲欧美一区二区视频| 国产91露脸合集magnet| 精品国精品国产| 国产黄色精品视频| 国产日韩v精品一区二区| 国产白丝精品91爽爽久久| 日韩欧美一区中文| 久草在线在线精品观看| 精品va天堂亚洲国产| 国产a久久麻豆| 亚洲国产精品99久久久久久久久| 国产一区二区91| 国产精品久久久久久久久免费桃花 | 日本一区二区三区久久久久久久久不 | 亚洲一区二区在线免费观看视频| 日本道免费精品一区二区三区| 亚洲欧美成aⅴ人在线观看| 欧美性色黄大片| 捆绑调教一区二区三区| 国产精品青草综合久久久久99| 在线视频观看一区| 国产原创一区二区| 中文字幕在线不卡一区二区三区| 一本一本久久a久久精品综合麻豆| 日韩精品电影在线观看| 欧美激情资源网| 日韩欧美中文一区|