VS2005鼠标键盘事件(0814)

来源:互联网 发布:淘宝店铺装修图 编辑:程序博客网 时间:2024/06/05 08:13
 

从键盘读取输入

创建单窗口项目

为键盘数据创建存储区——为doc类增加CString类

class CkeyboardDoc : public CDocument

{

protected: // 仅从序列化创建

     CkeyboardDoc();

     DECLARE_DYNCREATE(CkeyboardDoc)

    CString StringData;

 

CkeyboardDoc::CkeyboardDoc()

{

     // TODO: 在此添加一次性构造代码

    StringData = "";

}

读取击键——为view类添加事件WM_CHAR

void CkeyboardView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

     // TODO: 在此添加消息处理程序代码和/或调用默认值

 

    CkeyboardDoc *pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    pDoc->StringData += (char)nChar;

    Invalidate();

     CView::OnChar(nChar, nRepCnt, nFlags);

}

 

void CkeyboardView::OnDraw(CDC* /*pDC*/)

{

     CkeyboardDoc* pDoc = GetDocument();

     ASSERT_VALID(pDoc);

     if (!pDoc)

         return;

 

     // TODO: 在此处为本机数据添加绘制代码

    pDC->TextOut(0,0,pDoc->StringData);

}

在窗口中间显示文本

     CRect rect;

     GetWindowRect(&rect);

     int x = rect.Width()/2;

     int y = rect.Height()/2;

 

     CSize size = pDC->GetTextExtent(pDoc->StringData);

     x -= size.cx/2;

     y -= size.cy/2;

 

     pDC->TextOutW(x,y,pDoc->StringData);

显示光标

         TEXTMETRIC textmetric;

         pDC->GetTextMetrics(&textmetric);

         CreateSolidCaret(textmetric.tmAveCharWidth/8,textmetric.tmHeight);

 

         CaretPosition.x = CaretPosition.y = 0;

         SetCaretPos(CaretPosition);

         ShowCaret();

移动光标

     pDC->TextOut(0,0,pDoc->StringData);

 

     CSize size = pDC->GetTextExtent(pDoc->StringData);

     HideCaret();

     CaretPosition.x = size.cx;

     SetCaretPos(CaretPosition);

     ShowCaret();

获取/失去焦点

         View类添加WM_KILLFOCUS/WM_SETFOCUS事件

鼠标事件

         View类添加WM_LBUTTONDOWN事件

void CkeyboardView::OnLButtonDown(UINT nFlags, CPoint point)

{

     x = point.x;

     y = point.y;

 

     CkeyboardDoc *pDoc = GetDocument();

     ASSERT_VALID (pDoc);

     pDoc->StringData.Empty();

     Invalidate();

     ……

}