[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.   

    在project setting 的C/C++项里code generation选项
    的Use run-time library选debug multithreaded。
    可以运行,但是不是想要的效果,自已检查OnKeyDown函数。
      

  2.   


    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);