CTabSheet

// TabSheet.cpp : implementation file
//

#include "stdafx.h"
#include "dltool.h"
#include "TabSheet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTabSheet

CTabSheet::CTabSheet()
{
 m_nNumOfPages = 0;
 m_nCurrentPage = 0;
}

CTabSheet::~CTabSheet()
{
}


BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
 //{{AFX_MSG_MAP(CTabSheet)
 ON_WM_LBUTTONDOWN()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabSheet message handlers

BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
 if( MAXPAGE == m_nNumOfPages )
  return FALSE;

 m_nNumOfPages++;

 m_pPages[m_nNumOfPages-1] = pDialog;
 m_IDD[m_nNumOfPages-1] = ID;
 m_Title[m_nNumOfPages-1] = title;

 return TRUE;
}

void CTabSheet::SetRect()
{
 CRect tabRect, itemRect;
 int nX, nY, nXc, nYc;

 GetClientRect(&tabRect);
 GetItemRect(0, &itemRect);

 nX=itemRect.left;
 nY=itemRect.bottom+1;
 nXc=tabRect.right-itemRect.left-2;
 nYc=tabRect.bottom-nY-2;

 m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
 for( int nCount=1; nCount < m_nNumOfPages; nCount++ )
  m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);

}

void CTabSheet::Show()
{
 for( int i=0; i < m_nNumOfPages; i++ )
 {
  m_pPages[i]->Create( m_IDD[i], this );
  InsertItem( i, m_Title[i] );
 }

 m_pPages[0]->ShowWindow(SW_SHOW);
 for( i=1; i < m_nNumOfPages; i++)
  m_pPages[i]->ShowWindow(SW_HIDE);

 SetRect();

}

void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)
{
 CTabCtrl::OnLButtonDown(nFlags, point);

 if(m_nCurrentPage != GetCurFocus())
 {
  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  m_nCurrentPage=GetCurFocus();
  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
//  m_pPages[m_nCurrentPage]->SetFocus();
 }
}

int CTabSheet::SetCurSel(int nItem)
{
 if( nItem < 0 || nItem >= m_nNumOfPages)
  return -1;

 int ret = m_nCurrentPage;

 if(m_nCurrentPage != nItem )
 {
  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  m_nCurrentPage = nItem;
  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
//  m_pPages[m_nCurrentPage]->SetFocus();
  CTabCtrl::SetCurSel(nItem);
 }

 return ret;
}

int CTabSheet::GetCurSel()
{
 return CTabCtrl::GetCurSel();
}

 

 

#if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)
#define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TabSheet.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CTabSheet window
#define MAXPAGE 16

class CTabSheet : public CTabCtrl
{
// Construction
public:
 CTabSheet();

// Attributes
public:

// Operations
public:

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CTabSheet)
 //}}AFX_VIRTUAL

// Implementation
public:
 int GetCurSel();
 int SetCurSel(int nItem);
 void Show();
 void SetRect();
 BOOL AddPage(LPCTSTR title, CDialog *pDialog, UINT ID);
 virtual ~CTabSheet();

 // Generated message map functions
protected:
 LPCTSTR m_Title[MAXPAGE];
 UINT m_IDD[MAXPAGE];
 CDialog* m_pPages[MAXPAGE];
 int m_nNumOfPages;
 int m_nCurrentPage;
 //{{AFX_MSG(CTabSheet)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)

使用

// dltoolDlg.h : header file
//

#pragma once


// CdltoolDlg dialog
#include "TabSheet.h"
#include "DisplayDlg.h" 
#include "GdcDlg.h"
#include "BacklightDlg.h"
#include "KeypadDlg.h"
#include "AudioDlg.h"
#include "afxcmn.h"

class CdltoolDlg : public CDialog
{
// Construction
public:
 CDisplayDlg m_display_dlg;
 CGdcDlg m_gdc_dlg;
 CBacklightDlg m_backlight_dlg;
 CKeypadDlg m_keypad_dlg;
 CAudioDlg m_audio_dlg;


 CdltoolDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
 enum { IDD = IDD_DLTOOL_DIALOG };

 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support


// Implementation
public:
 void printmsg(CString str);


protected:
 HICON m_hIcon;

 // Generated message map functions
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 DECLARE_MESSAGE_MAP()
public:
 CTabSheet m_tab;
 afx_msg void OnBnClickedConnect();
 afx_msg void OnBnClickedCheckconn();
 afx_msg void OnBnClickedDisconnect();
 CString m_message;
 UINT m_comport;
};

CScrollWnd 这是一个从MFC的源码中扒出来的一个滚动窗口类,功能基本类似于CScrollView, 但是它的基类是CWnd,这样为一些不需要使用Document View结构但又想使用滚动窗口的小程序提供了比较方便的方法,他的接口除了两个坐标转换函数以外与CScrollView基本相同,同时在画的地方采用了内存DC缓冲,避免了闪烁,这下你可以随意的刷新了(当然刷新太多了对效率还是有一些影响的) 因为是工作需要,所以设计了这个类,目前只测试了基本的功能,映射模式为MM_TEXT在屏幕上显示正常,至于打印的支持还没有做。 因为跟CScrollView功能基本相同,所以没有写什么注释,大家可以查MSDN中CScrollView的帮助,如果发现跟CScrollView不一致的地方给我mail吧。 使用方法,跟CScrollView一样,在你的类中继承,实现OnInitialUpdate和OnDraw就成了。 CTabSheet 一个TabCtrl,可以方便的把各种窗口加入到其中,做成属性页的形式,功能很简单,但是很 实用。 CStaticSplitter 静态切分窗口,这个类是从WTL的SplitterWnd里面扒出来的,因为MFC的SplitterWnd实在是太太太难用了,而且很难看,看到WTL里面的这个不错,想拿来用,不过如果是MFC程序的话再加上WTL的风格有些不协调,就干脆把它的形式改成MFC的风格了,函数看着挺多,不过常用并不多,至于注释嘛,我只是在经常用的函数声明上大概写了几句,相知道具体实现,那就去看代码吧:)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值