原创 MFC之对话框

2009-1-20 10:28 3394 6 6 分类: 软件与OS
点击下载

    static BOOL bIsCreate=FALSE;
//    if(m_bIsCreate==FALSE)
    if(bIsCreate==FALSE)
    {
        m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
            CRect(0,0,100,100),this,123);
        //m_bIsCreate=TRUE;
        bIsCreate=TRUE;
    }
    else
    {
        m_btn.DestroyWindow();
        //m_bIsCreate=FALSE;
        bIsCreate=FALSE;
    }*/
/*    if(!m_btn.m_hWnd)
    {
        m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
            CRect(0,0,100,100),this,123);
    }
    else
    {
        m_btn.DestroyWindow();
    }*/
   
   
   
    使用控件变量
/*    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];
    得到句柄
    GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
    GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);*/

/*    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    GetDlgItemText(IDC_EDIT1,ch1,10);
    GetDlgItemText(IDC_EDIT2,ch2,10);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    SetDlgItemText(IDC_EDIT3,ch3);*/

/*    int num1,num2,num3;
    num1=GetDlgItemInt(IDC_EDIT1);
    num2=GetDlgItemInt(IDC_EDIT2);

    num3=num1+num2;
    SetDlgItemInt(IDC_EDIT3,num3);*/

    /*UpdateData();
    m_num3=m_num1+m_num2;
    UpdateData(FALSE);*/
控件控制
/*    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    m_edit1.GetWindowText(ch1,10);
    m_edit2.GetWindowText(ch2,10);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    m_edit3.SetWindowText(ch3);*/

/*    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    //::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
    //::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
    //GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    m_edit2.SendMessage(WM_GETTEXT,10,(LPARAM)ch2);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);*/

    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
    SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);
    SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);
    m_edit3.SetFocus();
   
   
    属性对话框的使用
   
    首先建立Cproperypage 的几个对话框,添加CPROPERYSHEET的属性页类,使用该类的成员函数
    ADDPAGE()来添加刚才建立的对话框的指针进来
     在其他地方声明属性页类 domodule 就可以了
     CPropertyPage( );
     CPropertyPage( UINT nIDTemplate, UINT nIDCaption = 0 );
     CPropertyPage( LPCTSTR lpszTemplateName, UINT nIDCaption = 0 )
     CPropertySheet( );
     CPropertySheet( UINT nIDCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0 );
     CPropertySheet( LPCTSTR pszCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0 );


     也可以使用
     
     在应用程序中使用属性表

若要在应用程序中使用属性表,请完成下列步骤:

   1. 为每个属性页创建对话框模板资源。切记,用户可能会从一页切换到另一页,因此,要尽可能使每页的布局保持一致。

      所有属性页的对话框模板不必具有相同的大小。框架使用最大属性页的大小来确定在属性表中为属性页分配多少空间。

      在创建属性页的对话框模板资源时,必须在“对话框属性”属性表中指定下列样式:
          * 将“常规”页上的“Caption”编辑框设置为希望出现在该页选项卡中的文本。
          * 将“样式”页上的“Style”列表框设置为“子级”。
          * 将“样式”页上的“Border”列表框设置为“细”。
          * 确保选定“样式”页上的“Titlebar”(标题栏)复选框。
          * 确保选定“更多样式”页上的“禁用”复选框。
   2. 创建与每个属性页对话框模板对应的 CPropertyPage 派生类。请参见添加类。选择 CPropertyPage 作为基类。
   3. 创建保持该属性页值的成员变量。属性页为专用对话框,因此将成员变量添加到属性页的过程与将成员变量添加到对话框的过程完全相同。有关更多信息,请参见定义对话框控件的成员变量。
   4. 在源代码中构造 CPropertySheet 对象。通常,在显示属性表的命令处理程序中构造 CPropertySheet 对象。该对象表示整个属性表。如果用 DoModal 函数创建有模式属性表,框架则在默认情况下提供三个命令按钮:“确定”、“取消”和“应用”。对于用 Create 函数创建的无模式属性表,框架不创建命令按钮。除非想添加其他控件(如预览窗口)或显示无模式属性表,否则不必从 CPropertySheet 派生类。但该步骤对于无模式属性表是必需的,因为无模式属性表不包含任何可用于关闭属性表的默认控件。
   5. 对于要添加到属性表的每个属性页,执行下列操作:
          * 为在此过程前一阶段创建的每个 CPropertyPage 派生类构造一个对象。
          * 为每页调用 CPropertySheet::AddPage。

      通常,创建 CPropertySheet 的对象在该步骤中还创建 CPropertyPage 对象。然而,如果实现 CPropertySheet 派生类,可将 CPropertyPage 对象嵌入 CPropertySheet 对象中,并从 CPropertySheet 派生类构造函数中为每个属性页调用 AddPage。AddPage 将 CPropertyPage 对象添加到属性表的属性页列表,但实际上并不为该页创建窗口。因此,不必等到属性表窗口创建后再调用 AddPage;可从属性表的构造函数中调用 AddPage。

      默认情况下,如果属性表中的选项卡比属性表的单行能够容纳的选项卡多,这些选项卡将堆积在多行中。若要禁用堆积,请调用参数设置为 FALSE 的 CPropertySheet::EnableStackedTabs。在创建属性表时,必须调用 EnableStackedTabs。
   6. 调用 CPropertySheet::DoModal 或 Create 显示属性表。调用 DoModal 将属性表创建为有模式对话框。调用 Create 将属性表创建为无模式对话框。
   7. 在属性页和属性表所有者之间交换数据。文章交换数据对此做了说明。

   
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条