📄 itemdlg.cpp
字号:
// ItemDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ListTest.h"
#include "ItemDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CItemDlg dialog
CItemDlg::CItemDlg(CWnd* pParent /*=NULL*/)
: CDialog(CItemDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CItemDlg)
//}}AFX_DATA_INIT
m_bFocus = FALSE;
m_pListWnd = NULL;
m_bShowLast = FALSE;
ClearmemRect();
}
void CItemDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CItemDlg)
DDX_Control(pDX, IDC_BUTTON_ITEM, m_Button_Item);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CItemDlg, CDialog)
//{{AFX_MSG_MAP(CItemDlg)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON_ITEM, OnButtonItem)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
void CItemDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
this->GetWindowRect( &rect );
//////////////////////////////////////
dc.SetBkMode( TRANSPARENT );
if( m_bFocus )
{
dc.SetTextColor( RGB(255,255,255) );
CBrush brbank;//屏幕背景颜色
brbank.CreateSolidBrush( BKCOLOR );
CBrush* pOldBrush=dc.SelectObject( &brbank );
dc.Rectangle( 0, 0, rect.Width(), rect.Height() );
dc.SelectObject( pOldBrush );
}
else
{
dc.SetTextColor( RGB( 0, 0, 0) );
}
/////////////////////////////
int height = rect.Height()/m_ListInfo.iHeight;
BITMAP bmSize = MyShowImage( &dc, 1, 1, m_ListInfo.nIDResource );
MyTextOut( &dc, bmSize.bmWidth + FIRSTLIST_X, FIRSTLIST_Y, m_ListInfo.str1 );
MyTextOut( &dc, rect.Width()/3*2, FIRSTLIST_Y, m_ListInfo.str2 );
MyTextOut( &dc, rect.Width()/6*5, FIRSTLIST_Y, m_ListInfo.str3 );
for( int i = 0; i< m_ListInfo.iList; i++ )
{
MyTextOut( &dc, SECONDLIST_X, height*(i+1) + FIRSTLIST_Y, m_ListInfo.pStrList[i] );
}
if( m_bShowLast )
{
MyTextOut( &dc, 10, height*(i+1) + FIRSTLIST_Y, m_ListInfo.strEnd );
}
else;
}
void CItemDlg::OnButtonItem()
{
if( NULL != m_ListInfo.lpOnButton )
{
(* m_ListInfo.lpOnButton)( (LPVOID)m_pListWnd );
}
else;
if( NULL != m_pListWnd )
{
m_pListWnd->SetFocus();
}
else;
}
///////////////////////////////////////////////
void CItemDlg::MyMoveWindow( CRect* pRect )
{
MoveWindow( pRect, FALSE );
ShowWindow( SW_SHOW );
/////////////////////
if( NULL != m_ListInfo.lpOnButton )
{
RECT re;
CRect Rect_Bt;
m_Button_Item.GetWindowRect( &Rect_Bt );
re.bottom = pRect->Height() - 4;
re.top = re.bottom - Rect_Bt.Height();
re.right = pRect->Width() - 4;
re.left = re.right - Rect_Bt.Width();
m_bShowLast = TRUE;
m_Button_Item.MoveWindow( &re );
m_Button_Item.SetWindowText( m_ListInfo.strBT );
m_Button_Item.ShowWindow( SW_SHOW );
m_Button_Item.GetWindowRect( &m_Rect_Bt );
}
else
{
m_bShowLast = FALSE;
m_Button_Item.ShowWindow( SW_HIDE );
}
}
void CItemDlg::MyTextOut( CDC* pDC, int x, int y, LPCTSTR lpszString )
{
//////设置字体
/* CFont Font;
LOGFONT stFont;
memset( &stFont, 0, sizeof(LOGFONT) );
stFont.lfHeight = 12; // request a 12-pixel-height font
strcpy( stFont.lfFaceName, "宋体" ); // request a face name "Arial"
Font.CreateFontIndirect( &stFont );*/
CFont* pOldFont = pDC->SelectObject( m_pFont );//改变字体
pDC->TextOut( x, y, lpszString );
/////////////释放
pDC->SelectObject( pOldFont );//还原字体
// Font.DeleteObject();
}
BITMAP CItemDlg::MyShowImage( CDC* pDC, int x, int y, UINT nIDResource )
{
CBitmap bmp;
bmp.LoadBitmap( nIDResource );
BITMAP bmSize;
bmp.GetObject( sizeof(BITMAP), &bmSize );//取图大小
CDC dc;
dc.CreateCompatibleDC( pDC );
dc.SelectObject( &bmp );//记忆虚设备格式
//输出
pDC->BitBlt( x, y, x + bmSize.bmWidth, y + bmSize.bmHeight, &dc, 0, 0, SRCCOPY );
/////////////释放
dc.DeleteDC();
bmp.DeleteObject();
return bmSize;
}
BOOL CItemDlg::MySubtractRect( CRect* pRect, LPRECT lpRect )//输出多余区域
{
BOOL bRet = FALSE;
if( (0 == m_memRect.left) && (0 == m_memRect.right) )
{
m_memRect = *lpRect;
}
else
{
m_memRect.left = lpRect->left;
m_memRect.right = lpRect->right;
bRet = pRect->SubtractRect( lpRect, &m_memRect );
m_memRect = *lpRect;
}
return bRet;
}
////////////////////////
void CItemDlg::RedrawWindow_Focus( BOOL bFocus )
{
m_bFocus = bFocus;
this->RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_ERASE );
}
void CItemDlg::RedrawWindowEx( CRect* pRectItem, CRect* pRectList, BOOL bRedraw/*=FALSE*/ )
{
int y_top = 0, y_bottom = 0;
if( pRectItem->top < pRectList->top ) y_top = pRectList->top - pRectItem->top;
if( pRectItem->bottom > pRectList->bottom ) y_bottom = pRectItem->bottom - pRectList->bottom + 4;
/////////////////////
RECT Rect;
Rect.left = 0;
Rect.top = y_top;
Rect.right = pRectItem->Width();
Rect.bottom = pRectItem->Height() - y_bottom;
CRgn wndRgn;
wndRgn.CreateRectRgn( Rect.left, Rect.top, Rect.right, Rect.bottom );
SetWindowRgn( (HRGN)wndRgn, FALSE );
///////////
MyMoveWindow( pRectItem );
////////////
CRect OutRect;
if( MySubtractRect( &OutRect, &Rect ) )
{
if( bRedraw )
{
this->RedrawWindow( &OutRect, NULL, RDW_INVALIDATE | RDW_ERASE );
}
else;
}
else;
}
void CItemDlg::CheckButton( MSG* pMsg )
{
if( m_Rect_Bt.PtInRect( pMsg->pt ) )
{
m_Button_Item.PostMessage( pMsg->message );
}
else;
/* if( (WM_LBUTTONDOWN == pMsg->message) && ( IsCheckButton( pMsg->pt ) ) )
{
m_Button_Item.PostMessage( WM_LBUTTONDOWN );
}
else;
if( (WM_LBUTTONUP == pMsg->message) && ( IsCheckButton( pMsg->pt ) ) )
{
m_Button_Item.PostMessage( WM_LBUTTONUP );
}
else;*/
}
void CItemDlg::ClearmemRect()
{
m_memRect.bottom = 0;
m_memRect.left = 0;
m_memRect.right = 0;
m_memRect.top = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -