各位CSDN上的大牛,我需要编写一个包含多个界面的应用程序(界面可以是基于对话框的),其中有一个主界面和几个分模块,通过主界面的按钮来弹出各个分模块,想请教下各个界面之间需要用多线程编写吗?还是用一般的消息响应单线程就行了?问题比较初级,请不吝赐教。PS:或者是否有更好的编写此类应用程序的方法~ ^-^

解决方案 »

  1.   

    不需要多线程。楼主可以这样试试:
    1.在资源中画几个对话框,创建它们的类
    2.在主对话框的初始化中new几个1中创建的对话框但并不显示
    3.点击主界面的按键后,调用对应的2中创建的对话框类的成员函数CreateWindow创建对话框,SetWindowPos设置对话框的位置,ShowWindow显示对话框。
    4.(其实是3)当点击按键后,判断是否对话框已显示,如果未显示,则用3的方法显示它,再调用ShowWindow隐藏之前的对话框;如果已经显示,就不处理。如果不想自已写按键,可以用VC中的 标签控件,只需在一条消息中执行3就行了。推荐书孙鑫的VC++深入详解,网上有免费视屏。
      

  2.   

    嗯,受教了。多谢dclchj,,没人回的话分就给你了。
    再请教下,标签控件是怎么个用法,孙鑫的视频我也在看。
      

  3.   

    那我把另一本教材中的 标签控件典型实例 简化下回复你吧。这本书名字是《Visual C++程序开发范例宝典》第二版,你可以去查一个,几乎所有控件的用法都有范例。1 拖放标签到对话框窗口,关联控件为 m_Tab
    2 在对话框初始化中(OnInitDialog) 
    m_Tab.InsertItem(0,"对话框1");
    m_Tab.InsertItem(1,"对话框2");
    m_Tab.InsertItem(2,"对话框3");
    接上
    m_DLG1 = new CDLG1; //这是你自已画的小对话画,通过ClassWizar设置的类。
    m_DLG2 = new CDLG2;
    m_DLG3 = new CDLG3;m_DLG1->cREATE(^^^^^^^); //创建对话框,另外两个也要创建。
    m_DLG2->cREATE(^^^^^^^);
    m_DLG3->cREATE(^^^^^^^);
    m_DLG1->ShowWindow(SW_SHOW); //默认显示对话框13,处理标签控件的 TCN_SELCHANGE事件,当标签选中项发生改变时发送这个消息
    void CMyDlg::OnSelchangeTab1(NMHDR* pNMHDR,LRSULT* pResult)
    {
      int index = m_Tab.GetCurSel(); //获得先中项的索引,即012之一。
      switch(index)
      {
       case 0:
         m_DLG1->CenterWindow(); //对话框1居中
          m_DLG1->ShowWindow(SW_SHOW); //显示对话框1
         m_DLG2->ShowWindow(SW_HIDE); //隐藏2
         m_DLG3->ShowWindow(SW_HIDE); //隐藏3
    case 1:
         m_DLG2->CenterWindow(); //对话框2居中
          m_DLG2->ShowWindow(SW_SHOW); //显示对话框2
         m_DLG1->ShowWindow(SW_HIDE); //隐藏1
         m_DLG3->ShowWindow(SW_HIDE); //隐藏3
    case 2:
         m_DLG3->CenterWindow(); //对话框3居中
          m_DLG3->ShowWindow(SW_SHOW); //显示对话框3
         m_DLG2->ShowWindow(SW_HIDE); //隐藏2
         m_DLG1->ShowWindow(SW_HIDE); //隐藏1
      *R和= 0;
    }  
      

  4.   

    嗯,明白了~可是我的本意是各个分模块界面之间是相互独立的,而与主对话框通过按钮联系,按钮肯定需要一些标识的。我想还是自己写按键比较好一点。十分感谢dclchj。