`
king_tt
  • 浏览: 2192428 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

VC下划分窗口并固定

 
阅读更多

前几天为了程序的需要,连夜连晚的学习了VC下划分窗口并固定的方法。过程是痛苦的,结果是可喜了。现将此方法总结一下,自己也可以再熟悉下。

程序所采用平台为Microsoft Visual C++6.0,将要得到如下效果

首先建立MFC AppWizard(exe),取名字为CView,下一步,选择单文档“Single document”,其他默认,点击“完成”。

点击ResourceView,在Dialog下插入两个个Dialog窗口用于稍后的分割后的窗口,ID号分别改为“IDD_FORMVIEW1”和“IDD_FORMVIEW2”。记得及时保存。 这里有个注意的地方,在建立好窗口后,在属性里要将其Styles改成Child,不然程序不能运行的。这也是我当初没注意到的地方,浪费了不少时间。

单击ClassView标签,添加2个类,当然也可以从ClassWizard中添加,名字叫FormView1,类选择CFormView,Dialog ID选择IDD_FORMVIEW1,另一个类叫FormView2,ID选择IDD_FORMVIEW2。

在CMainFrame中添加两个成员变量,类型都为CSplitterWnd,变量名分别为m_splitter和m_splitter1,然后添加一个虚函数OnCreateClient,点击编辑代码,将如下代码更改

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//创建一个静态分栏窗口,分为一行二列
if(m_splitter.CreateStatic(this,1,2)==NULL)
return FALSE;

//将CCSplitterWndView连接到0行0列窗格上
m_splitter.CreateView(0,0,RUNTIME_CLASS(CCViewView),CSize(600,600), pContext);

if(m_splitter1.CreateStatic(&m_splitter,2,1,WS_CHILD|WS_VISIBLE,
m_splitter.IdFromRowCol(0, 1))==NULL)
return FALSE; //将第0行1列再分开2行1列
//将FormView1类连接到第二个分栏对象的0行0列
m_splitter1.CreateView(0,0,RUNTIME_CLASS(FormView1),CSize(200,400),pContext);
//将FormView2类连接到第二个分栏对象的1行0列
m_splitter1.CreateView(1,0,RUNTIME_CLASS(FormView2),CSize(200,200),pContext);
return TRUE;

}

添加头文件

#include "CViewDoc.h"
#include "CViewView.h"
#include "FormView1.h"
#include "FormView2.h"

OK,编辑运行。

但上述程序只完成了划分,没实现固定。我来介绍固定窗口的方法。

方法有两种,但都是重载了窗口类,通过重载类来使窗口固定。

第一种方法:

插入->新建类->generic class

name: MySplitter

Derived Form :CSplitterWnd as public

OK生成。

这时需要在CMainFrame.h 中 添加头文件 #include "MySplitte.h"

然后修改当初我们用CSplitterWnd定义的m_splitter, m_splitter1为 MySplitter m_splitter, m_splitter1

这是很重要的一步。

修改 MySplitter.h

class MySplitter :: public CSplitterWnd
{
public:
MySplitter1();
virtual ~MySplitter();
afx_msg UINT OnNcHitTest(CPoint point);//声明固定窗口函数

DECLARE_MESSAGE_MAP()

};

在MySplitter.cpp 中添加如下代码

BEGIN_MESSAGE_MAP(MySplitter, CSplitterWnd)
//{{AFX_MSG_MAP(MySplitter)
ON_WM_NCHITTEST()//声明固定窗口消息
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

UINT MySplitter::OnNcHitTest(CPoint point) //固定窗口的实现
{
// TODO: Add your message handler code here and/or call default
return HTNOWHERE;
}

----- OK,编译运行。

第二种方法:

运行类向导--add class--new

name: MySplitter

Base class : generic CWnd OK,建立类。

将MySplitter.h和 MySplitter.cpp中所有 CWnd 替换成CSplitterWnd如

BEGIN_MESSAGE_MAP(MySplitter2, CWnd)

BEGIN_MESSAGE_MAP(MySplitter2, CSplitterWnd)

class MySplitter2 : public CWnd

class MySplitter2 : public CSplitterWnd

这时需要在CMainFrame.h 中 添加头文件 #include "MySplitte.h"

然后修改当初我们用CSplitterWnd定义的m_splitter, m_splitter1为 MySplitter m_splitter, m_splitter1

这是很重要的一步。

然在在类向导里添加WM_NCHITTEXT消息.编辑函数内容

UINT MySplitter::OnNcHitTest(CPoint point) //直接实现窗口的固定,而声明全由类向导完成
{
// TODO: Add your message handler code here and/or call default
return HTNOWHERE;
}

----- OK,编译运行。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PS:

以上方法对高手来说,肯定简单,但像我这样的新手,其实当初是很希望都能得到这样一份资料啊。所以将其总结如上,并且感谢唐同学对我的帮助哈。

过两天我还会再写些我写程序时总结的小技巧。

分享到:
评论

相关推荐

    VC MDI和SDI分割窗口样例

    1. **MDI**:在MDI应用中,分割窗口可以用于将一个主窗口划分为多个工作区,每个工作区可以显示不同的文档。用户可以通过拖动分隔线来调整各个工作区的大小,这样可以在一个窗口内并排查看和操作多个文档,提高了...

    VC实现窗口的分割方法集.rar

    窗口分割是常见的UI设计需求,例如在文本编辑器、数据查看器或者调试工具中,通常需要将一个大窗口划分为多个小窗口,以便同时展示或操作不同的内容。 在VC++中,窗口分割可以通过两种主要的方式来实现:水平分割和...

    单文档上窗口分割程序

    在序列图像或多维度图像显示的场景下,这种窗口分割技术特别有用。例如,可以将窗口分割为两半,一半显示当前图像,另一半显示前一幅或后一幅图像,便于对比分析。或者在三维图像显示中,一个区域可以用来显示正面...

    分割窗口,将对话框窗口与视图窗口相结合

    它是一个窗口类,可以将一个大的窗口空间划分为两个或更多的子窗口,每个子窗口可以包含一个视图对象。这些视图可以是相互独立的,也可以通过`CSplitterWnd`进行交互。分割窗口可以根据用户的需要动态调整大小,使得...

    窗口的分割

    这通常通过使用Splitter窗口来实现,Splitter是一种控件,可以将一个大窗口划分为两个或更多的独立部分,每个部分可以显示不同的内容。这种功能在开发多文档界面(MDI)应用时特别有用,因为它能让用户更有效地管理和...

    VC实现的视图分割程序

    SDI允许用户在一个单一的文档窗口中打开、编辑和管理多个文档,而视图分割则可以进一步提升用户体验,通过划分屏幕空间来同时显示和操作不同部分的文档内容。在VC中实现视图分割,开发者通常会使用MFC(Microsoft ...

    单文档实现分割窗口

    在这种情况下,“分割窗口”是指将一个视图区域划分成两个或更多的独立部分,每个部分可以显示不同的信息或者支持不同的操作。 在VC++中,我们可以使用CWnd类的派生类,如CView或其特定的派生类,来创建和管理这些...

    操作系统实验进程调度VC

    4. **时间片轮转法**:此方法将CPU时间划分为固定的时间片,每个进程得到一个时间片的执行机会后被放入等待队列,然后轮到下一个进程。这可以确保所有进程都能得到一定的服务,适用于交互式系统。在实验中,需要处理...

    VC实现MP3编解码程序

    2. **帧划分**:音频数据被分割成固定长度的帧,通常每个帧包含约576个采样点。 3. **预处理**:包括滤波、窗口函数应用等,以减少信号的相互影响。 4. **频域转换**:使用快速傅里叶变换(FFT)将时域信号转换为...

    VC实现的菜单设计

    在“VC实现的菜单设计”这个主题中,我们将深入探讨如何在Visual C++环境下创建和管理菜单。 首先,我们需要了解菜单的基本元素。在Windows程序中,菜单通常包括主菜单(位于窗口顶部)和弹出菜单(通常由右键单击...

    vc环境下利用逃逸时间算法实现julia集(分块着色)

    首先,我们需要创建一个窗口并初始化GDI+对象,如Graphics类和Pen类,用于画线和填充颜色。接着,我们将屏幕坐标转换为复平面坐标,对每个像素应用上述迭代公式,根据逃逸情况分配颜色。 分块着色是一种优化策略,...

    俄罗斯方块游戏

    本文将深入探讨如何使用Win32 API和C++编程语言在VC6.0环境下开发一款俄罗斯方块游戏。 一、Win32 API基础 Win32 API是Windows操作系统的核心编程接口,它提供了创建窗口、处理用户输入、绘图等基本功能。在开发...

    layout_demo

    总结起来,"layout_demo"项目涉及的是在VC++环境中如何利用布局管理器来实现控件的自动布局,以达到在不同窗口大小下保持界面美观和易用性的目标。通过理解和掌握自动布局的原理和技术,开发者可以创建出更加灵活且...

    PT80-NEAT开发指南v1.1

    编译及运行程序(模拟器下) ................................................................................................................ 7 编译及运行程序(PT80) ......................................

    计算机网络网上作业(1)答案.pdf

    虚电路是在数据传输前预先建立的逻辑路径,它提供了从源端到目的端的固定连接,但并不需要物理线路的专用。在虚电路模型中,数据沿着预先设定的路径传输,路径上的每个节点都知道如何转发数据,直到目的地。虚电路...

    计算机网络网上作业(1)答案.docx

    虚电路(VC)是一种在数据通信网络中模拟固定路径的概念,它提供了一条从源到目的地的逻辑连接。在实际传输中,数据包沿着预先建立的路径传输,但这个路径并不对应物理线路,而是一种逻辑上的连接。用户端到端的...

    请求分页管理实验报告 (2).docx

    请求分页管理是一种虚拟存储技术,它通过将内存划分为固定大小的页面,并结合页表机制,使得进程可以在大于实际物理内存的虚拟地址空间中运行。实验目的是理解虚拟存储技术的特点,尤其是请求页式管理的页面置换算法...

    俄罗斯方块完整源程序

    【俄罗斯方块完整源程序】是一个面向初学者的C/C++/VC实现的游戏软件,它提供了深入理解游戏编程和基础算法的机会。这个项目是作为课程设计的一部分,旨在帮助学习者掌握编程语言的基础以及如何将这些知识应用于实际...

    MC算法C++实现 源代码

    OpenGL是一个跨语言、跨平台的图形库,为程序员提供了底层的、固定功能的图形绘制API,非常适合进行3D图形处理。 MC算法的基本思想是通过检测每个立方体内部的样本点是否跨越了等值面,来决定立方体的哪些面应该被...

    IT软件笔试题大杂烩,包括IBM腾讯,迅雷2009届毕业生必须下来看看

    在VC中获得父窗口的指针** - **知识点说明:** - **Windows编程基础:**了解Windows编程的基本概念,特别是窗口处理机制。 - **获取父窗口句柄:**通过`GetParent()`函数可以获取当前窗口的父窗口句柄。 - **...

Global site tag (gtag.js) - Google Analytics