SSPC-Tester/Driver/PCIE8586/Samples/VC/Advanced/TabCtrlDoc.cpp

209 lines
5.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// TabCtrlEx.cpp : implementation file
//
#include "stdafx.h"
#include "TabCtrlDoc.h"
#include "PopupMenu.h"
#include "Resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTabCtrlDoc
CTabCtrlDoc::CTabCtrlDoc()
{
m_crSelColour = RGB(0,0,255);
m_crUnselColour = RGB(50,50,50);
}
CTabCtrlDoc::~CTabCtrlDoc()
{
m_SelFont.DeleteObject();
m_UnselFont.DeleteObject();
}
BEGIN_MESSAGE_MAP(CTabCtrlDoc, CTabCtrl)
//{{AFX_MSG_MAP(CTabCtrlDoc)
ON_WM_CREATE()
ON_WM_RBUTTONDOWN()
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTabCtrlDoc message handlers
int CTabCtrlDoc::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTabCtrl::OnCreate(lpCreateStruct) == -1) return -1;
ModifyStyle(0, TCS_OWNERDRAWFIXED);
return 0;
}
void CTabCtrlDoc::PreSubclassWindow()
{
CTabCtrl::PreSubclassWindow();
ModifyStyle(0, TCS_OWNERDRAWFIXED);
}
void CTabCtrlDoc::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect = lpDrawItemStruct->rcItem;
int nTabIndex = lpDrawItemStruct->itemID;
if (nTabIndex < 0) return;
BOOL bSelected = (nTabIndex == GetCurSel());
TCHAR label[64];
TC_ITEM tci;
tci.mask = TCIF_TEXT|TCIF_IMAGE;
tci.pszText = label;
tci.cchTextMax = 63;
if (!GetItem(nTabIndex, &tci )) return;
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
if (!pDC) return;
int nSavedDC = pDC->SaveDC();
// For some bizarre reason the rcItem you get extends above the actual
// drawing area. We have to workaround this "feature".
rect.top += ::GetSystemMetrics(SM_CYEDGE);
pDC->SetBkMode(TRANSPARENT);
pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE));
// Draw image
CImageList* pImageList = GetImageList();
if (pImageList && tci.iImage >= 0) {
rect.left += pDC->GetTextExtent(_T(" ")).cx; // Margin
// Get height of image so we
IMAGEINFO info;
pImageList->GetImageInfo(tci.iImage, &info);
CRect ImageRect(info.rcImage);
int nYpos = rect.top;
pImageList->Draw(pDC, tci.iImage, CPoint(rect.left, nYpos), ILD_TRANSPARENT);
rect.left += ImageRect.Width();
}
if (bSelected) {
pDC->SetTextColor(m_crSelColour);
pDC->SelectObject(&m_SelFont);
rect.top -= ::GetSystemMetrics(SM_CYEDGE);
pDC->DrawText(label, rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
} else {
pDC->SetTextColor(m_crUnselColour);
pDC->SelectObject(&m_UnselFont);
pDC->DrawText(label, rect, DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
}
pDC->RestoreDC(nSavedDC);
}
/////////////////////////////////////////////////////////////////////////////
// CTabCtrlDoc operations
void CTabCtrlDoc::SetColours(COLORREF bSelColour, COLORREF bUnselColour)
{
m_crSelColour = bSelColour;
m_crUnselColour = bUnselColour;
Invalidate();
}
void CTabCtrlDoc::SetFonts(CFont* pSelFont, CFont* pUnselFont)
{
ASSERT(pSelFont && pUnselFont);
LOGFONT lFont;
int nSelHeight, nUnselHeight;
m_SelFont.DeleteObject();
m_UnselFont.DeleteObject();
pSelFont->GetLogFont(&lFont);
m_SelFont.CreateFontIndirect(&lFont);
nSelHeight = lFont.lfHeight;
pUnselFont->GetLogFont(&lFont);
m_UnselFont.CreateFontIndirect(&lFont);
nUnselHeight = lFont.lfHeight;
SetFont( (nSelHeight > nUnselHeight)? &m_SelFont : &m_UnselFont);
}
void CTabCtrlDoc::SetFonts(int nSelWeight, BOOL bSelItalic, BOOL bSelUnderline,
int nUnselWeight, BOOL bUnselItalic, BOOL bUnselUnderline)
{
// Free any memory currently used by the fonts.
m_SelFont.DeleteObject();
m_UnselFont.DeleteObject();
// Get the current font
LOGFONT lFont;
CFont *pFont = GetFont();
if (pFont)
pFont->GetLogFont(&lFont);
else {
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
lFont = ncm.lfMessageFont;
}
// Create the "Selected" font
lFont.lfWeight = nSelWeight;
lFont.lfItalic = bSelItalic;
lFont.lfUnderline = bSelUnderline;
m_SelFont.CreateFontIndirect(&lFont);
// Create the "Unselected" font
lFont.lfWeight = nUnselWeight;
lFont.lfItalic = bUnselItalic;
lFont.lfUnderline = bUnselUnderline;
m_UnselFont.CreateFontIndirect(&lFont);
SetFont( (nSelWeight > nUnselWeight)? &m_SelFont : &m_UnselFont);
}
void CTabCtrlDoc::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CControlBar<61>ؼ<EFBFBD><D8BC>ϰ<EFBFBD><CFB0><EFBFBD><EFBFBD>Ҽ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
POINT ptScreen = point;
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB5BD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
ClientToScreen(&ptScreen);
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><E0A3AC>CMenu<6E><75><EFBFBD><EFBFBD>
CPopupMenu cMenu;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
cMenu.CreatePopupMenu();
// <20><><EFBFBD>Ӳ˵<D3B2><CBB5>ID_VIEW_VIEWTAB<41>Dz˵<C7B2><CBB5><EFBFBD><EFBFBD><EFBFBD>IDֵ
// <20><><EFBFBD>ӷָ<D3B7><D6B8><EFBFBD>
cMenu.AppendMenu(MF_STRING, ID_FILE_CLOSE, _T("<EFBFBD>رձ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
this->GetCurSel();
cMenu.LoadToolBarResource(IDR_TABVIEW_MENU);
cMenu.RemapMenu(&cMenu);
cMenu.EnableMenuItems(&cMenu, AfxGetMainWnd());
cMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, ptScreen.x,
ptScreen.y, AfxGetMainWnd());
//*/
//AfxMessageBox(_T("<22><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD>tab");
//CMDIFrameWnd::OnRButtonDown(nFlags, point);
}
void CTabCtrlDoc::OnSetFocus(CWnd* pOldWnd)
{
CTabCtrl::OnSetFocus(pOldWnd);
// TODO: Add your message handler code here
}