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

一个超难的问题! 解决后立马给分!

楼主EmbraceTM()2005-06-02 15:49:00 在 VC/MFC / 基础类 提问

void   CProgramView::OnTest()    
  {  
  CWnd   *pWnd   =   AfxGetMainWnd()->GetWindow(GW_CHILD);  
   
  BOOL   bResult     =   ::CreateCaret(pWnd->m_hWnd,(HBITMAP)NULL,10,22);  
  //这里bResult   ==   1;  
  mHandle   =   CreateThread(NULL,0,MyFunc,(CWnd   *)pWnd,CREATE_SUSPENDED,&mID);  
  }  
   
  DWORD   WINAPI   MyFunc(LPVOID   lpParameter)  
  {  
  CWnd   *pWnd   =   (CWnd   *)lpParameter;  
  BOOL   bResult     =   CreateCaret(pWnd->m_hWnd,(HBITMAP)NULL,10,22);  
  //这里bResult   ==   0  
   
  POINT   pt;  
  pt.x   =   100;  
  pt.y   =   100;  
  pWnd->SetCaretPos(pt);  
  pWnd->ShowCaret();  
  return   0;  
  }  
   
  为什么在线程里调用CreateCaret就不成功呢?那么我应该怎样在一个线程中显示一个Caret呢?  
  问题点数:0、回复次数:4Top

1 楼younggle(洋溢)回复于 2005-06-02 16:11:25 得分 0

CWnd   *pWnd   =   AfxGetMainWnd()->GetWindow(GW_CHILD);  
  ===================================================  
  确认这个子窗口还存在吗?  
  也就是说在线程中判断   pWnd->m_hWnd   是否有效  
  if(   (   NULL   !=   pWnd->m_hWnd   )   &&   ::IsWindow(pWnd->m_hWnd)   )  
  {  
        BOOL   bResult     =   CreateCaret(pWnd->m_hWnd,(HBITMAP)NULL,10,22);  
  }Top

2 楼orbit(走了走了)回复于 2005-06-02 16:30:25 得分 0

CWnd   *pWnd   得到的是临时指针,不能作为线程参数,改成窗口句柄试试  
  void   CProgramView::OnTest()    
  {  
  CWnd   *pWnd   =   AfxGetMainWnd()->GetWindow(GW_CHILD);  
                    ASSERT(pWnd   !=   NULL);  
                    HWND   hWnd   =   pWnd->GetSafeHwnd();  
   
  BOOL   bResult     =   ::CreateCaret(hWnd,(HBITMAP)NULL,10,22);  
  //这里bResult   ==   1;  
  mHandle   =   CreateThread(NULL,0,MyFunc,(LPVOID)hWnd,CREATE_SUSPENDED,&mID);  
  }  
   
  DWORD   WINAPI   MyFunc(LPVOID   lpParameter)  
  {  
  HWND   hWnd   =   (HWND)lpParameter;  
  BOOL   bResult     =   CreateCaret(hWnd,(HBITMAP)NULL,10,22);  
  //这里bResult   ==   0  
   
  POINT   pt;  
  pt.x   =   100;  
  pt.y   =   100;  
  SetCaretPos(hWnd,pt);  
  ShowCaret(hWnd);  
  return   0;  
  }  
  Top

3 楼EmbraceTM()回复于 2005-06-02 16:36:42 得分 0

改成窗口句柄也不行!  
  我开个线程从串口读数,把串口数显到dc上,SetCaretPos时,为什么它的位置不变?HideCaret函数也不管用了,这是怎么回事呀?Top

4 楼dongfa(一桶江湖( http://www.codelive.net ))回复于 2005-06-02 17:06:52 得分 0

插入符不用开线程的.Top

相关问题

  • ¥¥¥¥winxp的超难问题,解决了立马送上100分$$$$$$$
  • 超级大菜题(立马给分)
  • 难死我了 !!!!!!!!!!1 (立马送300分)
  • 难死我了 !!!!!!!!!!1 (立马送300 分 )
  • 超菜问题之2,成功立马给分
  • 用JDBC连Access超怪异问题?答出立马100分!
  • **********高手请进,XP高难题,解决了,立马给分!!!!********
  • **********高手请进,高难题,200分大放送,解决了,立马给分!!!!********
  • dbgrid问题,立马给分
  • 超郁闷,Unable to compile class for JSP,分立马送出,不够另开贴再加.

关键词

  • 线程
  • null
  • pwnd
  • bresult
  • createcaret
  • hwnd
  • cwnd
  • lpparameter
  • hbitmap
  • setcaretpos

得分解答快速导航

  • 帖主:EmbraceTM

相关链接

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

广告也精彩

反馈

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