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("這是一個簡單的消息框"); 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM