⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rygwnd.cpp

📁 VC技术内幕
💻 CPP
字号:
// RygWnd.cpp : implementation file
//

#include "stdafx.h"
#include "RygWnd.h"

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

LRESULT CALLBACK AFX_EXPORT
	RygWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	CWnd* pWnd;

	pWnd = CWnd::FromHandlePermanent(hWnd);
	if (pWnd == NULL) {
		// Assume that client created a CRygWnd window
		pWnd = new CRygWnd();
		pWnd->Attach(hWnd);
	}
	ASSERT(pWnd->m_hWnd == hWnd);
	ASSERT(pWnd == CWnd::FromHandlePermanent(hWnd));
	LRESULT lResult = AfxCallWndProc(pWnd, hWnd, message,
	                                 wParam, lParam);
	return lResult;
}

/////////////////////////////////////////////////////////////////////////////
// CRygWnd

// static data members
CRect  CRygWnd::s_rect(-500, 1000, 500, -1000); // outer rectangle
CPoint CRygWnd::s_point(300, 300); // rounded corners
CRect  CRygWnd::s_rColor[] = {CRect(-250, 800, 250, 300),
                              CRect(-250, 250, 250, -250),
                              CRect(-250, -300, 250, -800)};
CBrush CRygWnd::s_bColor[] = {RGB(192, 192, 192),
                              RGB(0xFF, 0x00, 0x00),
                              RGB(0xFF, 0xFF, 0x00),
                              RGB(0x00, 0xFF, 0x00)};

BOOL CRygWnd::RegisterWndClass(HINSTANCE hInstance) // static member
                                                    //  function
{
	WNDCLASS wc;
	wc.lpszClassName = "RYG"; // matches class name in client
	wc.hInstance = hInstance;
	wc.lpfnWndProc = RygWndProc;
	wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
	wc.hIcon = 0;
	wc.lpszMenuName = NULL;
	wc.hbrBackground = (HBRUSH) ::GetStockObject(LTGRAY_BRUSH);
	wc.style = CS_GLOBALCLASS;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	return (::RegisterClass(&wc) != 0);
}

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

CRygWnd::CRygWnd()
{
	m_nState = 0;
	TRACE("CRygWnd constructor\n");
}

CRygWnd::~CRygWnd()
{
	TRACE("CRygWnd destructor\n");
}


BEGIN_MESSAGE_MAP(CRygWnd, CWnd)
	//{{AFX_MSG_MAP(CRygWnd)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_MESSAGE(RYG_SETSTATE, OnSetState)
	ON_MESSAGE(RYG_GETSTATE, OnGetState)
END_MESSAGE_MAP()

void CRygWnd::SetMapping(CDC* pDC)
{
	CRect clientRect;
	GetClientRect(clientRect);
	pDC->SetMapMode(MM_ISOTROPIC);
	pDC->SetWindowExt(1000, 2000);
	pDC->SetViewportExt(clientRect.right, -clientRect.bottom);
	pDC->SetViewportOrg(clientRect.right / 2, clientRect.bottom / 2);
}

void CRygWnd::UpdateColor(CDC* pDC, int n)
{
	if (m_nState == n + 1) {
		pDC->SelectObject(&s_bColor[n+1]);
	}
	else {
		pDC->SelectObject(&s_bColor[0]);
	}
	pDC->Ellipse(s_rColor[n]);
}

/////////////////////////////////////////////////////////////////////////////
// CRygWnd message handlers

void CRygWnd::OnPaint() 
{
	int i;
	CPaintDC dc(this); // device context for painting
	SetMapping(&dc);
	dc.SelectStockObject(DKGRAY_BRUSH);
	dc.RoundRect(s_rect, s_point);
	for (i = 0; i < 3; i++) {
		UpdateColor(&dc, i);
	}

}

void CRygWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// Notification code is HIWORD of wParam, 0 in this case
	GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID(),
		(LONG) GetSafeHwnd()); // 0
}

void CRygWnd::PostNcDestroy() 
{
	TRACE("CRygWnd::PostNcDestroy\n");
	delete this; // CWnd::PostNcDestroy does nothing
}

LRESULT CRygWnd::OnSetState(WPARAM wParam, LPARAM lParam)
{
	TRACE("CRygWnd::SetState, wParam = %d\n", wParam);
	m_nState = (int) wParam;
	Invalidate(FALSE);
	return 0L;
}

LRESULT CRygWnd::OnGetState(WPARAM wParam, LPARAM lParam)
{
	TRACE("CRygWnd::GetState\n");
	return m_nState;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -