收录日期:2018/11/21 16:39:49 时间:2016/05/21 14:08:53 标签:界面
我想自己创建一个视图窗口,例如可以通过点击按钮激活一个窗口,最好是是多文档视图那样的窗口,可以方便的创建多个窗口,最好贴出源代码来!!!!
建立工程的时候选择多视图不就行了。所有问题都解决了。
说仔细一些
createwindow(..)
createwindow
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
BOOL bRet = CBCGPFrameWnd::OnCreateClient(lpcs, pContext);

CCreateContext context;
context.m_pCurrentFrame = GetActiveFrame();
context.m_pLastView = NULL;
context.m_pCurrentDoc = GetActiveDocument();
if (m_pMDClientView == NULL)
m_pMDClientView = new CMDClientView;
if (!IsWindow(m_pMDClientView->m_hWnd))
{
if (!m_pMDClientView->Create(NULL, NULL, 0L, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST+1, &context))
bRet = FALSE;
}

return bRet;
}

这样就创建了多个视图,你可以同样的方法创建多个视图,下面的代码演示切换视图
pNewView是待显示的视图pOldActiveView是原来显示的视图

if (pNewView && pNewView->GetRuntimeClass() != pOldActiveView->GetRuntimeClass())
{
CRect rc;
pOldActiveView->GetWindowRect(&rc);
ScreenToClient(&rc);
pNewView->MoveWindow(&rc);

pNewView->OnInitialUpdate();

if (pNewView->IsKindOf(RUNTIME_CLASS(CLogonView)))
{
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pMDClientView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
m_pMDClientView->ShowWindow(SW_HIDE); // hide the old
}
else
{
m_pMDClientView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pOldActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
pOldActiveView->ShowWindow(SW_HIDE);
}

pNewView->ShowWindow(SW_SHOW);
SetActiveView(pNewView); // change the active view

RecalcLayout();
}
你用非模态对话框实现吗?不清楚
一个多文档浏览器 
作者:陈兴武 http://vcsky.shangdu.nat 2000-02-16 
下载源代码(63k)

简介:

这个浏览器是用vc6.0编写的,界面类似IE,但它是一个多文档程序,为了方便在各个窗口之间切换,我特意在工具条上加了一个窗口列表,你可以在此毫不犹豫地快速切换窗口、也可以双击使窗口最大化。工具条采用IE风格,仅加入了最常用按钮。一些菜单功能没有实现,不过你可以用右键菜单中的功能来完成。

示例图象如下:



缺憾:

暂不具备添加、整理收藏夹功能;IE配置功能;不能截获在空窗口(target=_blank)中打开的超连接。如果可以解决这几个问题,记得告诉我啊!

设计过程:

1。框架

用vc6产生一个多文档应用框架,将视用CHtmlView派生,CHtmlView是从CFormView中派生而来的,所以CHtmlView可能是一个form视中放了一个浏览器控件而生成的。

2。地址栏

开始编写时首要解决的问题是:怎样做一个地址栏。最早的想法是用一个对话条,上面放一个静态标签,一个组合框来实现,不过经过实践,你会发现这行不通,因为不能捕获回车键。那么在对话条上放一个缺省按钮,这样当回车被按下时,是不是可以被捕获呢?不幸的是MAINFRAME没有动态数据交换DDX。最后当我看到MSDN中的浏览器例子时,这个问题就被解决了,那就是用CReBar和CComboBoxEx组合框扩展(以前从没见过)。将创建好的组合框加入到rebar中就行了。

3。工具条

工具条的各种特性在我的另一篇文章中已经详细的讲解了,只有自定义工具条这一难题还没解决(VB做的工具条自动可以自定义)。在这里我利用了MSDN例子程序里的冷热工具条的图形列表,在资源里的工具条IDR_MAINFRAME中我 随便画了几个图标(凑够数目就行),然后设置每个按钮的ID和微帮助文本。在工具条创建完毕之后就用冷热图形列表将原来的按钮覆盖掉了。加入标签文本,设置收藏和字体的下拉风格。这样工具条就做好了。

4。窗口列表

窗口列表是为了使得窗口切换方便而加入的。同样它被加入到rebar中。窗口的增加、删除由两个变量控制,一个tab控件和一个视管理对象。这个实现方法在网上可以找到,就是那个在状态条上加几个MDI子窗口的tab的例子,不过我把它放在了rebar上,具体方法可以研究一下我写的源程序。视管理对象主要在视构造、初始更新、析构时做些工作。

5。 收藏夹菜单

完全从msdn例子程序中copy/paste的。这就是代码重用的好处。

6。地址栏的常用地址列表

在IE的地址输入框被拉下时,有许多以前保存的地址,它在注册表中存放,主键是HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs,最多共记24条url1--url24。用一个循环将24个串读出并加入地址框的下拉列表中即可。

有任何问题,可以向我提问。my emil: ch.friday@371.net
 
http://www.copathway.com/vchelp/zsrc/mie.asp?type_id=59&class_id=1&cata_id=2&article_id=199&search_term=

http://www.copathway.com/vchelp/zsrc/mie_demo.zip

一个service类中用到两个dao类的问题 “System.Nullable”不包含“Year”的定义,并且找不到可接受类型为“System.Nullable< jsp如何接收Ajax返回的数据?? 关于settimer()函数 IIS7.5 404配置问题 为什么full join 会报错?而right(left) join没问题?在线等。。。 DrawingVisual绘图问题---绘制大量曲线生成速度很慢 不给力啊,现在想在水源看个huangse小说都没了,搞毛啊 用拖拽生成的ui代碼是不是錯了 调休单写成事假,我的全勤和工资啊,坑爹…… 有关HttpPostedFile的问题 oracle distinct 字段的问题求解 解析数据结论不对 主频1G,WM6.5或WP7方案应该用什么芯片 怎样在模拟器中模拟OnTouchListener中的操作呢? networkstream发邮件发不出去 DTV S/W开发 晕倒,下个软件,这么麻烦,唉,可是又没其他地方下。。。。 难道for()循环里面的变量是局部变量? 为什么打开chm文件之后产生chw文件,求解决 在后台给TABLE 动态添加几行 高分!!!小菜鸟求助关于多线程问题!!!! 刷新问题 电脑插入U盘,金山提示U盘已损坏,需进行格式化 新手学mysql,大家给点建议 取一小时中的某一条数据 前台多个input,name相同,后台取值,能区分是哪个input的值吗 稀奇古怪了 俩个括号 不在一起 就不行 如何把结构体中的字段转换为字符串,通过HTTP传输? ADO.NET,Access数据库插入数字,为什么只插入0呢?