zoukankan      html  css  js  c++  java
  • VC++单文档分割窗口、在视图中添加控件,并响应该控件的事件

    一、单文档分割窗口

    1、用ClassWizard为应用程序添加新的视图类

       CLeftView从Cview类派

    2、在CMainFrame类里声明分割视图的变量

    public:
    CSplitterWnd m_splMainCols;
    CSplitterWnd m_splRightRows;

    3、在CMainFrame类的OnCreateClient函数中添加代码,创建分割视图

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    if(!m_splMainCols.CreateStatic(this, 1, 3))
    {
       return FALSE;
    }
    if(!m_splMainCols.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 0), pContext))
    {
       return FALSE;
    }
    /*
    if(!m_splMainCols.CreateView(0, 1, RUNTIME_CLASS(CLeftView), CSize(500, 0),pContext))
    {
       return FALSE;
    }
    */
    if(!m_splMainCols.CreateView(0, 2, RUNTIME_CLASS(CLeftView), CSize(0, 0),pContext))
    {
       return FALSE;
    }
    
    if(!m_splRightRows.CreateStatic(&m_splMainCols, 2, 1, WS_CHILD|WS_VISIBLE, m_splMainCols.IdFromRowCol(0,1) ))
    {
       return FALSE;
    }
    if(!m_splRightRows.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(0, 300), pContext))
    {
       return FALSE;
    }
    if(!m_splRightRows.CreateView(1, 0, RUNTIME_CLASS(CLeftView), CSize(0, 0), pContext))
    {
       return FALSE;
    }
    
    //设置水平和垂直分隔条的初始位置

    m_splMainCols.SetColumnInfo(0, 100, 0); m_splMainCols.SetColumnInfo(1, 300, 0); m_splRightRows.SetRowInfo(0,150,0); return TRUE; }

    4、预览

    二、视图中添加控件

    1、首先在**View.h中定义一个按钮标识

      #define ID_BUTTON 100     

    2、

     其次给C**View类添加一个成员变量
    public:
             CButton m_myButton;   //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型

    3、然后创建按钮实例

       m_myButton.Create(_T("示例按钮"),  //按钮的caption属性,按钮的显示
                                                 WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN
                                                CRect(20,320,50,340),   //这个参数指出按钮在视图中的位置和按钮的大小。
                                                this,         //这个指针指向按钮这个窗体的父窗体
                                                ID_BUTTON);  //这是刚才为按钮定义的常量,按钮的控制ID
                          然后调用函数m_MyButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_MyButton.ShowWindow(SW_SHOW)显示出按钮。
             说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。
    int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
        if (CView::OnCreate(lpCreateStruct) == -1)
            return -1;
        
        m_MyButton.Create(_T("示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, 
         CRect(20,320,50,340), this, ID_BUTTON);
         m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE));  //给按钮加载一个图标
        m_MyButton.ShowWindow(SW_HIDE);
        
        return 0;
    }

    三、响应控件的事件

    1、声明函数原型

    C**View类的声明中声明一个protected类型的函数       
     //{{AFX_MSG(CSoftView)
        afx_msg void OnMyButton();
     //}}AFX_MSG

    2、添加事件对应关系

    BEGIN_MESSAGE_MAP(C**View, CView)
    END_MESSAGE_MAP()
    在这个标记中写入如下代码:ON_BN_CLICKED(ID_BUTTON, OnMybutton)

    3、实现OnMyButton()函数

    void CLeftView::OnbtnDown()   
    {
        MessageBox("这是一个简单的消息框"); 
    }
  • 相关阅读:
    Linux 自定义快捷命令
    Linux 用户登陆提示This account is currently not available
    Linux 切换用户提示Permission denied
    Netty核心组件之ChannelPipeline
    Netty核心组件之ChannelHandler
    Netty核心组件之Channel
    Netty核心组件之ChannlFuture
    Error creating bean with name 'eurekaAutoServiceRegistration'
    关于mysql数据库时间与java后台时间类型
    rabbitMQ-helloWorld
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2919090.html
Copyright © 2011-2022 走看看