精华内容
下载资源
问答
  • 很早之想就学习jquery的插件写法,一直拖到现在,今天趁着没什么工作忙,搜索些资料学习下,写了个比较简单的选项卡效果。 刚开始有看到一个很通俗易通的例子:alert对话框。 jquery.alertMsg.js /** * ...
  • 在前面已经完成VC++到VS2008的熟悉,现在是要完成的是对于多个页面之间的切换问题。(Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual ...

    在前面已经完成VC++到VS2008的熟悉,现在是要完成的是对于多个页面之间的切换问题。(Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual Studio 2005,Visual Studio 2008,Microsoft Visual Studio 2010,Microsoft Visual Studio 2013,Microsoft Visual Studio 2015,支持C/C++,C#,ASP,VisualBasic,JavaHTML等语言,能自动识别各种关键字系统函数成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等,有助于提高开发过程的自动化和开发效率)在这里推荐这一款如那件,上次已经说明了VS2008的问题不只是有点代码提示问题。

    1.先建三个表单:


    2. 创建三个对应的类


    3.创建属性表单类:CPropertySheet::AddPage一定用属性页,最后创建

    这里将上面已经定义好的三个窗口合并到一起来(个人觉得会不会没有空间里面来的实际啊啊)

    实在用不来vs08的创建类,还是直接在代码里写。


    建立向导只要在原有的代码前面加上一句话SetWizardMode();

    效果如下图

    但是有个问题向导中第一张图和最后一张图分别取消上一张和下一张的按钮。

    使用函数SetWizardButtons();

    这个在父窗口中写出:

    
    展开全文
  • 参考博文: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

    展开全文
  • Joist创建并显示模拟内容,主屏幕,导航栏,“关于”对话框,从而可以在屏幕之间切换以及其他与框架相关的功能。 通过PhET Interactive Simulations 文献资料 是PhET仿真开发的最完整指南。 本指南包括如何获取...
  • 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,"第一个标签页");
    这样就可以产生一个标签页了,当然还可以继续调用此函数添加标签页 
    展开全文
  • CSS tab选项卡(标签页)切换

    千次阅读 2016-07-12 15:22:01
    在github上看到一篇 You dot need JavaScript 很多效果不需要js也能做到,比如手风琴的效果,轮播,弹出的对话框,工具提示,标签页的切换,多级的下拉菜单等等,css甚至还能做游戏! 之前就看到一个用css制作的...
  •  我们已经注意到Pycharm的主编辑框是基于窗口选项卡机制显示的,Pycharm选项卡多种多样,这里我们将详细介绍这种选项卡机制。  2、激活的选项卡  每当我们打开一个Python文件时open a file for editing,它都会...
  • PLC编程基础

    万次阅读 多人点赞 2018-05-17 17:20:00
    按钮,将显示下载选项对话框。   6) 6) 设置程序栏,并单击确认按钮。 4.从PLC传送程序 按照下列步骤将PLC程序上传。   1)选择工程工作区中的PLC对象。   2)选择工具栏中的 上载 按钮。工程树中的第一个...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...
  • Fiddler抓包教程

    千次阅读 多人点赞 2016-12-09 13:54:54
    在Fiddler Options”对话框切换到“Connections”选项卡,然后勾选“Allow romote computers to connect”后面的复选框,然后点击“OK”按钮。 在本机命令行输入:ipconfig,找到本机的ip地址。 打开...
  • 标签是作为一个控件而使用的,由于它不是对话框,因此编程时不能直接在各个标签页上添加控件,只能在选中不同标签时在相同的位置...标签控件实现的是在不通对话框窗口之间的切换,而不只是在标签页上控件的显示切换
  • 前面讲了模态对话框和非模态对话框,本节开始 讲一种特殊的对话框--属性页对话框。另外要拥有美观的界面可以借助Toolkit Pro进行界面优化。 Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件...
  • VS2017 + MFC对话框中创建子对话框

    千次阅读 2020-04-09 23:27:03
    MFC实现创建多个子对话框
  • 目前网上的教程创建的tab控件大多都有问题。主要有两方面原因:1: 组框覆盖了。组框不会盖住编辑框等控件,奇怪的是它会盖住tab...是子对话框窗口的位置调节问题,tab切换键在上部的,需要将子对话框纵坐标下移。...
  •   显示帮助 F1 在全屏幕和常规浏览器窗口之间进行切换 F11 在网页、地址栏或收藏夹栏中的项目中向前移动 Tab 在网页、地址栏或收藏夹栏中的项目中向后移动 Shift+Tab 进入您的...
  • office2019专业增强版64位和32位安装包收集整理

    万次阅读 多人点赞 2019-05-18 17:59:10
    只需单击“视图”选项卡,然后在“任务视图”组或“资源视图”组中,再单击要运用的视图就行了,如需查看一切可用视图,点击“甘特图”→“其他视图”,再从“其他视图”对话框中的选项中中止选择即可。    ...
  • 4.在弹出的“请选择要添加的文件”对话框中选择我们准备的“其他文件”,点击“确定”按钮后回到“压缩文件名字和参数”对话框; 5.在“高级”选项卡标签中点击“设置密码”按钮设置一个不同的密码,然后开始压缩...
  • MFC 选项卡控件 Tab Control 的使用

    千次阅读 2013-09-11 11:42:46
     VC中的CTabCtrl用法与VB、Delphi的选项卡控件有很大的不同,每个属性页是用一个“窗体”(对话框)来实现,于是要为每个属性页对话框建类,还要关联、初始化……实在麻烦得多。但是CTabCtrl可重用性比Activ
  • 在上一讲中介绍了MFC的消息... 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,qq的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了。  创建对话框主要分两大步
  • MFC使用Tab Control(选项卡控件)方法

    千次阅读 2012-09-14 00:30:17
    MFC中使用Tab Control和VB中的使用还是比较不同的,MFC中的Tab Control就是Tab对象关联了对话框来实现的(对话框的Style要设置为Child),实现还是比较简单的,那我们上代码。 1.建立一个MFC工程,在对话框中加入...
  • 这里就涉及到一个问题,对于子对话框,怎么保证它的大小一致,尽量在主对话框饱满,也就是说要添加子对话框资源的时候,要确保对话框大小一致。解决办法如下: 状态栏有两个不停变化数值,第一个是描述窗体的左上...
  • VC++对话框学习总结

    千次阅读 2017-04-13 20:05:38
    VC++中如何复制对话框资源 http://www.cnblogs.com/Yogurshine/p/3710566.html 法1: 在你的工程中添加另一个工程的rc文件,这时资源视图中就会出现两个rc,从后加的rc中拷贝资源到你自己工程的rc中就可以了。 ...
  •  属性页对话框实际上是一个包含多个子对话框对话框,这些子对话框通常被称为页(Page),每次只有一个页是可见的,在对话框的顶端有一行的选项卡,可通过点击不同的选项卡切换到不同的页。这样就可以容纳大量的...
  • LoadRunner使用教程

    万次阅读 多人点赞 2013-11-12 11:03:17
    LoadRunner Controller 的“设计”选项卡, demo_script 测试将出现在“场景组”窗格中。您可以看到已分配 2 个 Vuser 运行测试。 此时,可以准备运行测试了。 3) 运行时设置   a) 打开...
  • mfc多对话框切换

    2014-05-14 22:39:17
    用mfc实现多对话框切换,比如按一个button实现从对话框A到B的切换。 不用SW_HIDE隐藏窗体,能不能用propertySheet,让一个窗体...我不想用选项卡切换,而是用按钮。 除此之外还有没有其它的方法? 求助啊~~~~~~谢了!
  • XP下source insight 选项卡的项目不能完全显示(source insight 的设置问题) 进入option -> preference -> display 的选项卡中,想去除"Trim long path names with ellipses"。 但是选项卡的选项不能...
  • 最近在学习C++的MFC图像...Project,弹出“New Project”对话框。 2.左侧面板中Installed Templated的Visual C++下选择MFC,中间窗口中选择MFC Application,然后在下面的Name编辑框中键入工程名称,本例取名“Addit...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,238
精华内容 12,895
关键字:

对话框选项卡内的切换