CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

菜鸟请教!关于键盘与光标的程序!

楼主tyboy007(tyboy007)2004-09-03 08:55:57 在 VC/MFC / 基础类 提问

具体描述如下:  
  SDI下  
  初始化时,光标在视图左上角,键盘输入字符,最后光标在字符最后面显示! 问题点数:20、回复次数:7Top

1 楼weakwater(我是河南人)回复于 2004-09-03 10:01:32 得分 5

BOOL   SetCursorPos(   int   x,   int   y);Top

2 楼tyboy007(tyboy007)回复于 2004-09-03 11:35:28 得分 0

有具体一点的代码吗?  
  我的功能是初始化有光标在左上角,  
  可以输入文字,  
  输入完,光标落在文字最后!  
  要用到Focus吗?  
  Top

3 楼weakwater(我是河南人)回复于 2004-09-03 11:52:17 得分 0

那个光标是你自己画的图,一闪一闪的也是你让它做的动作  
  都是通过编程实现的Top

4 楼tyboy007(tyboy007)回复于 2004-09-03 13:52:33 得分 0

怎样做呢?Top

5 楼yaozijian110()回复于 2004-09-03 14:17:50 得分 15

选择视图类的基类为CEditView就行了。  
  如果要自己编程实现的话,下面是一个很简单的例子。当然,它很不完善。  
   
  void   CCursorView::OnSetFocus(CWnd*   pOldWnd)    
  {  
  CView::OnSetFocus(pOldWnd);  
  //创建插入符  
  POINT   pt;  
  HDC       hdc;  
  TEXTMETRIC   tm;  
   
  hdc   =   ::GetDC(m_hWnd);  
  GetTextMetrics(hdc,&tm);  
  pt.x   =   2;//tm.tmAveCharWidth;  
  pt.y   =   tm.tmHeight   +   tm.tmExternalLeading;  
  ::ReleaseDC(m_hWnd,hdc);  
   
  ::CreateCaret(m_hWnd,NULL,pt.x,pt.y);  
  ::SetCaretPos(0,0);  
  ShowCaret();  
  }  
   
  void   CCursorView::OnKillFocus(CWnd*   pNewWnd)    
  {  
  CView::OnKillFocus(pNewWnd);  
  //销毁插入符  
  HideCaret();  
  DestroyCaret();  
  }  
   
  void   CCursorView::OnChar(UINT   nChar,   UINT   nRepCnt,   UINT   nFlags)    
  {  
  TCHAR     *pText;  
  int         iLen;  
   
  iLen     =   ::GetWindowTextLength(m_hWnd);  
  pText   =   (LPTSTR)malloc(sizeof(TCHAR)   *   (iLen+2));  
  memset(pText,0,sizeof(TCHAR)   *   (iLen+1));  
   
  ::GetWindowText(m_hWnd,pText,iLen+2);  
  pText[iLen]       =   nChar;  
  pText[iLen+1]   =   0;  
  SetWindowText(pText);  
  free(pText);  
   
  HideCaret();  
  Invalidate();  
  UpdateWindow();  
  //更新插入符位置  
  HDC                 hdc;  
  POINT             pt;  
  TEXTMETRIC   tm;  
   
  hdc   =   ::GetDC(m_hWnd);  
  GetTextMetrics(hdc,&tm);  
  ::GetCaretPos(&pt);  
   
  pt.x   +=   tm.tmAveCharWidth;  
  ::ReleaseDC(m_hWnd,hdc);  
   
  ::SetCaretPos(pt.x,pt.y);  
  ShowCaret();  
   
  CView::OnChar(nChar,   nRepCnt,   nFlags);  
  }  
   
  void   CCursorView::OnInitialUpdate()    
  {  
  CView::OnInitialUpdate();  
  ::SetWindowText(m_hWnd,TEXT(""));  
  }  
   
   
   
  void   CCursorView::OnDraw(CDC*   pDC)  
  {  
  CCursorDoc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  //   TODO:   add   draw   code   for   native   data   here  
  LPTSTR   pText;  
  int         iLen;  
   
  iLen     =   ::GetWindowTextLength(m_hWnd);  
  pText   =   (LPTSTR)malloc(sizeof(TCHAR)   *   (iLen+1));  
  memset(pText,0,sizeof(TCHAR)   *   (iLen+1));  
   
  ::GetWindowText(m_hWnd,pText,iLen+1);  
  pDC->TextOut(0,0,pText);  
   
  }Top

6 楼yaozijian110()回复于 2004-09-03 14:20:23 得分 0

你自己编程的时候,要考虑各个字符的宽度不一样,输入不同的字符时候插入符(所谓的光标的正确名字应该是“插入符”)位置的改变是不一样的;要处理回车;要考虑窗口大小的改变;要处理Delete,回车,光标移动键等键的作用;等等。Top

7 楼tyboy007(tyboy007)回复于 2004-09-04 08:29:05 得分 0

Thanks!Top

相关问题

  • winGorm程序如何修改光标
  • Console程序怎么控制光标?
  • 求软键盘源程序
  • Delphi如何捕捉光标键键盘事件.
  • 如何才能获得键盘光标输入?
  • 一个关于键盘控制光标的问题!
  • 怎么更改键盘输入光标的形状?
  • 如何用键盘控制tc程序。
  • 怎样编制键盘监视程序?
  • 程序实现死锁键盘

关键词

  • 光标
  • ptext
  • ilen
  • hdc
  • tm
  • pt
  • 插入
  • hwnd
  • tchar
  • uint

得分解答快速导航

  • 帖主:tyboy007
  • weakwater
  • yaozijian110

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo