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

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

?? flexible_splitter.shtml

?? mfc資源大全包含MFC編程各個方面的源碼
?? SHTML
字號:
<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
   <META NAME="Author" CONTENT="Chris Maunder">
   <title>Splitter Window - Outlook-style Flexible Splitter windows</title>
</HEAD>


<BODY BGCOLOR="#FFFFFF">
<table WIDTH="100%"><tr WIDTH="100%"><td align=center><!--#exec cgi="/cgi/ads.cgi"--><td></tr></table>

<CENTER><H3><FONT COLOR="#AOAO99">
The Outlook style: Flexible splitter windows
</FONT></H3></CENTER>

<CENTER><H3><HR></H3></CENTER>

<p>This article was contributed by <a href="mailto:stein@itcomputing.com">
Stein Roger Skaflotten</a>.

<p>Microsoft has for a long time recognized that MDI based applications are 
difficult to use for many users. For this reason they have tried many 
user-interface designs over the years - with mixed fortune.

<p>Many users find the new user interface concept in Outlook, FrontPage and 
NetMeeting very appealing because it makes it very easy to navigate between 
visually and logically separated views. In reality, the way the user interact
with Outlook and FrontPage is basically equivalent to an SDI application with
a tabbed view, and the technical issues regarding flexible splitter windows 
are the same - which is the subject of this article.

<p>Consider FrontPage: The only pane that is fixed in FrontPage is the navigation 
window at the left side of the application window. The other panes are dynamically 
created as needed. As an example, if the &quot;Folders&quot; view is selected, a
pane with two vertically separated views is presented and when the &quot;All 
Files&quot; view is selected, a pane with a single list view is presented and so 
on.

<p>So how can we imitate the Outlook behavior in our own application? The 
method I present here is just one way to do this. However, by design, this 
technique requires very little overhead code and we don't have to reimplement 
any MFC classes.

<p>The first issue is how to realize flexible splitter frames when CSplitterWnd 
obviously does not support this directly. The next thing is to find a way to 
replace views. However, the latter have been covered by numerous articles on 
<a HREF="http://www.codeguru.com/">www.codeguru.com</a> and other places on 
the Web so I don't go into details here.

<p>In a recent project I implemented the &quot;Outlook&quot; style using the 
technique described below. As in Outlook, the application had a fixed left-most
pane that was used to navigate through the different views. I implemented the 
navigation view as a listbox, but it could just as well been a CTreeView or 
CListView interface. Depending on the user selection the pane on the right 
presents views with, or without, its own splitter windows. In essence, what 
happens when an &quot;Outlook&quot;-pane selection is made is that the pane 
on the right is replaced.

<p>Let's first do the obvious and create two panes whereas the left is the
&quot;Outlook&quot; view and the second pane is a replaceable view.</p>

<PRE><TT><FONT COLOR="#990000">// Set up mainframe's splitter windows
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
  // Create the splitter window with two columns
  if (!m_wndSplitter.CreateStatic(this, 1, 2))
  {
    TRACE0(&quot;Failed to create splitter window\n&quot;);
    return FALSE;
  }

  // &quot;Outlook&quot; view first
  if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(COutlookView),
                                CSize(200, 0), pContext))
  {
    TRACE0(&quot;Failed to create outlook bar view\n&quot;);
    return FALSE;
  }

  // &quot;Flexible pane&quot;: The second pane may present its own
  // splitter windows.
  //
  // THIS PANE CAN BE EASILY REPLACED BY OTHER CONTAINER VIEWS THAT
  // (MAY) PRESENT OTHER SPLITTER WINDOWS ITSELF.
  if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CPaneContainerView),
                                CSize(0, 0), pContext))
  {
    TRACE0(&quot;Failed to create CPaneContainerView\n&quot;); 
    return FALSE;
  }
 
  // Set the active view
  SetActiveView((CView*) m_wndSplitter.GetPane(0, 0));

  // ok
  return TRUE;
}
</pre></font></tt>

<p>The view in the &quot;flexible&quot; pane may now present its own splitter 
windows:

<PRE><TT><FONT COLOR="#990000">// Create content of right pane
int CPaneContainerView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
  // Call base class first
  if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;
 
  // CPaneContainerView is used to control the right pane that CMainFrame
  // sets up. In this case we create a second splitter window.
  m_wndSplitter.CreateStatic(this, 1,2);

  // The context information is passed on from the framework
  CCreateContext *pContext = (CCreateContext*)lpCreateStruct-&gt;lpCreateParams;

  // Create two views
  m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(150,0), pContext);
  m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0), pContext);

  return 0;
}
</pre></font></tt>

<p>CView-derived classes are responsible for sizing their children so we need to 
override OnSize to position the splitter frame where we want it. Notice that 
although we cover the entire client area with the splitter frame in this 
example, OnSize is a great opportunity to position other visual elements. 
As an example, Outlook presents a header with a button above the splitter 
frame.

<PRE><TT><FONT COLOR="#990000">void CPaneContainerView::OnSize(UINT nType, int cx, int cy) 
{
  CView::OnSize(nType, cx, cy);
 
  // In this example we cover the entire client area.
  // Notice that we need to adjust for the border that 
  // CSplitterWnd adds. It looks better this way. The
  // border seems to have a hard-coded width=2, so we
  // do the same...
 
  m_wndSplitter.MoveWindow(-2,-2,cx+4,cy+4);
}
</pre></font></tt>

<p><i>(Editors note: Instead of using the hard-wired value of 2 it may
be better to use the value returned from <tt>GetSysMetrics(SM_CXBORDER)</tt> and
<tt>GetSysMetrics(SM_CYBORDER)</tt>)</i>

<p>To make the whole thing more functional you must implement code that 
replaces the &quot;Flexible&quot; pane depending on what the user selects 
in the&quot;Outlook&quot;-pane. For example, override OnSelChange and call 
your own CMainFrame::ReplaceView(...) as appropriate. Please refer to 
<a HREF="http://www.codeguru.com/">www.codeguru.com</a> for details.

<p>Notice: If you wish to prevent resizing the &quot;Outlook&quot;-pane 
you will need to override WM_MOUSEMOVE , WM_LBUTTONDOWN, WM_LBUTTONUP and 
WM_LBUTTONDBLCLK. Use ClassWizard to create handlers for these messages 
and simply call the CWnd handlers instead of the CSplitterWnd handlers.

<p>Good luck.

<P>

<p>Updated 27 March 1998
<HR>

<TABLE BORDER=0 WIDTH="100%"><TR>

<TD WIDTH="33%">
<FONT SIZE=-1><A HREF="http://www.codeguru.com">Goto HomePage</A></FONT>
</TD>

<TD WIDTH="33%">
<CENTER><FONT SIZE=-2>&copy; 1998 Zafir Anjum</FONT>&nbsp;</CENTER>
</TD>

<TD WIDTH="34%">
<DIV ALIGN=right><FONT SIZE=-1>Contact me: <A HREF="mailto:zafir@home.com">zafir@home.com</A>&nbsp;</FONT></DIV>
</TD>

</TR></TABLE>


