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

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

?? wtl for mfc programmers, part vii - splitter windows - wtl.htm

?? WT教程中文版 內有詳細的介紹 包括各個方面
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
      src="images/panecont7.png" 
      width=356 align=bottom border=0></P>
      
<H3><A name=pcclosebtn></A><font color="#FFFF66">關閉按鈕和消息處理</font></H3>
      
<P>當用戶用鼠標單擊Close按鈕時,窗格容器向父窗口發送一個WM_COMMAND消息,命令的ID是ID_PANE_CLOSE。如果你在分隔窗口中使用了窗格容器,你需要響應整個消息,調用SetSinglePaneMode()隱藏這個窗格。(但是,不要忘了提供用戶一個重新顯示窗格的方法!)</P>
<p>CPaneContainer的消息鏈也用到了FORWARD_NOTIFICATIONS()宏,和CSplitterWindow一樣,窗格容器在客戶窗口和它的父窗口之間傳遞通知消息。在ClipSpy這個例子中,在list控件和主框架窗口之間隔了兩個窗口(窗格容器和分隔窗口),但是FORWARD_NOTIFICATIONS()宏可以確保所有的通知消息被送到主框架窗口。
<H2><A name=advancedsplitter></A><font color="#FFFF66">高級功能</font></H2>
      
<P>在這一節,我將介紹一些如何使用WTL的高級界面特性。</P>
      <H3><A name=nested></A><font color="#FFFF66">嵌套的分隔窗口</font></H3>
      
<P>如果你要編寫一個email的客戶端程序,你可能需要使用嵌套的分隔條,一個水平的和一個垂直的分隔條。使用WTL很容易做到這一點:創建一個分隔窗口作為另一個分隔窗口的子窗口。</P>
<p>為了演示這種效果,我將為ClipSpy添加一個水平分隔窗口。首先,添加一個名為m_wndHorzSplitter的CHorSplitterWindow類型的成員,像創建垂直分隔窗口m_wndVertSplitter那樣創建這個水平分隔窗口,使水平分隔窗口m_wndHorzSplitter成為頂層窗口,將m_wndVertSplitter創建成m_wndHorzSplitter的子窗口。最后將m_hWndClient設置為m_wndHorzSplitter,因為現在水平分隔窗口占據整個主框架窗口的客戶區。</p>
<PRE><font color="#0033FF">LRESULT CMainFrame::OnCreate()
{
<SPAN class=cpp-comment>//...</SPAN>
    <SPAN class=cpp-comment>// Create the splitter windows.</SPAN>
    <B>m_wndHorzSplit.Create ( *<SPAN class=cpp-keyword>this</SPAN>, rcDefault, NULL, 
                           dwSplitStyle, dwSplitExStyle );
 
    m_wndVertSplit.Create ( m_wndHorzSplit, rcDefault, NULL, 
                           dwSplitStyle, dwSplitExStyle );</B>
<SPAN class=cpp-comment>//...</SPAN>
<B>    <SPAN class=cpp-comment>// Set the horizontal splitter as the client area window.</SPAN>
    m_hWndClient = m_wndHorzSplit;

    <SPAN class=cpp-comment>// Set up the splitter panes</SPAN>
    m_wndPaneContainer.SetClient ( m_wndFormatList );
    m_wndHorzSplit.SetSplitterPane ( SPLIT_PANE_TOP, m_wndVertSplit );
    m_wndVertSplit.SetSplitterPanes ( m_wndPaneContainer, m_wndDataViewer );
</B><SPAN class=cpp-comment>//...</SPAN>
}</font></PRE>
<P>最終的結果是這個樣子的:</P>
      
<P><IMG height=323 alt=" [Horz splitter w/empty pane - 5K] " 
      src="images/emptyhsplit7.png" 
      width=388 align=bottom border=0></P>
      
<H3><A name=axinpane></A><font color="#FFFF66">在窗格中使用ActiveX控件</font></H3>
      
<P>在分隔窗口的窗格中使用ActiveX控件與在對話框中使用ActiveX控件類似,使用CAxWindow類的方法在運行是創建控件,然后將這個CAxWindow指定給分隔窗口的窗格。下面演示了如何在水平分隔窗口下面的窗格中使用瀏覽器控件:</P>
<PRE>    <font color="#0033FF"><B><SPAN class=cpp-comment>// Create the bottom pane (browser)</SPAN>
CAxWindow wndIE;
<SPAN class=cpp-keyword>const</SPAN> DWORD dwIEStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
                        WS_HSCROLL | WS_VSCROLL;

    wndIE.Create ( m_wndHorzSplit, rcDefault, 
                  _T(<SPAN class=cpp-string>"http://www.codeproject.com"</SPAN>), dwIEStyle );
</B>
    <SPAN class=cpp-comment>// Set the horizontal splitter as the client area window.</SPAN>
    m_hWndClient = m_wndHorzSplit;

    <SPAN class=cpp-comment>// Set up the splitter panes</SPAN>
    m_wndPaneContainer.SetClient ( m_wndFormatList );
    <B>m_wndHorzSplit.SetSplitterPanes ( m_wndVertSplit, wndIE );
</B>    m_wndVertSplit.SetSplitterPanes ( m_wndPaneContainer, m_wndDataViewer );</font></PRE>
<H3><A name=specialdraw></A><font color="#FFFF66">特殊繪制</font></H3>
      
<P>如果你想改變分隔條的外觀,例如在上面使用一些材質,你可以從CSplitterWindowImpl派生新類并重載DrawSplitterBar()函數。如果你只是想調整一下分隔條的外觀,可以復制CSplitterWindowImpl類的函數,然后稍做修改。下面的例子就在分隔條中使用了斜交叉線圖案。</P>
<PRE><SPAN class=cpp-keyword><font color="#0033FF">template</font></SPAN> <font color="#0033FF">&lt;<SPAN class=cpp-keyword>bool</SPAN> t_bVertical = <SPAN class=cpp-keyword>true</SPAN>&gt;
<SPAN class=cpp-keyword>class</SPAN> CMySplitterWindowT : 
    <SPAN class=cpp-keyword>public</SPAN> CSplitterWindowImpl&lt;CMySplitterWindowT&lt;t_bVertical&gt;, t_bVertical&gt;
{
<SPAN class=cpp-keyword>public</SPAN>:
    DECLARE_WND_CLASS_EX(_T(<SPAN class=cpp-string>"My_SplitterWindow"</SPAN>), 
                         CS_DBLCLKS, COLOR_WINDOW)
 
    <SPAN class=cpp-comment>// Overrideables</SPAN>
    <SPAN class=cpp-keyword>void</SPAN> DrawSplitterBar(CDCHandle dc)
    {
    RECT rect;
 
        <SPAN class=cpp-keyword>if</SPAN> ( m_br.IsNull() )
            m_br.CreateHatchBrush ( HS_DIAGCROSS, 
                                    t_bVertical ? RGB(<SPAN class=cpp-literal>255</SPAN>,<SPAN class=cpp-literal>0</SPAN>,<SPAN class=cpp-literal>0</SPAN>) 
                                                : RGB(<SPAN class=cpp-literal>0</SPAN>,<SPAN class=cpp-literal>0</SPAN>,<SPAN class=cpp-literal>255</SPAN>) );
 
        <SPAN class=cpp-keyword>if</SPAN> ( GetSplitterBarRect ( &amp;rect ) )
        {
            dc.FillRect ( &amp;rect, m_br );
 
            <SPAN class=cpp-comment>// draw 3D edge if needed</SPAN>
            <SPAN class=cpp-keyword>if</SPAN> ( (GetExStyle() &amp; WS_EX_CLIENTEDGE) != <SPAN class=cpp-literal>0</SPAN>)
                dc.DrawEdge(&amp;rect, EDGE_RAISED, 
                            t_bVertical ? (BF_LEFT | BF_RIGHT) 
                                        : (BF_TOP | BF_BOTTOM));
        }
    }
 
<SPAN class=cpp-keyword>protected</SPAN>:
    CBrush m_br;
};
 
<SPAN class=cpp-keyword>typedef</SPAN> CMySplitterWindowT&lt;<SPAN class=cpp-keyword>true</SPAN>&gt;    CMySplitterWindow;
<SPAN class=cpp-keyword>typedef</SPAN> CMySplitterWindowT&lt;<SPAN class=cpp-keyword>false</SPAN>&gt;   CMyHorSplitterWindow;</font></PRE>
      
<P>這就是結果(將分隔條變寬是為了更容易看到效果):</P>
      
<P><IMG height=349 alt=" [custom drawn bars - 14K] " 
      src="images/custombars7.png" 
      width=413 align=bottom border=0></P>
      
<H2><A name=pcoverrides></A><font color="#FFFF66">窗格容器內的特殊繪制</font></H2>
      
<P>CPaneContainer也有幾個函數可以重載,用來改變窗格容器的外觀。你可以從CPaneContainerImpl派生新類并重載你需要的方法,例如:</P>
<PRE><SPAN class=cpp-keyword><font color="#0033FF">class</font></SPAN><font color="#0033FF"> CMyPaneContainer :
    <SPAN class=cpp-keyword>public</SPAN> CPaneContainerImpl&lt;CMyPaneContainer&gt;
{
<SPAN class=cpp-keyword>public</SPAN>:
    DECLARE_WND_CLASS_EX(_T(<SPAN class=cpp-string>"My_PaneContainer"</SPAN>), <SPAN class=cpp-literal>0</SPAN>, -<SPAN class=cpp-literal>1</SPAN>)
<SPAN class=cpp-comment>//... overrides here ...</SPAN>
};</font></PRE>
      
<P>一些更有意思的方法是:</P>
<PRE><SPAN class=cpp-keyword><font color="#0033FF">void</font></SPAN><font color="#0033FF"> CalcSize()</font></PRE>
      
<P>調用CalcSize()函數只是為了設置m_cxyHeader,這個變量控制著窗格容器的頂部區域的寬度和高度。不過SetPaneContainerExtendedStyle()函數中有一個BUG,導致窗格從水平切換到垂直時沒有調用派生類的CalcSize()方法,你可以將CalcSize()調用改為pT-&gt;CalcSize()來修補這個BUG。</P>
<PRE><font color="#0033FF">HFONT GetTitleFont()</font></PRE>
      
<P>這個方法返回一個HFONT,它被用來畫頂部區域的文字,默認的值是調用GetStockObject(DEFAULT_GUI_FONT)得到的字體,也就是MS 
  Sans Serif。如果你想改稱更現代的Tahoma字體,你可以重載GetTitleFont()方法,返回你創建的Tahoma字體。</P>
<PRE><font color="#0033FF">BOOL GetToolTipText(LPNMHDR lpnmh)</font></PRE>
      
<P>重載這個方法提供鼠標移到Close按鈕時彈出的提示信息,這個函數實際上是TTN_GETDISPINFO的相應函數,你可以將lpnmh轉換成NMTTDISPINFO*,并設置這個數據結構內相應的成員變量。記住一點,你必須檢查通知代碼,它可能是TTN_GETDISPINFO或TTN_GETDISPINFOW,你需要有區別的訪問這兩個數據結構。</P>
<PRE><SPAN class=cpp-keyword><font color="#0033FF">void</font></SPAN><font color="#0033FF"> DrawPaneTitle(CDCHandle dc)</font></PRE>
      
<P>你可以重載這個方法自己畫頂部區域,你可以用GetClientRect()和m_cxyHeader來計算頂部區域的范圍。下面的例子演示了在水平容器的頂部區域畫一個漸變填充的背景:</P>
<PRE><SPAN class=cpp-keyword><font color="#0033FF">void</font></SPAN><font color="#0033FF"> CMyPaneContainer::DrawPaneTitle ( CDCHandle dc )
{
RECT rect;
 
    GetClientRect(&amp;rect);
 
TRIVERTEX tv[] = { 
    { rect.left, rect.top, <SPAN class=cpp-literal>0xff00</SPAN> },
    { rect.right, rect.top + m_cxyHeader, <SPAN class=cpp-literal>0</SPAN>, <SPAN class=cpp-literal>0xff00</SPAN> } 
};
GRADIENT_RECT gr = { <SPAN class=cpp-literal>0</SPAN>, <SPAN class=cpp-literal>1</SPAN> };
 
    dc.GradientFill ( tv, <SPAN class=cpp-literal>2</SPAN>, &amp;gr, <SPAN class=cpp-literal>1</SPAN>, GRADIENT_FILL_RECT_H );
}</font></PRE>
      
<P>例子工程代碼中演示了對這幾個方法的重載,使得結果看起來是這個樣子的:</P>
      
<P><IMG height=282 alt=" [Custom drawing in a pane cont. - 6K] " 
      src="images/custompc7.png" 
      width=383 align=bottom border=0></P>
      
<P>從上面的圖中可以看到,這個演示程序有一個Splitters菜單,通過它可以在各種風格的分隔條(包括自畫風格)和窗格容器之間切換,比較它們之間的異同。你還可以鎖定分隔條的位置,這是通過設置和取消SPLIT_NONINTERACTIVE擴展風格來實現的。</P>
      
<H2><A name=bonus></A><font color="#FFFF66">在狀態欄顯示進度條</font></H2>
      
<P>正如我在前幾篇文章中做得保證那樣,新的ClipSpy也演示了如何在狀態條上創建進展條,它和MFC版本得功能一樣,幾個相關得步驟是:</P>
      
<OL>
  <LI>得到狀態條第一個窗格得坐標范圍RECT
  <LI>創建一個進展條作為狀態條得子窗口,窗口大小就是哪個狀態條窗格得大小
  <LI>隨著edit控件被填充的同時更新進展條的位置</LI>
</OL>
      
<P>這些代碼在CMainFrame::CreateProgressCtrlInStatusBar()函數中。</P>
             
<H2><A name=upnext></A><font color="#FFFF66">繼續</font></H2>
      
<P>在第八章我將介紹屬性頁和向導對話框的用法</P>

<H2><A name=references></A>參考</H2>
      <P><A href="http://www.codeproject.com/wtl/SplitPane.asp">WTL Splitters and Pane Containers</A> by Ed Gadziemski</P>   

<H2><A name=revisionhistory></A><font color="#FFFF66">修改記錄</font></H2>
      
