CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

★★★ 轻松取分,多文档界面上的几个小问题,请进! ★★★

楼主unrise(进了这条船,就下不来了 ^-^)2003-06-03 18:42:54 在 VC/MFC / 基础类 提问

问题1.   菜单上有两个子菜单ID_PlAY,   ID_STOP,m_bPlay,m_bStop为控制他们的标记(子菜单能否起作用)  
   
  void   MyFunction()   //   全局函数  
  {  
          ...  
      //   结束  
      //   这里怎么让  
      //     m_bPlay   =   true;  
      //     m_bStop   =   false;   系统收到这个消息?  
  }  
  void   CMainFrame::OnPlay()  
  {  
          m_bPlay   =   false;  
          m_bStop   =   true;  
          MyFunction();  
  }  
   
  问题2.   在多文档中,每次我点击打开,我要同时打开两个子窗口,同时在这之前关闭已有的子窗体.  
  而且我要在程序中随时操作该两个子窗口,该怎么做?  
   
  问题3.在一个BUTTON1上面放置位图(bitmap,在DELPHI中很EASY),该怎么办?  
   
   
  分数不够,大家可以开口,谢谢大家!!! 问题点数:100、回复次数:25Top

1 楼USTCTony(Tony)回复于 2003-06-03 18:51:29 得分 5

3可以使用CButtonST.可以到google上去搜索一下。  
  Top

2 楼jenneyme(没有)回复于 2003-06-03 18:52:20 得分 5

问题1.   你在MAINFRAME里面对每个菜单的ID加入onUpdateCmdUI函数,这里面判断如果你的控制菜单ID的值为真或假的话的情况。  
  问题2.   没看懂。  
  问题3.你查一下CButton的类,里面有专门的函数吧Top

3 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-03 19:04:50 得分 0

关于问题2.  
        因为我要在多文档功能中作图,数据可以从文件调入.   每次调入二个文件,在两个子窗口显示,同时关闭(如果有的话)已经有的其他子窗口.  
   
        关键是如何在调入新的文件后,关闭调入文件前的子窗口(如果存在)Top

4 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-03 19:18:15 得分 0

问题1.我知道什么原因了,谢谢...Top

5 楼yg_xh(果皮)回复于 2003-06-03 19:34:49 得分 5

关于问题2  
  可以在打开文件时设置一个标志bool   m_bOpen;  
  则可以在打开函数里这样写:  
  if(m_bOpen)  
        PostMessage()//发送一个文档关闭的消息,比如给VIEW发个WM_CLOSE  
  else  
        //正常的开启代码。  
  然后在文档关闭函数里,m_bOpen=false;Top

6 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-03 20:50:47 得分 0

关于问题2:  
  我想如此执行:  
  if(已经存在子子窗体)  
        先全部关闭;  
  //   新创建两个子窗体  
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);//   子窗体1  
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);//   子窗体2  
   
  void   CFuzzyLogicView::OnDraw(CDC*   pDC)  
  {  
          CFuzzyLogicDoc*   pDoc   =   GetDocument();  
          ASSERT_VALID(pDoc);  
          ////////////////  
          if(当前==子窗体1)  
                  ShowFigure1();  
          if(当前==子窗体2)  
                  ShowFigure2();  
   
  }  
   
  //   能否把我上面的话写成代码?  
  谢谢!!!Top

7 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-03 21:26:32 得分 0

关于问题3:  
   
  CButton*   pButton;  
  pButton   =   (CButton*)GetDlgItem(IDOK);     //   执行到这里错误  
  CBitmap   bitmap;  
  bitmap.LoadBitmap(IDB_BITMAP1);  
  pButton->SetBitmap(bitmap);  
   
  //  
  为什么执行的时候有误?  
  该怎么写?   还有MSDN中的BS_LEFT   该写在哪里?   谢谢!  
  Top

8 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-03 21:47:58 得分 0

问题4:   存在   c:\test.txt    
  WinExec("notepad.exe   c:\\test.txt",SW_SHOW);   //   记事本打开,可以  
   
  WinExec("wordpad.exe   c:\\test.txt",SW_SHOW);   //   写字板打开,不行?  
  是参数不对,还是别的原因?   该如果打开?Top

9 楼alphapaopao(炮炮)回复于 2003-06-03 22:50:04 得分 5