</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久夜色精品国产网站| 狠狠色丁香婷婷综合| 日韩美女一区二区三区| 成人一区在线看| 伊人夜夜躁av伊人久久| 欧美一区二区三区四区久久| 国产精品18久久久| 亚洲综合一区在线| 久久久久亚洲综合| 欧美在线观看视频在线| 国产又粗又猛又爽又黄91精品| 日韩美女久久久| 精品剧情v国产在线观看在线| 色噜噜夜夜夜综合网| 日韩高清电影一区| 亚洲欧美日韩国产成人精品影院 | 奇米色777欧美一区二区| 亚洲国产精品av| 94色蜜桃网一区二区三区| 奇米777欧美一区二区| 亚洲欧美另类在线| 国产亚洲制服色| 欧美精品v国产精品v日韩精品| 成人开心网精品视频| 开心九九激情九九欧美日韩精美视频电影 | 亚洲综合精品自拍| 91精品啪在线观看国产60岁| 成人久久18免费网站麻豆| 麻豆国产精品一区二区三区| 亚洲精选一二三| 亚洲国产精品成人综合色在线婷婷| 在线看不卡av| 99久久亚洲一区二区三区青草| 激情综合五月天| 日本免费新一区视频| 亚洲一区在线播放| 亚洲免费av观看| 国产精品天美传媒沈樵| 久久―日本道色综合久久| 欧美一级片在线看| 欧美老年两性高潮| 欧洲一区二区三区在线| 91性感美女视频| av一区二区三区| 成人深夜视频在线观看| 免费的国产精品| 奇米色777欧美一区二区| 亚洲综合免费观看高清完整版| 亚洲色大成网站www久久九九| 久久久久国产一区二区三区四区| 精品少妇一区二区三区日产乱码 | 免费人成在线不卡| 日本网站在线观看一区二区三区| 亚洲综合色噜噜狠狠| 国产日韩精品一区二区浪潮av| 亚洲精品一区在线观看| 精品av综合导航| 精品久久久久久最新网址| 日韩欧美国产麻豆| 欧美精品一区二区三区在线播放| 精品日韩一区二区三区免费视频| 日韩欧美你懂的| 日韩欧美一区中文| 欧美成人伊人久久综合网| 日韩三级在线观看| 91福利精品视频| 色综合激情久久| 在线观看91视频| 7777精品伊人久久久大香线蕉最新版| 在线观看日韩av先锋影音电影院| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩在线电影| 欧美日本一区二区在线观看| 欧美一区二区成人6969| 精品久久久久av影院| 国产欧美一区二区三区在线老狼| 国产精品丝袜在线| 国产精品高潮呻吟久久| 亚洲国产aⅴ成人精品无吗| 五月开心婷婷久久| 极品少妇xxxx精品少妇偷拍| 成人精品电影在线观看| 欧美综合久久久| 欧美一级黄色录像| 精品99999| 亚洲欧洲av一区二区三区久久| 亚洲最新在线观看| 免费在线观看不卡| 岛国精品在线播放| 在线观看日韩国产| 久久亚洲综合色| 一区二区三区在线视频播放| 美国一区二区三区在线播放| 蜜臀av国产精品久久久久| 国产黄色91视频| 在线观看免费成人| 久久久久久久免费视频了| 亚洲免费观看高清完整 | 国产老女人精品毛片久久| 99综合电影在线视频| 日本韩国精品一区二区在线观看| 91精品国产综合久久国产大片| 久久精品一区八戒影视| 亚洲五码中文字幕| 国产91在线观看| 正在播放亚洲一区| 中国色在线观看另类| 亚洲电影在线播放| 九九国产精品视频| 91久久免费观看| 久久色.com| 亚洲成av人在线观看| www.亚洲在线| 精品国产乱子伦一区| 亚洲一区二区三区四区在线| 国产精品资源在线| 欧美一级片免费看| 综合激情网...| 国产精品中文字幕一区二区三区| 欧美在线高清视频| 日本一区二区电影| 青青草视频一区| 欧美性一级生活| 中文字幕二三区不卡| 青青青爽久久午夜综合久久午夜 | 丰满白嫩尤物一区二区| a4yy欧美一区二区三区| 久久先锋资源网| 日韩电影在线一区| 欧美日韩中文字幕一区二区| 亚洲国产精品精华液ab| 美女网站色91| 欧美日韩中文另类| 一卡二卡三卡日韩欧美| 成人app软件下载大全免费| 久久久精品影视| 午夜婷婷国产麻豆精品| 成年人国产精品| 国产精品网站在线播放| 国产精品一区专区| 久久午夜免费电影| 精彩视频一区二区| 精品日产卡一卡二卡麻豆| 免费日韩伦理电影| 欧美一区二区免费观在线| 亚洲午夜精品网| 国产日韩精品一区二区三区 | 久久久久高清精品| 丁香六月综合激情| 国产精品国产三级国产普通话99| 91丨九色丨尤物| 亚洲午夜成aⅴ人片| 欧美一区二区成人| 国产呦萝稀缺另类资源| 国产精品久久久久久久岛一牛影视| 成年人国产精品| 亚洲一区二区三区激情| 日韩免费性生活视频播放| 国产精品影音先锋| 伊人一区二区三区| 91精品国产欧美一区二区18| 久久成人麻豆午夜电影| 国产精品色哟哟| 91福利在线播放| 免费高清在线视频一区·| 国产日韩欧美一区二区三区乱码| 色哟哟精品一区| 免费人成在线不卡| 国产精品沙发午睡系列990531| 在线视频你懂得一区| 久久精品99国产精品日本| 欧美国产日韩亚洲一区| 在线精品视频一区二区| 久久国产视频网| 亚洲男人都懂的| 欧美成人aa大片| 色丁香久综合在线久综合在线观看| 午夜精品久久久久久久99水蜜桃| 国产午夜久久久久| 欧美日韩一区二区三区不卡| 国内外成人在线| 亚洲美女在线国产| 久久免费看少妇高潮| 欧美在线不卡视频| 国产美女精品在线| 五月天婷婷综合| 国产精品国产三级国产| 欧美一级欧美三级| 91福利国产成人精品照片| 久国产精品韩国三级视频| 一区二区三区精品久久久| 精品久久免费看| 欧美日韩性生活| 不卡在线观看av| 精品影视av免费| 亚洲妇熟xx妇色黄| 亚洲天堂网中文字| 久久天天做天天爱综合色| 在线不卡免费欧美| 色婷婷综合久久久中文字幕|