[color=#0000FF]如何修改才能运行?请各位指教[/color]。
用键盘移动窗口客户区中的一个椭圆(源码如下) 1建立"Win32 Application" "An empty project"
2添加一个"cpp"源文件(整个程序放在一个cpp中)
编码如下: #include"afxwin.h"
//框架窗口类
class CMyWnd: public CFrameWnd
{
CRect m_rectBody;
public:
CMyWnd(){m_rectBody=CRect(100,100,150,180);}
protected:
afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
}; //消息映射
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_KEYDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP() //框架窗口类的成员函数
void CMyWnd::OnKeyDown (UINT nChar,UINT nRepCnt,UINT nFlags)
{
CRect rectClient;
GetClientRect(&rectClient);
InvalidateRect(m_rectBody,TRUE);
switch(nChar)
{
case VK_UP:
if(m_rectBody.top>rectClient.top)
{
rectClient.top-=5;
rectClient.bottom -=5;
}
break;
case VK_DOWN:
if(m_rectBody.bottom <rectClient.bottom )
{
rectClient.top+=5;
rectClient.bottom +=5;
}
break;
case VK_LEFT:
if(m_rectBody.right <rectClient.right )
{
rectClient.right +=5;
rectClient.right+=5;
}
break;
case VK_RIGHT:
if(m_rectBody.left>rectClient.left )
{
rectClient.right -=5;
rectClient.right-=5;
}
break; default:
break;
InvalidateRect(m_rectBody,FALSE);
}
}
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
dc.SelectStockObject(LTGRAY_BRUSH);
dc.Ellipse(m_rectBody);
}; //应用程序类
class CMyApp: public CWinApp
{
public:
BOOL InitInstance();
}; //应用程序类的成员
BOOL CMyApp::InitInstance()
{
CMyWnd *pFrame=new CMyWnd;
pFrame->Create(0,_T("move ellipse with keyboard"));
pFrame->ShowWindow(m_nCmdShow);
pFrame->UpdateWindow();
this->m_pMainWnd=pFrame;
return TRUE;
} //全局应用程序对象
CMyApp ThisApp; //程序完,谢谢指教!!!
用键盘移动窗口客户区中的一个椭圆(源码如下) 1建立"Win32 Application" "An empty project"
2添加一个"cpp"源文件(整个程序放在一个cpp中)
编码如下: #include"afxwin.h"
//框架窗口类
class CMyWnd: public CFrameWnd
{
CRect m_rectBody;
public:
CMyWnd(){m_rectBody=CRect(100,100,150,180);}
protected:
afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
}; //消息映射
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_KEYDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP() //框架窗口类的成员函数
void CMyWnd::OnKeyDown (UINT nChar,UINT nRepCnt,UINT nFlags)
{
CRect rectClient;
GetClientRect(&rectClient);
InvalidateRect(m_rectBody,TRUE);
switch(nChar)
{
case VK_UP:
if(m_rectBody.top>rectClient.top)
{
rectClient.top-=5;
rectClient.bottom -=5;
}
break;
case VK_DOWN:
if(m_rectBody.bottom <rectClient.bottom )
{
rectClient.top+=5;
rectClient.bottom +=5;
}
break;
case VK_LEFT:
if(m_rectBody.right <rectClient.right )
{
rectClient.right +=5;
rectClient.right+=5;
}
break;
case VK_RIGHT:
if(m_rectBody.left>rectClient.left )
{
rectClient.right -=5;
rectClient.right-=5;
}
break; default:
break;
InvalidateRect(m_rectBody,FALSE);
}
}
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
dc.SelectStockObject(LTGRAY_BRUSH);
dc.Ellipse(m_rectBody);
}; //应用程序类
class CMyApp: public CWinApp
{
public:
BOOL InitInstance();
}; //应用程序类的成员
BOOL CMyApp::InitInstance()
{
CMyWnd *pFrame=new CMyWnd;
pFrame->Create(0,_T("move ellipse with keyboard"));
pFrame->ShowWindow(m_nCmdShow);
pFrame->UpdateWindow();
this->m_pMainWnd=pFrame;
return TRUE;
} //全局应用程序对象
CMyApp ThisApp; //程序完,谢谢指教!!!
的Use run-time library选debug multithreaded。
可以运行,但是不是想要的效果,自已检查OnKeyDown函数。
switch(nChar)
{
case VK_UP:
if(m_rectBody.top>rectClient.top)
{
rectClient.top-=5;
rectClient.bottom -=5;
}
break;
case VK_DOWN:
if(m_rectBody.bottom <rectClient.bottom )
{
rectClient.top+=5;
rectClient.bottom +=5;
}
....你把上面的rectClient全部换成m_rectBodyswitch(nChar)
{
case VK_UP:
if(m_rectBody.top>rectClient.top)
{
// rectClient.top-=5;
// rectClient.bottom -=5;
m_rectBody.top-=5;
m_rectBody.bottom -=5;
}
break;
case VK_DOWN:
if(m_rectBody.bottom <rectClient.bottom )
{
m_rectBody.top+=5;
m_rectBody.bottom +=5;
}
break;
case VK_LEFT:
if(m_rectBody.right <rectClient.right )
{
m_rectBody.right +=5;
m_rectBody.right+=5;
}
break;
case VK_RIGHT:
if(m_rectBody.left>rectClient.left )
{
m_rectBody.right -=5;
m_rectBody.right-=5;
}
break;
default:
break;
InvalidateRect(m_rectBody,FALSE);
}