:(  
  不擅长Top

10 楼ukyoking(累)回复于 2003-06-04 09:26:53 得分 0

gzTop

11 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-04 09:39:33 得分 0

请各位大侠帮忙看看:问题2->问题4,分数不够加...thanksTop

12 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-04 11:04:38 得分 0

问题4已经解决了,是写字板的路径不在系统路径的缘故....  
  剩余问题2,问题3....          
  大侠们,拉兄弟一把       :-)Top

13 楼hwonzor(闲人)回复于 2003-06-04 15:27:26 得分 0

问题2  
  关掉所有子窗体  
  void   CMainFrame::CloseAllMDIWindows()  
  {  
  CFrameWnd*   pWnd   =   GetActiveFrame();  
  while(pWnd!=this)  
  {  
  pWnd->SendMessage(WM_CLOSE);  
  pWnd   =   GetActiveFrame();  
  }  
  }  
  问题3  
  void   CXXX::OnShowWindow(BOOL   bShow,   UINT   nStatus)    
  {  
  CXXX::OnShowWindow(bShow,   nStatus);  
   
  m_btm.LoadBitmap(IDB_BITMAP);//m_btm为CBitmap成员变量  
  m_btn.SetBitmap((HBITMAP)m_btm);//m_btn为CButton成员变量  
  m_btm.Detach();  
   
  }Top

14 楼hwonzor(闲人)回复于 2003-06-04 16:35:44 得分 0

忘了说明了,m_btn要有bitmap的styleTop

15 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-04 17:43:28 得分 0

hwonzor(闲人)   :  
  你总是那么热心,呵呵...   问题2按照你的意思已经解决了,谢谢...  
  问题3   研究ing...  
   
  回头结帐...Top

16 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 15:30:50 得分 0

hwonzor(闲人)   :  
  关于问题2,还有一点问题,就是:  
  BOOL   g_bShowFigure1;  
  BOOL   g_bShowFigure2;  
     
  CloseAllMDIWindows();     //   如果已经存在子窗体,先关闭  
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);     //   子窗体1  
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);     //   子窗体2  
   
  对于窗体1,2我将调用不同的自定义作图函数如ShowFigure1();ShowFigure2();  
   
  那么我如果在下面说明  
  void   CFuzzyLogicView::OnDraw(CDC*   pDC)  
  {  
                  ...  
          if(g_bShowFigure1)  
          {  
                  //   怎么让ShowFigure1();在子窗体1中显示?  
          }  
          if(g_bShowFigure2)  
          {  
                //   怎么让ShowFigure2();在子窗体2中显示?  
          }  
  }  
  Top

17 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 15:35:43 得分 0

补充说明:ShowFigure1();ShowFigure2();具体是什么这里不用考虑,你理解成由它们产生的图形,是不断地在变化,就可以了.Top

18 楼hwonzor(闲人)回复于 2003-06-06 16:16:58 得分 50

推荐不采用全局变量  
  假设我的工程为MdiTest2  
  1.首先在CMdiTest2Doc加入2个成员变量并初始化为false。  
  public:  
  BOOL   m_bShowFigure1;  
  BOOL   m_bShowFigure2;  
   
  2.修改以下  
                    CloseAllMDIWindows();      
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);     //   子窗体1  
  SendMessage(WM_COMMAND,(WPARAM)ID_FILE_NEW,0);     //   子窗体2  
   
  CMdiTest2App   *   pApp   =   (CMdiTest2App*)AfxGetApp();  
  POSITION   pos   =   pApp->GetFirstDocTemplatePosition();  
  ASSERT(pos);  
  CDocTemplate   *   pDocTemplate   =   pApp->GetNextDocTemplate(pos);  
  pos   =   pDocTemplate->GetFirstDocPosition();  
  ASSERT(pos);  
  CMdiTest2Doc   *   pDoc1;  
  CMdiTest2Doc   *   pDoc2;  
  pDoc1   =   (CMdiTest2Doc   *)pDocTemplate->GetNextDoc(pos);  
  pDoc1->m_bShowFigure1   =   TRUE;  
  ASSERT(pos);  
  pDoc2   =   (CMdiTest2Doc   *)pDocTemplate->GetNextDoc(pos);  
  pDoc2->m_bShowFigure2   =   TRUE;  
  3.修改void   CMdiTest2View::OnDraw(CDC*   pDC)  
  {  
  CMdiTest2Doc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  if   (pDoc->m_bShowFigure1)  
  ShowFigure1();  
  if   (pDoc->m_bShowFigure2)  
  ShowFigure2();  
  }Top

19 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 16:44:59 得分 0

闲人:  
  谢谢你的代码,你的热心让我无法不感动...我先加入它到我的程序中调试一下...   再次谢谢!Top

