#include "stdafx.h"
#include "EX21D.h"
#include "RygWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern "C" _declspec(dllexport)void Ex21dEntry(){}

BEGIN_MESSAGE_MAP(CEX21DApp, CWinApp)
END_MESSAGE_MAP()
// CEX21DApp 构造CEX21DApp::CEX21DApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CEX21DApp 对象CEX21DApp theApp;
// CEX21DApp 初始化BOOL CEX21DApp::InitInstance()
{
//CRygWnd::RegisterWndClass(AfxGetInstanceHandle());
CWinApp::InitInstance(); return TRUE;
}#pragma once
#include <Windows.h>
#define RYG_SETSTATE WM_USER+0
#define RYG_GETSTATE WM_USER+1
LRESULT CALLBACK AFX_EXPORT
RygWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

// CRygWndclass CRygWnd : public CWnd
{
DECLARE_DYNAMIC(CRygWnd)public:
CRygWnd();
virtual ~CRygWnd();protected:
afx_msg LRESULT OnSetState(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnGetState(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
private:
int m_nState;
static CRect s_rect;
static CPoint s_point;
static CRect s_rColor[3];
static CBrush s_bColor[4];
public:
static BOOL RegisterWndClass(HINSTANCE hInstance);
private:
void SetMapping(CDC* pDC);
void UpdateColor(CDC* pDC,int n);
public:
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
virtual void PostNcDestroy();
};
#include "stdafx.h"
#include "EX21D.h"
#include "RygWnd.h"
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"user32.lib")
// CRygWnd
LRESULT CALLBACK AFX_EXPORT 
RegWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CWnd* pWnd;
pWnd=CWnd::FromHandlePermanent(hWnd);
if(pWnd==NULL)
{
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;
}
CRect CRygWnd::s_rect(-500,1000,500,-1000);
CPoint CRygWnd::s_point(300,300);
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)
{
WNDCLASS wc;
wc.lpszClassName=_T("RYG");
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);
}
IMPLEMENT_DYNAMIC(CRygWnd, CWnd)
CRygWnd::CRygWnd()
{
m_nState=0;
TRACE("CRygWnd constructor\n");
}CRygWnd::~CRygWnd()
{
TRACE("CRygWnd destructor\n");
}
BEGIN_MESSAGE_MAP(CRygWnd, CWnd)
ON_MESSAGE(RYG_SETSTATE,OnSetState)
ON_MESSAGE(RYG_GETSTATE,OnGetState)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
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 消息处理程序
void CRygWnd::OnPaint()
{
int i;
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
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)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
GetParent()->SendMessage(WM_COMMAND,GetDlgCtrlID(),(LONG)GetSafeHwnd()); CWnd::OnLButtonDown(nFlags, point);
}
void CRygWnd::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
delete this; CWnd::PostNcDestroy();
}LRESULT CRygWnd::OnSetState(WPARAM wParam,LPARAM lParam)
{
m_nState=(int)wParam;
Invalidate(FALSE);
return 0L;
}
LRESULT CRygWnd::OnGetState(WPARAM wParam,LPARAM lParam)
{
return m_nState;
}报错内容:>     
1>RygWnd.obj : error LNK2019: 无法解析的外部符号 _RygWndProc@16,该符号在函数 "public: static int __cdecl CRygWnd::RegisterWndClass(struct HINSTANCE__ *)" (?RegisterWndClass@CRygWnd@@SAHPAUHINSTANCE__@@@Z) 中被引用
1>D:\Debug\EX21D.dll : fatal error LNK1120: 1 个无法解析的外部命令