当前位置:C++技术网 > 资讯 > 在主窗口中创建子窗口

在主窗口中创建子窗口

更新时间:2015-06-23 23:17:24浏览次数:1+次

    单击一个按钮,弹出另外一个窗口,但不是消息框,而是我们自己定义的窗口。这个窗口上有我们放置的控件,这些控件可以定义事件响应。粗略的说,就是单击按钮后,在按钮事件中动态创建一个窗口,并显示出来,而这个窗口就是我们事先定义好的,自然也就有事件响应。这样我们就能够实现这样的功能,因此,我们就不用什么功能都局限于主窗口内,使逻辑更加清楚。
    下面就这个实现过程讨论一番。只讲述粗略的过程,具体的过程,请参考本文去自己实现这里只给出关键的步骤。
    当我们创建一个项目时,不管我们是以文档窗口形式还是对话框方式,都是有一个主窗口的。文档形式的叫做主框架窗口,对话框的就是主对话框窗口。两种形式的选择,对于小的软件,使用简单的主对话框窗口就行了。文档窗口相对复杂一点点。在创建项目的向导中,有一步是选择【基于多文档、单文档和对话框】的,选择对话框的即可。
    项目创建完毕后,直接编译运行,只有一个主对话框的。要实现单击按钮启动另外一个和主对话框一样的窗口,我们是需要额外做一些工作的。创建窗口的一个简单的方式就是从资源模板创建。所谓资源模板,就是我们在资源视图中看到的可以直接拖动按钮的那个窗口界面,这个界面的编辑就是基于资源模板的。各个控件都是模板,工具箱就想一个模具库一样,控件就好比各个模具。你把控件往上一拖,生成程序时就按照这个控件生成一个,并且样子和你拖的是一模一样,所以才说是资源模板。但是工具箱中并没有窗口这样的控件。不急,接着往下看。在资源视图中,我们能够看到比如控件这些ID列表,这是快速查看这些资源的地方。如果资源视图你在界面找不到,请到VS菜单的“视图”下的“资源视图”单击一下,使其显示到界面上,并展开这个树结构的列表。你会看到Dialog这个选项,这就是窗口资源的列表,列出来的是已有的窗口资源,一般有一个主窗口和一个关于窗口。那么我们要创建我们自己的窗口以使单击按钮能够显示出来,那么工作就从这里开始。
    右击“Dialog”标签,选择【插入“Dialog”】,这样就插入了一个对话框,简单吧。然后在这个新的对话框中放置你想放置的控件即可,和主对话框放置控件一样。这样你的自定义的窗口就有了一个模板了。但是要在单击主窗口的按钮显示出来,还有做进一步的工作。因为你只是创建了一个窗口模板,并没有什么东西与它对应,也就无法将它掉出来。
    此时,你可以在布置好的窗口中双击其中一个按钮,来创建按钮单击事件,但是此时发现,它并不是和往常的主窗口一样的反应,它要你添加一个类,那么你就去一个类名,基类选择默认的“CDialogEx”或者是"CDialog"即可,确定。然后再在刚才双击的按钮那里双击按钮即可正常创建按钮事件了。其他控件的事件响应就和主窗口一样操作了。
    这样,窗口模板造出来了,也有一个类与窗口对应了,我想你也猜到接下来要做什么了。因为在主窗口要创建这个自定义的窗口,那么就只要有一个这个自定义窗口对应的类对象即可操作。最简单的就是在主窗口类中,添加一个这个类的对象作为成员变量即可。但是注意,在添加这个对象时,需要先包含这个类的头文件,否则就无法识别这个类。然后就在主窗口的按钮单击,使用这个成员变量也就是这个自定义窗口类的对象,调用Create,然后传递自定义的窗口的ID即可。但是你会发现,虽然创建成功了,但是你单击按钮后却没有看见窗口。因为默认创建的时候,是不可见的,所以在创建后你要调用ShowWindow(SW_SHOWNORMAL)函数将刚创建的窗口显示出来,然后显示出来后,对这个自定义的窗口的控件的响应就是之前做好的事件响应。
    这样,单击按钮启动另一个窗口的功能就实现了,这里只描述了大致的过程,如果你有一定的实践基础,应该就可以实现。如果你没有,那么请多实践,如果有不清楚,请在文章后面提问,我会尽量回答。因为不知道大家具体的需求,就不想太详细,太罗嗦有人不需要。只要提到关键步骤就可以了,但是有些又对细节不清楚,至于哪个细节,不同的人不一样,那么这样的话,就请你自己提问,然后我做相应的回答即可解决所有人的需求。