📄 tipdlg.cpp
字号:
#include "stdafx.h"
#include "StockRefer.h"
#include "resource.h"
#include "tipdlg.h"
#include "MainFrm.h"
#include <sys\stat.h>
#include <sys\types.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifndef _WIN32
// supply a replacement for CDC::FillSolidColor for MSVC 1.5
void FillSolidRect(CDC *pDC, LPCRECT lpRect, COLORREF clr)
{
ASSERT_VALID(pDC);
ASSERT(pDC->m_hDC != NULL);
pDC->SetBkColor(clr);
pDC->ExtTextOut(0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
}
#endif
/////////////////////////////////////////////////////////////////////////////
// CTipDlg dialog
CTipDlg::CTipDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_TIP, pParent)
{
// We need to find out what the startup and file position parameters are
// If startup does not exist, we assume that the Tips on startup is checked TRUE.
iTipPos = AfxGetApp()->GetProfileInt(_T("Base"),_T("TipPos"),0);
iOldPos = iTipPos;
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
ASSERT(pFrame);
m_tmpTip = pFrame->m_bShowTip;
GetNextTipString(m_strTip);
}
CTipDlg::~CTipDlg()
{
// This destructor is executed whether the user had pressed the escape key
// or clicked on the close button. If the user had pressed the escape key,
// it is still required to update the filepos in the ini file with the
// latest position so that we don't repeat the tips!
// But make sure the tips file existed in the first place....
if(iTipPos != iOldPos)
AfxGetApp()->WriteProfileInt(_T("Base"),_T("TipPos"),iTipPos);
}
void CTipDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTipDlg)
DDX_Control(pDX, IDC_STARTUP, m_CTip);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTipDlg, CDialog)
//{{AFX_MSG_MAP(CTipDlg)
ON_BN_CLICKED(IDC_NEXTTIP, OnNextTip)
ON_WM_CTLCOLOR()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTipDlg message handlers
void CTipDlg::OnNextTip()
{
GetNextTipString(m_strTip);
UpdateData(FALSE);
CDC *pDC = GetDC() ;
DoPaint (pDC, TRUE) ;
VERIFY (ReleaseDC (pDC)) ;
}
void CTipDlg::GetNextTipString(CString& strNext)
{
if(iTipPos > MaxTip - 1)
iTipPos = 0;
strNext = TipStr[iTipPos];
iTipPos++;
}
HBRUSH CTipDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (pWnd->GetDlgCtrlID() == IDC_TIPSTRING)
return (HBRUSH)GetStockObject(WHITE_BRUSH);
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
void CTipDlg::OnOK()
{
CDialog::OnOK();
// Update the startup information stored in the INI file
int m_vtip;
m_vtip = m_CTip.GetCheck();
if(m_vtip != m_tmpTip)
{
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
ASSERT(pFrame);
pFrame->m_bShowTip = m_vtip;
}
}
BOOL CTipDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// If Tips file does not exist then disable NextTip
m_CTip.SetCheck(m_tmpTip);
CenterWindow();
return TRUE; // return TRUE unless you set the focus to a control
}
void CTipDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
DoPaint (&dc, FALSE) ;
// Do not call CDialog::OnPaint() for painting messages
}
int CTipDlg::DoModal ()
{
return CDialog::DoModal () ;
}
void CTipDlg::DoPaint (CDC *pdc, BOOL updatetext)
{
// Get paint area for the big static control
CWnd* pStatic ;
CRect tiprect, bigrect,
seprect, didyourect, bulbrect;
CBrush brush;
brush.CreateStockObject(WHITE_BRUSH);
pStatic = GetDlgItem(IDC_STATIC1);
pStatic->GetWindowRect(&bigrect);
ScreenToClient(&bigrect);
pStatic = GetDlgItem(IDC_TIPSTRING);
pStatic->GetWindowRect(&tiprect);
ScreenToClient(&tiprect);
pStatic = (CStatic*)GetDlgItem (IDB_LIGHTBULB) ;
pStatic->GetWindowRect (bulbrect) ;
if (!updatetext)
{
// Paint the background white.
#ifndef _WIN32
bigrect.InflateRect (-1,-1) ;
#endif
#ifndef _WIN32
FillSolidRect(pdc, bigrect, ::GetSysColor(COLOR_WINDOW));
#else
pdc->FillSolidRect(bigrect, ::GetSysColor(COLOR_WINDOW));
#endif
seprect = bigrect ;
// Paint left side gray
bigrect.right = tiprect.left - 10 ;
CBrush gbrush;
#if 0
gbrush.CreateStockObject(GRAY_BRUSH);
#else
gbrush.CreateSolidBrush( ::GetSysColor(COLOR_BTNSHADOW)) ;
#endif
#ifndef _WIN32
FillSolidRect(pdc, bigrect, ::GetSysColor(COLOR_BTNSHADOW));
#else
pdc->FillSolidRect(bigrect, ::GetSysColor(COLOR_BTNSHADOW));
#endif
pdc->SetBkColor(::GetSysColor(COLOR_WINDOW)) ;
// Load bitmap and get dimensions of the bitmap
CBitmap bmp;
bmp.LoadBitmap(IDB_LIGHTBULB);
BITMAP bmpInfo;
#ifdef _WIN32
bmp.GetBitmap(&bmpInfo);
#else
bmp.GetObject(sizeof(BITMAP), &bmpInfo) ;
#endif
// Draw bitmap in top corner and validate only top portion of window
CDC dcTmp;
ScreenToClient (bulbrect) ;
dcTmp.CreateCompatibleDC(pdc);
dcTmp.SelectObject(&bmp);
bulbrect.bottom = bmpInfo.bmHeight + bulbrect.top;
bulbrect.right = bmpInfo.bmWidth + bulbrect.left;
dcTmp.SelectObject(&gbrush) ;
dcTmp.ExtFloodFill(0,0, 0x00ffffff, FLOODFILLSURFACE) ;
#if 1
pdc->BitBlt(bulbrect.left, bulbrect.top, bulbrect.Width(), bulbrect.Height(),
&dcTmp, 0, 0, SRCCOPY);
#endif
seprect.top = bulbrect.bottom + 6 ;
seprect.bottom = seprect.top + 1 ;
#ifndef _WIN32
FillSolidRect(pdc, seprect, ::GetSysColor(COLOR_BTNSHADOW));
#else
pdc->FillSolidRect(seprect, ::GetSysColor(COLOR_BTNSHADOW));
#endif
pdc->SetBkColor(::GetSysColor(COLOR_WINDOW)) ;
}
CFont font, fonttext ;
BOOL fok = font.CreateFont(16, 0, 0, 0, FW_BOLD, 0, 0, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, _T("宋体"));
fok = fonttext.CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, _T("宋体"));
CFont *pOldFont = pdc->SelectObject(&font);
// Draw out "Did you know..." message next to the bitmap
CString strMessage;
strMessage.LoadString(IDS_DIDYOUKNOW);
didyourect = tiprect ;
didyourect.top = bulbrect.top ;
pdc->DrawText(strMessage, -1, didyourect, DT_SINGLELINE);
pdc->SelectObject(&fonttext) ;
// efface le rectangle contenant le text
#ifndef _WIN32
FillSolidRect(pdc, tiprect, ::GetSysColor(COLOR_WINDOW));
#else
pdc->FillSolidRect(tiprect, ::GetSysColor(COLOR_WINDOW));
#endif
pdc->DrawText(m_strTip, -1, tiprect, DT_WORDBREAK);
pdc->SelectObject(pOldFont) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -