精华内容
下载资源
问答
  • 一个通用类,可在无模式ATL对话框中启用标准制表符和加速器处理。
  • visual c++ vc在对话框上添加属性页选项卡标签页tab.zip
  • vc++为对话框添加属性页选项卡.zip visual c++如何给对话框,容器添加属性页标签选项卡
  • 参考博文:http://blog.csdn.net/xuanzhangyang/article/details/45418103首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1,Button2,Button3)放在对话框上,注意留出一定的空间给子对话框。...

    参考博文:http://blog.csdn.net/xuanzhangyang/article/details/45418103

    首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1,Button2,Button3)放在对话框上,注意留出一定的空间给子对话框。

    往工程里添加3个类(CChildDlg1,CChildDlg2,CChildDlg3),基类是CDialog. 
    右键工程名,添加->类->选择MFC类并双击之后见下图 
    这里写图片描述 
    进入每个类的对话框资源中,将Border属性设为none,将Style属性设为child (这一步很重要) 
    在工程头文件中包含每个子对话框类的头文件,并声明出每个类的对象(在主对话框的cpp文件中声明CChildDlg1 childDlg1;CChildDlg2 childDlg2;CChildDlg3 childDlg3;),注意给每BUTTON1,BUTTON2,BUTTON3右键添加变量button1,button2,button3.这样才算给button一个名字,可以调用相关的函数,例如:EnableWindow()。

    以下有两种实现方式 
    一:点击一个按钮时将此按钮置为不可用,将其他按钮置为可用,销毁其他子对话框,创建本按钮对应的子对话框,这种方式比较节省内存,但是每次需要重新创建子对话框,比界面切换会不流畅 
    实现: 
    1、在每个子对话框类(h文件)中重载(或者说重载把)OnCanel函数,并将其改为

    void CChildDlg1::OnCancel()
    {
        // TODO:  在此添加专用代码和/或调用基类
    
        DestroyWindow();
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意非模态对话框销毁需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的

    2、双击Button1,进入Button1的响应函数中,添加以下代码

        button1.EnableWindow(FALSE);//设置button1为不可用
        button2.EnableWindow(TRUE);
        button3.EnableWindow(TRUE);
        childDlg1.Create(IDD_CHILDDLG1, this);
        childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);//设置窗口相对于父窗口的位置
        childDlg1.ShowWindow(SW_SHOW);//设置childDlg1对话框为可见
        childDlg2.OnCancel();//销毁child2子对话框
        childDlg3.OnCancel();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对于其它两个按钮添加类似的代码(注意逻辑).

    二.在主对话框的OnInitDialog函数中创建每个子对话框,并将第一个按钮设置为不可用(自己想为什么),然后在各个按钮的点击事件中用显示与隐藏的方法达到选项卡的效果,这种方法每个子对话框都存在于内存中,比较消耗资源,但是界面切换比较流畅

    1.在主对话框中创建各个对话框

    BOOL CMainDlg::OnInitDialog()
    {
        button1.EnableWindow(FALSE);
        childDlg1.Create(IDD_CHILDDLG1, this);
        childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg1.ShowWindow(SW_SHOW);
        childDlg2.Create(IDD_CHILDDLG2, this);
        childDlg2.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg2.ShowWindow(SW_SHOW);
        childDlg3.Create(IDD_CHILDDLG3, this);
        childDlg3.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg3.ShowWindow(SW_SHOW);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.在各个按钮响应函数中显示与隐藏子对话框

    BOOL CMainDlg::On:OnBnClickedBtbutton1()
    {
        button1.EnableWindow(FALSE);
        button2.EnableWindow(TRUE);
        button3.EnableWindow(TRUE);
        childDlg1.ShowWindow(SW_SHOW);
        childDlg2.ShowWindow(SW_HIDE);
        childDlg3.ShowWindow(SW_HIDE);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其他的两个按钮类似(注意逻辑);

    展开全文
  • 首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1,Button2,Button3)放在对话框上,注意留出一定的空间给子对话框。往工程里添加3个类(CChildDlg1,CChildDlg2,CChildDlg3),基类是CDialog. ...

    首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1,Button2,Button3)放在对话框上,注意留出一定的空间给子对话框。

    往工程里添加3个类(CChildDlg1,CChildDlg2,CChildDlg3),基类是CDialog.
    右键工程名,添加->类->选择MFC类并双击之后见下图
    这里写图片描述
    进入每个类的对话框资源中,将Border属性设为none,将Style属性设为child (这一步很重要)
    在工程头文件中包含每个子对话框类的头文件,并声明出每个类的对象(CChildDlg1 childDlg1;CChildDlg2 childDlg2;CChildDlg3 childDlg3;)

    以下有两种实现方式
    一:点击一个按钮时将此按钮置为不可用,将其他按钮置为可用,销毁其他子对话框,创建本按钮对应的子对话框,这种方式比较节省内存,但是每次需要重新创建子对话框,比界面切换会不流畅
    实现:
    1、在每个子对话框类中重载OnCanel函数,并将其改为

    void CChildDlg1::OnCancel()
    {
        // TODO:  在此添加专用代码和/或调用基类
    
        DestroyWindow();
    }

    注意非模态对话框销毁需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的

    2、双击Button1,进入Button1的响应函数中,添加以下代码

        button1.EnableWindow(FALSE);//设置button1为不可用
        button2.EnableWindow(TRUE);
        button3.EnableWindow(TRUE);
        childDlg1.Create(IDD_CHILDDLG1, this);
        childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);//设置窗口相对于父窗口的位置
        childDlg1.ShowWindow(SW_SHOW);//设置childDlg1对话框为可见
        childDlg2.OnCancel();//销毁child2子对话框
        childDlg3.OnCancel();

    对于其它两个按钮添加类似的代码(注意逻辑).

    二.在主对话框的OnInitDialog函数中创建每个子对话框,并将第一个按钮设置为不可用(自己想为什么),然后在各个按钮的点击事件中用显示与隐藏的方法达到选项卡的效果,这种方法每个子对话框都存在于内存中,比较消耗资源,但是界面切换比较流畅

    1.在主对话框中创建各个对话框

    BOOL CMainDlg::OnInitDialog()
    {
        button1.EnableWindow(FALSE);
        childDlg1.Create(IDD_CHILDDLG1, this);
        childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg1.ShowWindow(SW_SHOW);
        childDlg2.Create(IDD_CHILDDLG2, this);
        childDlg2.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg2.ShowWindow(SW_SHOW);
        childDlg3.Create(IDD_CHILDDLG3, this);
        childDlg3.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        childDlg3.ShowWindow(SW_SHOW);
    }

    2.在各个按钮响应函数中显示与隐藏子对话框

    BOOL CMainDlg::On:OnBnClickedBtbutton1()
    {
        button1.EnableWindow(FALSE);
        button2.EnableWindow(TRUE);
        button3.EnableWindow(TRUE);
        childDlg1.ShowWindow(SW_SHOW);
        childDlg2.ShowWindow(SW_HIDE);
        childDlg3.ShowWindow(SW_HIDE);
    }
    

    其他的两个按钮类似(注意逻辑);

    OK ,有错误的地方还望大家指正 @HackerXZY

    展开全文
  • VB 制作具有选项卡对话框 VB 制作具有选项卡对话框
  • 可拆卸,可停靠,可调整大小,浮动,选项卡对话框和FloatArea小部件
  • 几个原创的js界面控件(菜单,对话框,进度条,选项卡,树)
  • MFC选项卡的实现

    千次阅读 2017-03-16 15:05:01
    对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。然后利用Class Wizard来为Tab Control控件创建一个控件变量,该变量是CTabCtrl类的,再为其他...
    方案一
     
    

    在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。然后利用Class Wizard来为Tab Control控件创建一个控件变量,该变量是CTabCtrl类的,再为其他控件也创建相应的控件类。 在主对话框的初始函数中CProperty1Dlg::OnInitDialog()加入如下代码:

    [cpp]  view plain  copy
    1. //本例插入两个标签,实际运用中可通过循环插入所需个数的标签,运行后默认第一个标签被选中  
    2. m_tab.InsertItem( 0, _T("Tab1") );  
    3. m_tab.InsertItem( 1, _T("Tab2") );  
    4. //将不是第一个标签的控件隐藏掉,只留下你要的控件  
    5. m_button2.ShowWindow( SW_HIDE );  
    6. 再利用ClassWizard处理Tab Control的 TCN_SELCHANGE 的消息。在消息处理函数中,利用CWnd::ShowWindow来使相应的控件显示和隐藏。  
    7. void CProperty1Dlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)  
    8. {  
    9. //GetCurSel返回当前被选中的标签的索引号(以0为基础算起)  
    10. int sel = m_tab.GetCurSel();  
    11. switch(sel)  
    12. {  
    13. case 0:  
    14. m_button1.ShowWindow( SW_SHOW );  
    15. m_button2.ShowWindow( SW_HIDE );  
    16. break;  
    17. case 1:  
    18. m_button2.ShowWindow( SW_SHOW );  
    19. m_button1.ShowWindow( SW_HIDE );  
    20. break;  
    21. }  
    22. *pResult = 0;  
    23. }  

    方案二

    本这个方案中,我将使用MFC中现成的CPropertySheet和CPropertyPage类来完成将控件分散到各个对话框类中。

    首先加入两个(或数个)对话框资源。修改各对话框资源的属性,将对话框的Caption属性改为你要在标签上所显示的文字。将对话框的Style属性改为:Child, Border属性改为:Thin, 只选中Title Bar复选框,去掉其他复选框。然后你可以在这些对话框中加入要分开显示的各个控件

    为上述对话框资源分别制作一个对话框类,该对话框类是从CPropertyPage继承。这样一来各子对话框类就好了,主对话框类可以直接使用CPropertySheet类。使用如下代码即可:

    [cpp]  view plain  copy
    1. CPropertySheet sheet("属性页对话框");  
    2. CPage1 page1;  
    3. CPage2 page2;  
    4. //加入子对话框作为一个属性页  
    5. sheet.AddPage(&page1);  
    6. sheet.AddPage(&page2);  
    7. //产生一个模态对话框,也可以使用Create方法来产生一个非模态对话框(具体参见MSDN)  
    8. sheet.DoModal();  

    如何在主对话框中放置其他控件呢?如果直接使用CPropertySheet的话,是不可以的,但是别忘了我们可以从CPropertySheet类继承自己的类啊!

    方案三

    首先还是要创建那些要在属性页中的显示的子对话框类,创建步骤和方案二一样,都是从CPropertyPage继承。

    这次我们将从CPropertySheet类继承自己的类(假设类名为CMySheet)。我们要在这里放上一个button控件。那么现在先在CMySheet中加入一个CButton类的成员变量m_button。

    在CMySheet类中的OnInitDialog()函数里,这样写:

    [cpp]  view plain  copy
    1. BOOL bResult = CPropertySheet::OnInitDialog();  
    2. //取得属性页的大小  
    3. CRect rectWnd;  
    4. GetWindowRect(rectWnd);  
    5. //调整对话框的宽度  
    6. SetWindowPos(NULL, 0, 0,rectWnd.Width() + 100,rectWnd.Height(),SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);  
    7. CRect rectButton(rectWnd.Width() + 25, 25,rectWnd.Width()+75, 75);  
    8. //用程序创建一个按钮  
    9. m_button.Create("Button", BS_PUSHBUTTON, CRect(rectWnd.Width(), 25,rectWnd.Width()+75, 50) , this, 1);  
    10. //显示这个按钮  
    11. m_button.ShowWindow( SW_SHOW );  
    12. CenterWindow();  
    13. return bResult;  

     使用方案三虽然能在主对话框中加入控件,但是也比较麻烦,首先所加的控件只能在属性页的右边或下边。并且用程序来产生控件比较烦琐,位置与大小不易控制。那么还有其他方法,既能在对话框中加入属性页,又能在主对话框随意添加控件

    方案四

    不从CPropertySheet继承自己的类,还是直接使用它。各属性页的子对话框类还是需要的,创建方法和上述两个方案相同。

    首先我们新建一个基于对话框的工程。在编辑已有的一个主对话框中可以自由加一些所需的控件,但是得留出一定的空间用于放置属性页。

    在主对话框类里加入一个CPropertySheet类的一个成员变量(m_sheet)代表整个属性页。再加入一些各子对话框类的实例作为成员变量(m_page1、m_page2……)。

    在主对话框类的OnInitDialog()函数中加入:

    [cpp]  view plain  copy
    1. //加入标签,标签名由各个子对话框的标题栏决定  
    2. m_sheet.AddPage(&m_page1);  
    3. m_sheet.AddPage(&m_page2);  
    4. //用Create来创建一个属性页  
    5. m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);  
    6. RECT rect;  
    7. m_sheet.GetWindowRect(&rect);  
    8. int width = rect.right - rect.left;  
    9. int height = rect.bottom - rect.top;  
    10. //调整属性页的大小和位置  
    11. m_sheet.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);  

    这个方案可以自由在主对话框中加一些必要的控件,而且属性页中的控件也都分散在了各个子对话框类中,使用非常方便。

    方案五

    使用Tab Control,并且从CTabCtrl控件类继承自己的类(CTabSheet)来处理。

    首先我先介绍一下如何使用CTabSheet。

    先要制作子对话框类,这次的子对话框类不要从CPropertyPage继承,而是直接从CDialog继承。并且各个子对话框资源的属性应设置为:Style为Child, Border为None。

    在主对话框资源中,加入一个Tab Control,并且适当调整位置和大小。利用ClassWizard来为这个Tab Control创建一个CTabSheet的控件变量。

    在主对话框的OnInitDialog()加入:

    m_sheet.AddPage("tab1", &m_page1, IDD_DIALOG1);

    m_sheet.AddPage("tab2", &m_page2, IDD_DIALOG2);

    m_sheet.Show();

    就这样就可以在对话框上制作出一个完美的属性页了。效果和上图完全一样。

    下面我就来讲讲CTabSheet类的细节内容。

    CTabSheet是从CTabCtrl继承来的,用于Tab Control的控件类。在类中有一个成员变量用来记录各子对话框的指针CDialog* m_pPages[MAXPAGE]; MAXPAGE是该类所能加载的标签的最大值。

    类中有一个AddPage方法,用于记录子对话框的指针和所使用对话框资源的ID号。

    [cpp]  view plain  copy
    1. BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)  
    2. {  
    3. if( MAXPAGE == m_nNumOfPages )  
    4. return FALSE;  
    5. //保存目前总的子对话框数  
    6. m_nNumOfPages++;  
    7. //记录子对话框的指针、资源ID、要在标签上显示的文字  
    8. m_pPages[m_nNumOfPages-1] = pDialog;  
    9. m_IDD[m_nNumOfPages-1] = ID;  
    10. m_Title[m_nNumOfPages-1] = title;  
    11. return TRUE;  
    12. }  
    13. 在使用AddPage加入了若干子对话框后,必须调用CTabSheet的Show方法来真正生成标签和子对话框。  
    14. void CTabSheet::Show()  
    15. {  
    16. //利用CDialog::Create来创建子对话框,并且使用CTabCtrl::InsertItem来加上相应的标签  
    17. forint i=0; i < m_nNumOfPages; i++ )  
    18. {  
    19. m_pPages[i]->Create( m_IDD[i], this );  
    20. InsertItem( i, m_Title[i] );  
    21. }  
    22. //由于对话框显示时默认的是第一个标签被选中,所以应该让第一个子对话框显示,其他子对话框隐藏  
    23. m_pPages[0]->ShowWindow(SW_SHOW);  
    24. for( i=1; i < m_nNumOfPages; i++)  
    25. m_pPages[i]->ShowWindow(SW_HIDE);  
    26. SetRect();  
    27. }  

    生成好标签和子对话框后,调用CTabSheet::SetRect来计算并调整属性页的大小。

    [cpp]  view plain  copy
    1. void CTabSheet::SetRect()  
    2. {  
    3. CRect tabRect, itemRect;  
    4. int nX, nY, nXc, nYc;  
    5. //得到Tab Control的大小  
    6. GetClientRect(&tabRect);  
    7. GetItemRect(0, &itemRect);  
    8. //计算出各子对话框的相对于Tab Control的位置和大小  
    9. nX=itemRect.left;  
    10. nY=itemRect.bottom+1;  
    11. nXc=tabRect.right-itemRect.left-2;  
    12. nYc=tabRect.bottom-nY-2;  
    13. //利用计算出的数据对各子对话框进行调整  
    14. m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);  
    15. forint nCount=1; nCount < m_nNumOfPages; nCount++ )  
    16. m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);  
    17. }  

    在单击标签栏后,应该是相应的子对话框显示,正在显示的子对话框应该隐藏。因此利用ClassWizard来处理WM_LBUTTONDOWN消息。

    [cpp]  view plain  copy
    1. void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)  
    2. {  
    3. CTabCtrl::OnLButtonDown(nFlags, point);  
    4. //判断是否单击了其他标签  
    5. if(m_nCurrentPage != GetCurFocus())  
    6. {  
    7. //将原先的子对话框隐藏  
    8. m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);  
    9. m_nCurrentPage=GetCurFocus();  
    10. //显示当前标签所对应的子对话框  
    11. m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);  
    12. }  
    13. }  

    这样利用CTabSheet这个类就可以轻松地在对话框上放置自己的属性页了,并且控件都分散在各子对话框类中,符合对象封装的思想。而且用这个方法来制作属性页就可以利用ClassWizard来轻松地生成消息映射处理Tab Control的消息了。例如:可以处理TCN_SELCHANGE消息来对切换了标签时进行一些动作。

      方案五另一写法
               思路:当我们调用InsertItem()这个函数的时候,选项卡控件将会添加一个标签页,这个时候,我们将自己的对话框的窗体的指针与此标签页关联起来,当用户进行标签页的切换的时候,我们根据当前是哪个标签页,显示哪个对话框,不是与当前标签页关联的对话框,我们将其隐藏即可.这样我们便可以实现选项卡控件.
            第一步:新建一个自己的类CTabSheet继承CTabCtrl.
            第二步:定义有用的成员变量
            CDialog* m_dlgWnd[MAXTABPAGE]; //这个是存放对话框指针的指针数组
            int m_curTabNumber; //记录当前用户添加了几个标签页
            int m_selTabID;  //当前用户点击的标签页的ID
            第三步:添加成员函数
            //通过这个函数,可以将一个对话框指针与添加的标签页关联起来,insWnd是创建的非模式对话框的指针,wndID是对话框的ID,pageText是标签页的标题
            void CreateTabPage(CWnd *insWnd, int wndID,CString pageText) 
           //添加控件的点击事件的处理,当点击后得到当前点击的标签页的ID,然后将与此标签页相关的对话框显示,其它的隐藏即可
            void OnLButtonDown(UINT nFlags, CPoint point) 
           通过添加以上的成员变量及成员函数即可实现一个简单的选项卡控件的用法
           下面我将这两个成员函数的代码贴出来,并详细讲解

    [cpp]  view plain  copy
    1.         //创建并且增加一个标签页  
    2.     //创建并且增加一个标签页  
    3. void CTabSheet::CreateTabPage(CWnd *insWnd, int wndID,CString pageText)  
    4. {  
    5.      if (m_curTabNumber >= MAXTABPAGE)  
    6.      {  
    7.          MessageBox("标签页己经达到最大!","创建出错!",MB_OK);  
    8.          return;  
    9.      }  
    10.         //首先new一个对话框的指针,但是不要调用create函数,再将些指针当成参数传进来即可,创建己由此函数做完  
    11.      if (NULL == insWnd)  
    12.      {  
    13.          MessageBox("标签页为空","创建出错",MB_OK);  
    14.          return;  
    15.      }  
    16.                  //创建对话框,并且增加标签页  
    17.      CDialog* curDlg = (CDialog*)insWnd;  
    18.      curDlg->Create(wndID,this);  
    19.      int suc = InsertItem(m_curTabNumber,pageText);  
    20.      if (-1 == suc)  
    21.      {  
    22.          MessageBox("插入标签页失败","失败",MB_OK);  
    23.          return;  
    24.      }  
    25.      curDlg->ShowWindow(SW_SHOW);  
    26.      //将这个对应的窗体指针存放起来  
    27.      m_dlgWnd[m_curTabNumber] = curDlg;  
    28.      //此时选择当前页面  
    29.      SetCurSel(m_curTabNumber);  
    30.      m_selTabID = m_curTabNumber;  
    31.      m_curTabNumber ++;  
    32. }  
    33. //点击左键事件,处理  
    34. void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)   
    35. {  
    36.     // TODO: Add your message handler code here and/or call default  
    37.     CTabCtrl::OnLButtonDown(nFlags, point);  
    38.     //得到当前用户点击的标签页的ID  
    39.     int curSelect = GetCurSel();  
    40.     //得到当前标签页的位置以便设置对话框显示的位置  
    41.     CRect curRect;  
    42.     GetClientRect(curRect);  
    43.     if (-1 == curSelect)  
    44.     {  
    45.         return;  
    46.     }  
    47.                //查找标签页,将与当前用户点击的标签页相关的对话框显示出来,其它的对话框隐藏  
    48.     for (int i = 0; i < m_curTabNumber; i ++)  
    49.     {  
    50.         if (i == curSelect)  
    51.         {  
    52.                                        m_dlgWnd[i]->SetWindowPos(NULL,0,20,curRect.Width(),curRect.bottom,SWP_SHOWWINDOW);  
    53.         }  
    54.         else  
    55.         {  
    56.                m_dlgWnd[i]->SetWindowPos(NULL,0,20,curRect.Width(),curRect.bottom,SWP_HIDEWINDOW);  
    57.         }  
    58.     }  
    59.     m_selTabID = curSelect;  
    60.     Invalidate();  
    61.     //CTabCtrl::OnLButtonDown(nFlags, point);  
    62. }  


    以上为关键的两个函数,下面介绍调用的方法
    创建非模式的对话框
    CTabSheet m_tabSheet;
    CMyDlg* m_dlg = new CMyDlg;
    m_tabSheet.CreateTabPage(m_dlg ,IDD_DLG_ID,"第一个标签页");
    这样就可以产生一个标签页了,当然还可以继续调用此函数添加标签页 
    展开全文
  • 选项卡上添加对话框(VC)

    千次阅读 2008-10-15 15:35:00
    1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_...

      1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab   Control   控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl   
      2、创建两个新的对话框资源,其属性作如下修改:   
      Border:none   //边界为空,这样它就没了标题栏   
      Style   :Child   //   这样这个模板就可以当作另一个窗口的子窗口了。   
            其它如果没有必要,就不用改了。   
      在上面加一些控件什么的,具体操作跟普通对话框没有区别。   
      完成后从这两个对话框模板生成两个新的对话框类。   
      3、在主对话框中为新添加进来的两个类增加两个变量:   
      如:CDialog1   dlg1;   
      CDialog2   dlg2;   
      4、在主对话框的OnInitDialog()函数中添加如下类似的代码:   
     m_pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_TAB1);
     
     TCITEM  item;  
     item.mask   =   TCIF_TEXT;  
     item.pszText   =   "第一页";  
       
     m_pTabCtrl->InsertItem(0,&item);  
     item.pszText   ="第二页";  
     m_pTabCtrl->InsertItem(1,&item);  
       
     dlg1.Create   (IDD_DIALOG1, m_pTabCtrl);  
     dlg2.Create   (IDD_DIALOG2, m_pTabCtrl);  
       
     dlg1.SetWindowPos   (NULL,10,30,400,100,SWP_SHOWWINDOW);  
     dlg2.SetWindowPos   (NULL,10,30,400,100,SWP_HIDEWINDOW);     
      解释如下:   
      两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。   
      SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。   
      5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。   
      在事件处理中添加如下代码,如下例:   
    void CTabCtrlTstDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
    {
     // TODO: Add your control notification handler code here
       CRect   r;  
       m_pTabCtrl->GetClientRect   (&r);  
      
       switch(m_pTabCtrl->GetCurSel())  
       {  
       case   0:  
        dlg1.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_SHOWWINDOW);  
        dlg2.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_HIDEWINDOW   );      
        break;  
       case   1:  
        dlg1.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_HIDEWINDOW);  
        dlg2.SetWindowPos   (NULL,10,30,r.right   -20,r.bottom   -40,SWP_SHOWWINDOW   );      
        break;  
       }   

     *pResult = 0;
    }
      要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel()   函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。   

    展开全文
  • Joist创建并显示模拟内容,主屏幕,导航栏,“关于”对话框,从而可以在屏幕之间切换以及其他与框架相关的功能。 通过PhET Interactive Simulations 文献资料 是PhET仿真开发的最完整指南。 本指南包括如何获取...
  • 同样,如果一个选项卡,则可以隐藏选项卡区域。 Control具有27种内置的选项卡绘图样式,包括VS2003,VS2008,VS2010和VS2019选项卡。 所有样式的工程图都是通过编程方式创建的,不需要资源。 您可以通过编辑现有...
  • 在MFC中利用Tab控件实现了选项卡的功能呢给,同时在子对话框中利用图像控件显示图像,图像大小根据控件大小进行缩放!
  • 1 17238 三应用实列 2 选项卡TabHost 一认识选项卡TabHost 选项卡用于实现一个多标签页的用户界面通过它可以将一个复杂的对话框分割成若干个标签页实现对信息的分类显示和管理使用该组件不仅可以使界
  • 告 实训(实验)项目: Android选项卡使用 实验目的 学习选项卡相关属性与使用 掌握选项卡监听事件的编写方法 实训实验设计器材步骤结论 简介 选项卡用于实现一个多标签页的用户界面通过它可以将一个复杂的对话框分割成...
  • MFC选项卡控件的使用

    千次阅读 2015-12-06 23:17:52
    2. 在对话框上添加Tab控件,然后,在控件上右键添加变量,变量名为m_TabWin. 类型为CTabCtrl.  3. 在对话框的初始化函数OnInitDialog里面添加如下代码: m_TabWin.InsertItem(0, _T("Main Hyposis")); m_TabWin....
  • 1.新建一个对话框工程。命名为:TabControlTest,选择“基于对话框”,点击完成。 2. 在对话框上添加Tab控件,然后,在控件上右键添加变量,变量名为m_tab。 3. 在对话框的初始化函数OnInitDialog里面添加如下代码: ...
  • 如何为对话框添加背景图片

    千次阅读 2018-01-21 20:29:31
    觉得对话框灰灰的背景色不符合高冷的气质,所以想为对话框添加美美的图片,然后就了研究了一下下: 首先在网上找到符合你气质的、美美的图,转成.bmp格式存放在res文件夹中,然后在资源视图Birmap添加图片,命名...
  • PLC编程基础

    万次阅读 多人点赞 2018-05-17 17:20:00
    按钮,将显示下载选项对话框。   6) 6) 设置程序栏,并单击确认按钮。 4.从PLC传送程序 按照下列步骤将PLC程序上传。   1)选择工程工作区中的PLC对象。   2)选择工具栏中的 上载 按钮。工程树中的第一个...
  • 打开选项对话框后,它将循环浏览所有选项卡以截屏,从而使您更容易查看正在配置的选项卡。请记住,这是一个晚上的项目,可能包含很多粗糙的边缘,所以如果什么着火了,请不要怪我。 支持语言:English
  • 自动调整界面布局的对话框

    千次下载 热门讨论 2010-06-04 12:53:49
    此程序实现了当对话框大小改变时其界面布局可自动随之调整,编译环境为VC++2005
  • 本资源使用ShowWindow()函数控制主对话框中所有控件的显示,不需要为每个标签创建子对话框
  • 这段代码非常值得注释,并用英语简单地解释了每一行的含义,该示例包括3个选项卡,您可以自定义每个选项卡,还可以添加更多选项卡。 如果您喜欢它,请投票! 如果可以通过向下滚动此页面一些意见或建议,我将不胜...
  •  波形图属性对话框包括7个选项卡:外观、格式与精度、曲线、标尺、游标、说明信息和数据绑定。  图2 波形图属性对话框  (1)外观。  “外观”选项卡主要用来设置图标签、标题、图形工具选板、游标图例、...
  • Word中新建样式/修改样式对话框中的各个选项意义!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,147
精华内容 36,058
关键字:

对话框有没有选项卡