20 楼zzyx(菜农)回复于 2003-06-06 17:20:58 得分 30

问题3,闲人提供了比较好的解决方案  
   
  你的代码:  
  CButton*   pButton;  
  pButton   =   (CButton*)GetDlgItem(IDOK);     //   执行到这里错误  
  CBitmap   bitmap;  
  bitmap.LoadBitmap(IDB_BITMAP1);  
  pButton->SetBitmap(bitmap);  
   
  问题有两个:  
  1.   bitmap是个局部变量,函数执行完毕之后会被释放,结果是位图不能显示。解决办法是把它定义为类的成员变量,在初始化或其他合适的时候,进行LoadBitmap(只进行一次)。  
   
  2.   在SetBitmap前,需要设置BS_BITMAP。  
            pButton->SetButtonStyle   (   BS_BITMAP,true);  
        你提到的BS_LEFT也这样设置即可  
   
  至于你的运行出错,按说不应该,除非你根本就没有IDOK这个资源按钮。但俺测  
  试发现,对于IDOK似乎不管用。  
   
  俺的测试代码:  
  OnInitDialog  
  {  
  bRet=m_bitmap.LoadBitmap(IDB_BITMAP1);  
  }  
   
  void   CDlgWordDlg::OnBtnBmp()    
  {  
  CButton*   pButton;  
  pButton   =   (CButton*)GetDlgItem(IDC_BTN_TEST);    
  pButton->SetButtonStyle   (   BS_BITMAP,true);  
  pButton->SetBitmap(m_bitmap);  
  }  
  Top

21 楼Waitan(大雾)回复于 2003-06-06 17:27:37 得分 0

闲人终于写对了。  
  我着急啊!Top

22 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 18:02:38 得分 0

闲人:  
  你调试的第2部分是写在哪里的?  
   
  void   CMainFrame::OnFlsDataload()    
  {  
          //   我写在这里  
  }  
   
  其余的都安装你的意思写的,好像两个子窗口都显示同样的内容.  
  你定义的 CMdiTest2Doc   *   pDoc1;  
  CMdiTest2Doc   *   pDoc2;  
  (我定义在上面的函数体里,全局也试过)会一直影响着Draw()?Top

23 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 18:27:42 得分 0

闲人:  
        呵呵,你写的对的,是我没有对两个标记做初始化!太感谢了.  
   
  菜农:  
        好久不见,又看到你可爱的代码了,谢谢...  
   
   
  Top

24 楼unrise(进了这条船,就下不来了 ^-^)回复于 2003-06-06 20:34:08 得分 0

to:闲人   again  
        由于我自定义的两个函数ShowFigure1();ShowFigure2();是动态变化了.因此,你写的代码存在更新上的不足:  
  以你pDoc1,pDoc2的先后次序,pDoc2->m_bShowFigure2所对应的函数,总是动态更新(我就是需要这样),  
   
  但是pDoc1->m_bShowFigure1   所对应的函数,在作图时,总是需要先点击pDoc2对应的子窗体,再回头点击pDoc1对应的子窗体,它才会更新一次!  
   
  有什么方法改进吗?  
   
  再次谢谢...  
  Top

25 楼hwonzor(闲人)回复于 2003-06-07 11:04:52 得分 0

unrise(小超)   :  
  你所说的问题不存在吧!如果你是用定时器来控制视图的刷新的,即使pDoc1对应的子窗体没有处在激活状态,它的视图仍然在更新啊。Top

相关问题

  • 如何实现outlook express 单文档界面的视图分割界面
  • 把单文档界面分成foxmail的形式,怎么分?
  • 送分大问题(((极其简单)),foxmail界面是单文档还是多文档?(很快给分)
  • 多文档界面中保存文件遇到的一点问题!100分
  • 在单文档工界面中文件读取与存储的问题
  • 单文档界面标题问题?
  • 100分急问!在基于CFormView的多文档界面中打开文件时遇到的问题.
  • 关于MFC中多文档界面中CChildFrame的问题
  • 多文档应用的界面设计问题
  • 单文档白色的界面怎么能改?

关键词

  • 函数
  • 文档
  • 代码
  • 文件
  • pdoc
  • bshowfigure
  • pbutton
  • cmditest2doc
  • showfigure
  • 子窗体

得分解答快速导航

  • 帖主:unrise
  • USTCTony
  • jenneyme
  • yg_xh
  • alphapaopao
  • hwonzor
  • zzyx

相关链接

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

广告也精彩

反馈

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