{S0}简介
你是否曾经想过在你的程序中使用一个分割窗口,但不希望所有的文档/视图结构的额外的垃圾?
在新项目向导中,为了使"拆分窗口??"复选框可用,你必须选择"文档/视图结构支持??这使得很多额外的不必要的代码如果你想在你的项目是一个分裂的主要窗口。
在这篇文章中,我将步行通过创建一个简单的SDI与分裂的主要窗口,工具栏,状态栏。窗口将被分成左和右窗格中,资源为基础,可以在资源编辑器就像一个简单的基于对话框的应用程序很容易被修改。
这些说明和项目文件的Visual Studio 2005,虽然他们可能在旧版本的Visual Studio工作,你会在自己的适应。
启动Visual Studio并创建一个新项目。选择MFC应用程序,让您的项目名称,并点击"确定吗??
单击"下一步"。
为了保持尽可能简单,我们将使用我们的项目的最小选项。
选择"单文档??取消选中"文档/视图结构??取消"使用Unicode库??并选择"使用MFC静态库??单击"下一步"。
的
我们不希望任何数据库支持,所以只需单击"下一步"。
{五}
在此页面,我们将保持默认设置。这将为我们提供一个状态栏和工具栏。好东西,有一个SDI项目。点击Next。
{中六}
取消选中"ActiveX控件??和"共同控制清单??除非你知道你是要在您的项目中使用ActiveX控件和新的XP的特定控制,没有任何理由额外的开销。点击Next。
{七}
这里是哪里,这将是很好,如果他们让我们选择我们想要什么样的孩子查看,但他们不这样做,所以只打完成。
编译并运行该项目。
请注意,标题栏图标设置为默认的图标,而不是一个项目的资源文件中定义。这是在Visual Studio中的错误,多年来一直围绕。下面是如何解决它。
在IDE中,选择"类视图"的InitInstance和双击??
您应该看到:
要更改标题栏上的图标,首先我们需要创建一个,然后我们需要告诉应用程序主窗口,使用它。将下面的代码后??代码> UpdateWindow??但在此之前??代码>返回??//Create and load the titlebar icon
HICON hIcon;
hIcon = LoadIcon(IDR_MAINFRAME);
AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
相反,你可能会认为,LoadIcon不实际加载的图标,它只是创建它。我们要告诉应用程序使用新的图标SendMessage函数。???
你的代码的InitInstance现在应该看起来像这样:
现在,当您编译和运行,你应该看到的资源定义标题栏图标。
现在可以使用资源编辑器更改图标到任何你想要的。
现在是时候添加分割窗口,我答应。为了有一个分割窗口,我们将使用名为CSplitterWnd的一类。在类视图中,右击CMainFrame中,选择"添加变量??改变访问??代码保护??变量的类型呢???代码> CSplitterWnd的??和变量名??代码> m_wndSplitter??并单击Finish。
由于分裂将会在客户区,它的代码将需要在OnCreateClient在CMainFrame重载函数。
在类视图中,选择CMainFrame的。在"属性"区域中,按"覆盖??"按钮,向下滚动到??代码> OnCreateClient??并添加功能与组合框的右侧。
OnCreateClient函数中添加以下代码:{C}
这会为我们创建一个静态拆分窗口,将有一排两列。
别急,还没有编制。我们还需要告诉分配器在每个窗格中显示的内容,我们需要摆脱旧观点的视觉工作室为我们创建的。
对于本教程,让我们使用资源的基础形式。这将可以很容易地添加控件,并为这个项目建设的其他应用程序作为模板使用。
切换到资源视图,展开对话框的叶,右击并选择"插入"对话框???这将插入一个新的对话框资源,在资源编辑器中打开它。
删除"确定吗?"和"取消吗??按钮。对话框上单击右键,并选择"属性"。
在"属性",更改:边界"吗??控制为"真?
ID为"IDD_FORM_LEFT??风格"孩子??
现在以同样的方式添加一个新的对话框,但编号:IDD_FORM_RIGHT。
在资源视图中,双击IDD_FORM_LEFT。这将打开资源编辑器中左边的表格。右键单击编辑器对话框,选择"添加类???
更改基类??代码> CFormView的??这个名字呢???代码> CFormLeft??和命中完成。
IDD_FORM_RIGHT资源重复这个过程,但类名CFormRight。
现在我们已经分离器,以显示意见。
MainFrm.cpp,添加标题行:#include "FormLeft.h"
#include "FormRight.h"
向下滚动到??代码> OnCreateClient??功能和创建视图调用添加到分离器。创建拆分后,但在返回之前,添加下面的代码。if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CFormLeft), CSize(125, 100), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CFormRight), CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
你的OnCreateClient看起来应该像这样。
我们几乎有。现在,我们需要摆脱查看Visual Studio中为我们作出的任何用途的旧观点。
向上滚动的OnCmdMsg函数和删除:if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
滚动OnSetFocus功能,并删除:m_wndView.SetFocus();
滚动到OnCreate函数和删除:// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}
为MainFrm.h顶部,删除:
向下滚动并删除:CChildView m_wndView;
切换到"解决方案资源管理器,右键点击??EM> ChildView.h??然后选择删除。在弹出框,按"删除"按钮。
删除??EM> ChildView.cpp??以同样的方式。
您可以编译和运行现在,你将有一个分割窗口的SDI。试试吧,左右拖动分割栏:
没有在这一点上做任何事情,但你可以用资源编辑器添加控制。
然而,在每个窗格的控制只能影响控制在同一窗格。为了控制左窗格中的影响控制在右窗格中,我们将需要重新路由的一些消息。
在类视图中,右键单击"CformLeft??并选择"添加变量???请访问受保护的类型??代码>的CWnd *??名字??代码> m_target??点击完成。
在类视图中,右键单击"CFormLeft??并选择"添加功能???使返回类型为void,这个名字吗??代码> SetTarget??并添加一个参数类型??代码的CWnd *??命名??代码> m_cwnd??点击完成。
SetTarget功能,添加代码:
您应该看到:
下一步,我们将需要覆盖按需功能。选择??代码> CFormLeft??类视图。点击覆盖"按钮,向下滚动到按需和使用下拉框添加的功能。
在OnCommand函数,添加下面的代码:if(m_target)
{
m_target->SendMessage(WM_COMMAND, wParam, lParam);
}
else
{
CFormView::OnCommand(wParam, lParam);
}
return true;
您应该看到:
这将发送这种形式我们设定的目标窗口的消息。现在我们要设定目标的形式,在右窗格中。
在CMainFrame的OnCreateClient函数中添加以下代码分离器后创建的意见和返回之前://set the target for mapped messages
((CFormLeft*)m_wndSplitter.GetPane(0,0))->SetTarget(m_wndSplitter.GetPane(0,1));
你的函数现在应该看起来像:
现在让我们添加一些控件,并使用它。 IDD_FORM_RIGHT在资源编辑器打开,并添加一个静态文本控件。
更改ID IDC_STATIC_HELLO,标题为"按一下按钮??和文本对齐中心。
右键单击"静态控制,并选择添加变量。点击控制类型复选框,类型??代码> CStatic的??和名字??代码> m_hello??单击"完成"。
在资源编辑器打开IDD_FORM_LEFT,并添加一个按钮。
更改ID IDC_BUTTON_HELLO和标题说"你好??
右键单击该按钮,选择"添加事件处理程序??选择BN_CLICKED消息类型??代码> CFormRight??从类列表,然后点击添加和编辑。
在OnBnClickedButtonHello函数中,添加下面的代码:m_hello.SetWindowText("Hello Window Splitter!");
你的函数看起来应该像:
编译并运行程序。按一下说Hello按钮,你应该看到在右窗格中的测试变化。现在,尝试拖动分割栏,你应该看到在右侧的文本窗格中移动拆分条。
我希望你觉得这篇文章有用。| kencocomputers