<P>July 9, 2003: 文章第一次發布。 
</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品热久久久久夜色精品三区| 欧美一区二区三区精品| 精品1区2区在线观看| 1024精品合集| 国产精品中文字幕日韩精品 | 久久精品噜噜噜成人av农村| 99精品久久99久久久久| 久久综合五月天婷婷伊人| 日韩精品1区2区3区| 在线影视一区二区三区| 日韩一区二区高清| 久久精品国产亚洲5555| 日韩美女一区二区三区四区| 蜜臀av在线播放一区二区三区| 欧美精品视频www在线观看| 成人一区在线看| 亚洲欧美一区二区三区孕妇| 欧美日韩亚洲高清一区二区| 亚洲精品精品亚洲| 在线视频欧美区| 亚洲福利一区二区| 欧美成人a∨高清免费观看| 激情欧美一区二区三区在线观看| 国产日韩精品一区二区三区 | 国产欧美中文在线| 色av综合在线| 国产精品123| 日本大胆欧美人术艺术动态| 国产精品理论片| 精品久久国产字幕高潮| 91同城在线观看| 国产成人精品免费在线| 午夜在线成人av| 国产精品素人一区二区| 精品免费国产一区二区三区四区| 成av人片一区二区| 国产精品一区二区免费不卡 | 国产福利精品一区| 精品在线一区二区| 日韩avvvv在线播放| 一区二区在线看| 国产精品久久久久一区二区三区共 | 日韩欧美二区三区| 欧美日韩国产综合视频在线观看| av成人免费在线| 91在线免费播放| 色综合中文字幕| 色婷婷狠狠综合| 欧美亚洲综合久久| 欧美老女人第四色| 欧美人动与zoxxxx乱| 7777女厕盗摄久久久| 欧美嫩在线观看| 日韩三级电影网址| 2020日本不卡一区二区视频| 精品国产一区二区在线观看| 久久综合狠狠综合| 国产亚洲欧美一级| 亚洲精选一二三| 粉嫩av一区二区三区在线播放| a亚洲天堂av| 欧美性videosxxxxx| 91精品免费观看| 国产精品区一区二区三区| 亚洲成人激情自拍| 国产精品一区二区久激情瑜伽| 成人不卡免费av| 欧美精品久久一区二区三区 | 99re这里只有精品首页| 欧美日韩一二区| 国产精品嫩草影院av蜜臀| 亚洲在线视频一区| 国产99久久久国产精品潘金| 欧美无人高清视频在线观看| 国产日韩欧美亚洲| 午夜一区二区三区在线观看| 国产一区二区在线影院| 在线精品视频免费播放| 精品福利视频一区二区三区| 亚洲精品福利视频网站| 国产成人小视频| 欧美r级电影在线观看| 亚洲一区二区在线观看视频| 日韩精品一区二区在线| 亚洲成人av资源| 欧美在线观看一区二区| 亚洲欧美综合另类在线卡通| 国产在线视频精品一区| 日韩女优制服丝袜电影| 爽爽淫人综合网网站| 2020日本不卡一区二区视频| 韩国av一区二区三区四区 | 欧美日韩视频不卡| 一区二区三区四区在线播放 | 中文av字幕一区| 国产成人免费网站| 亚洲欧洲性图库| 91捆绑美女网站| 一区二区三区.www| 欧美日韩一级大片网址| 婷婷六月综合亚洲| 91精品国产综合久久精品麻豆| 日本va欧美va欧美va精品| 精品国产精品网麻豆系列| 久久99久久久欧美国产| 日韩精品一区在线观看| 成人午夜电影久久影院| 国产精品污网站| 欧美伊人久久久久久久久影院| 性久久久久久久久久久久| 精品美女在线播放| jlzzjlzz欧美大全| 日本午夜一本久久久综合| 久久先锋影音av| 欧美性受极品xxxx喷水| 日韩高清在线一区| 国产亚洲精品aa午夜观看| 一本到高清视频免费精品| 免费观看久久久4p| 亚洲国产激情av| 日韩欧美在线网站| 日韩精品专区在线| 91免费国产在线| 丁香啪啪综合成人亚洲小说 | 欧美一区2区视频在线观看| 高清视频一区二区| 亚洲妇女屁股眼交7| 久久精品综合网| 91精品国产综合久久久久久漫画| 成人黄页在线观看| 国产在线麻豆精品观看| 蜜桃av一区二区在线观看 | 久久亚洲综合色一区二区三区| 成人精品一区二区三区四区| 久久精品免费看| 日本特黄久久久高潮 | 国产视频亚洲色图| 欧美成人一区二区三区在线观看 | 91影视在线播放| 粉嫩一区二区三区在线看| 国产精品一区二区黑丝| 欧美aaa在线| 日韩高清不卡一区| 亚洲成人av中文| 污片在线观看一区二区| 午夜视频一区二区| 奇米影视一区二区三区| 日本免费在线视频不卡一不卡二| 亚洲一二三专区| 亚洲精品国产高清久久伦理二区| 国产免费久久精品| 中文字幕一区二区三区色视频 | 国产天堂亚洲国产碰碰| 国产蜜臀97一区二区三区| 国产精品夫妻自拍| 一区二区三区在线免费视频| 日韩和的一区二区| 日本aⅴ免费视频一区二区三区| 麻豆精品国产91久久久久久| 麻豆精品国产91久久久久久| 国产一区不卡视频| 97国产精品videossex| 欧美性大战久久久久久久| 91精品久久久久久久91蜜桃 | 天堂午夜影视日韩欧美一区二区| 青青草97国产精品免费观看无弹窗版| 五月天欧美精品| 懂色av一区二区三区免费观看| 欧美综合亚洲图片综合区| 精品三级av在线| 亚洲精品免费一二三区| 精品一区二区三区香蕉蜜桃| 色综合久久中文综合久久牛| 欧美大片顶级少妇| 一区二区三区久久| 国产盗摄精品一区二区三区在线| 在线观看欧美精品| 国产欧美1区2区3区| 久久精品国产99| 欧美日韩不卡在线| 国产精品久久久久久久久晋中 | 69堂成人精品免费视频| 中文字幕精品在线不卡| 韩国欧美一区二区| 欧美视频精品在线观看| 一区二区三区日韩精品视频| av在线播放成人| 国产精品入口麻豆九色| 国产毛片精品国产一区二区三区| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美自拍偷拍色图| 99久久精品免费看| 国产精品色哟哟| 极品少妇xxxx精品少妇| 欧美日韩一区二区欧美激情 | 亚洲精品一区二区三区在线观看| 亚洲一区二区三区在线看| 色综合久久久久综合体| 亚洲精品国产无套在线观| 91成人免费电影|