分享

卓为VC——界面/窗口——VC对话框小知识

 浮 生 2008-11-29

        一、对话框属性:
        1.Styles->Clip siblings:排除子窗口之间的相对区域,也就是,当一个特定的窗口接 收到绘图消息时,将所有重叠窗口排除在外,只重绘  指定的子窗口。  
        Styles->Clip children:当在父窗口内绘图时,排除子窗口区域。

        2.More Styles  
        System modal:系统模式对话框  
        Absolute align:坐标相对于屏幕原点  
        Set foreground:设置为前台窗口  
        No fail create:应用于Windows 95  
        No idle message:不发送空闲消息  
        Control:不使用标题栏的对话框  
        Center:在屏幕中心显示对话框  
        Center mouse:以鼠标坐标为对话框中心显示对话框  
        Local edit:指定编辑控件的正文将存储于应用程序的局部数据段中

        3.Extended Styles  
        Tool Window:工具栏窗体  
        Client edge:对话框边框下凹  
        Static edge:对话框边框为实边框  
        Accept files:是否接受文件拖放  
        Control parent:用<Tab>键在窗口的子窗口间搜索  
        Context help:在窗口标题栏添加一个问号按钮  
        No parent notify:以这个风格创建的窗口在创建和销毁时,不向父窗口发送                    WM_PARENTNOTFY消息

        二、对话框的创建与显示
        1.模态对话框:
        CDlg dlg;                           
        dlg.DoModal();                           
        CDialog::OnOK();
        //或CDialog::OnCancel() 关闭模态对话框

        2.非模态对话框              
        CDlg *dlg=new CDlg;                   
        dlg->Create(IDD_DIALOG,this);              
        dlg->ShowWindow(SW_SHOW);              
        dlg->DestroyWindow(); //销毁非模态对话框,若在一个非模态对话框中实现OnCancel方法,需在内部调用DestroyWindow方法,不要调用基类的OnCancel方法,因为它调用EndDialog方法将使对话框不可见,但不销毁对话框。              
        delete dlg; //DestroyWindow只销毁窗口,但不释放对象。delete释放对象。

        三、遍历对话框中的控件    
        控件也是窗口,所有可以用CWnd类的方法操作控件,GetTopWindow方法可以获得第一个属于CWnd的子窗口,GetNextWindow方法返回窗口管理器中的下一个窗口。
        首先在对话框中添加几个控件,然后在主窗口的OnInitDialog中添加:  
        CWnd* pWnd = GetTopWindow();  
        while(pWnd != NULL)  
        {   
                int i = pWnd->GetDlgCtrlID();   
                CString str;   
                str.Format("ID是:%d",i);   
                pWnd->SetWindowText(str);   
                pWnd = pWnd->GetNextWindow();  
        }

        四、消息处理函数共享:
        指多个连续ID的控件都发出相同的消息,使用ON_CONTROL_RANGE宏来实现,类向导不支持ON_CONTROL_RANGE宏,需手动添加,afx_msg OnButtonClicked();         ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON3,OnButtonClicked).
        然后在OnButtonClicked()中添加消息响应。

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多