精华内容
下载资源
问答
  • CDialog

    2017-03-22 13:08:22
    Base Class Members CObject Members CCmdTarget Members CWnd Members Construction CDialog Constructs a CDialog object. Initialization ...Initializes the CDialog object. Creates a modeless dialog box
    Base Class Members
    CObject Members
    CCmdTarget Members
    CWnd Members
    Construction
    CDialog
    Constructs a CDialog object.
    Initialization
    Create
    Initializes the CDialog object. Creates a modeless dialog box and attaches it to the CDialog object.
    CreateIndirect
    Creates a modeless dialog box from a dialog-box template in memory (not resource-based).
    InitModalIndirect
    Creates a modal dialog box from a dialog-box template in memory (not resource-based). The parameters are stored until the function DoModal is called.
    Operations
    DoModal
    Calls a modal dialog box and returns when done.
    EndDialog
    Closes a modal dialog box.
    GetDefID
    Gets the ID of the default pushbutton control for a dialog box.
    GotoDlgCtrl
    Moves the focus to a specified dialog-box control in the dialog box.
    MapDialogRect
    Converts the dialog-box units of a rectangle to screen units.
    NextDlgCtrl
    Moves the focus to the next dialog-box control in the dialog box.
    PrevDlgCtrl
    Moves the focus to the previous dialog-box control in the dialog box.
    SetDefID
    Changes the default pushbutton control for a dialog box to a specified pushbutton.
    SetHelpID
    Sets a context-sensitive help ID for the dialog box.
    Overridables
    OnCancel
    Override to perform the Cancel button or ESC key action. The default closes the dialog box and DoModal returns IDCANCEL.
    OnInitDialog
    Override to augment dialog-box initialization.
    OnOK
    Override to perform the OK button action in a modal dialog box. The default closes the dialog box and DoModal returns IDOK.
    OnSetFont
    Override to specify the font that a dialog-box control is to use when it draws text.
    

    展开全文
  • CDialog

    2012-08-10 16:53:04
    对话框和对话框类CDialog 对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。 模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框。 ...
    对话框和对话框类CDialog 
    
    对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。

    模式和无模式对话框


    对话框分两种类型,模式对话框和无模式对话框。



    模式对话框


    一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS_MODALFRAME风格。即使没有指定WS_VISIBLE风格,模式对话框也会被显示。

    创建对话框窗口时,将发送WM_INITDIALOG消息(如果指定对话框的DS_SETFONT风格,还有WM_SETFONT消息)给对话框过程。

    对话框过程(Dialog box procedure)不是对话框窗口的窗口过程(Window procedure)。在Win32里,对话框的窗口过程由Windows系统提供,用户在创建对话框窗口时提供一个对话框过程由窗口过程调用。

    对话框窗口被创建之后,Windows使得它成为一个激活的窗口,它保持激活直到对话框过程调用::EndDialog函数结束对话框的运行或者Windows激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(Owner window)。

    从某个窗口创建一个模式对话框时,Windows自动地禁止使用(Disable)这个窗口和它的所有子窗口,直到该模式对话框被关闭和销毁。虽然对话框过程可以Enable所属窗口,但是这样做就失去了模式对话框的作用,所以不鼓励这样做。

    Windows创建模式对话框时,给当前捕获鼠标输入的窗口(如果有的话)发送消息WM_CANCLEMODE。收到该消息后,应用程序应该终止鼠标捕获(Release the mouse capture)以便于用户能把鼠标移到模式对话框;否则由于Owner窗口被禁止,程序将失去鼠标输入。

    为了处理模式对话框的消息,Windows开始对话框自身的消息循环,暂时控制整个应用程序的消息队列。如果Windows收到一个非对话框消息时,则它把消息派发给适当的窗口处理;如果收到了WM_QUIT消息,则把该消息放回应用程序的消息队列里,这样应用程序的主消息循环最终能处理这个消息。

    当应用程序的消息队列为空时,Windows发送WM_ENTERIDLE消息给Owner窗口。在对话框运行时,程序可以使用这个消息进行后台处理,当然应该注意经常让出控制给模式对话框,以便它能接收用户输入。如果不希望模式对话框发送WM_ENTERIDlE消息,则在创建模式对话框时指定DS_NOIDLEMSG风格。

    一个应用程序通过调用::EndDialog函数来销毁一个模式对话框。一般情况下,当用户从系统菜单里选择了关闭(Close)命令或者按下了确认(OK)或取消(CANCLE)按钮,::EndDialog被对话框过程所调用。调用::EndDialog时,指定其参数nResult的值,Windows将在销毁对话框窗口后返回这个值,一般,程序通过返回值判断对话框窗口是否完成了任务或者被用户取消。

    无模式对话框
    一个无模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框模板时指定WS_POPUP、WS_CAPTION、WS_BORDER和WS_SYSMENU风格。如果没有指定WS_VISIBLE风格,无模式对话框不会自动地显示出来。

    一个无模式对话框既不会禁止所属窗口,也不会给它发送消息。当创建一个模式对话框时,Windows使它成为活动窗口,但用户或者程序可以随时改变和设置活动窗口。如果对话框失去激活,那么即使所属窗口是活动的,在Z轴顺序上,它仍然在所属窗口之上。

    应用程序负责获取和派发输入消息给对话框。大部分应用程序使用主消息循环来处理,但是为了用户可以使用键盘在控制窗口之间移动或者选择控制窗口,应用程序应该调用::IsDialogMessage函数。

    这里,顺便解释::IsDialogMessage函数。虽然该函数是为无模式对话框设计的,但是任何包含了控制子窗口的窗口都可以调用它,用来实现类似于对话框的键盘选择操作。

    当::IsDialogMessage处理一个消息时,它检查键盘消息并把它们转换成相应对话框的选择命令。例如,当Tab 键被压下时,下一个或下一组控制被选中,当Down Arrow键按下后,一组控制中的下一个控制被选择。

    ::IsDialogMessage完成了所有必要的消息转换和消息派发,所以该函数处理的消息一定不要传递给TranslateMessage和DispatchMessage处理。

    一个无模式对话框不能像模式对话框那样返回一个值给应用程序。但是对话框过程可以使用::SendMessage给所属窗口传递信息。

    在应用程序结束之前,它必须销毁所有的无模式对话框。使用::DestroyWindow销毁一个无模式对话框,不是使用::EndDiaLog。一般来说,对话框过程响应用户输入,如用户选择了“取消”按钮,则调用::DestroyWindow;如果用户没有有关动作,则应用程序必须调用::DestroyWindow。



    对话框的MFC实现


    在MFC中,对话框窗口的功能主要由CWnd和CDialog两个类实现。



    CDialog的设计和实现


    MFC通过CDialog来封装对话框的功能。CDialog从CWnd继承了窗口类的功能(包括CWnd实现的有关功能),并添加了新的成员变量和函数来处理对话框。



    CDialog的成员变量


    CDialog的成员变量有:

    protected:

    UINT m_nIDHelp; // Help ID (0 for none, see HID_BASE_RESOURCE)



    LPCTSTR m_lpszTemplateName; // name or MAKEINTRESOURCE

    HGLOBAL m_hDialogTemplate; // indirect (m_lpDialogTemplate == NULL)

    // indirect if (m_lpszTemplateName == NULL)

    LPCDLGTEMPLATE m_lpDialogTemplate;

    void* m_lpDialogInit; // DLGINIT resource data

    CWnd* m_pParentWnd; // parent/owner window

    HWND m_hWndTop; // top level parent window (may be disabled)

    成员变量保存了创建对话框的模板资源、对话框父窗口对象、顶层窗口句柄等信息。三个关于模板资源的成员变量m_lpszTemplateName、m_hDialogTemplate、m_lpDialogTemplate对应了三种模板资源,但在创建对话框时,只要一个模板资源就可以了,可以使用其中的任意一类。

    CDialog的成员函数:
    构造函数:
    CDialog( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );

    CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );

    CDialog( );

    CDialog重载了三个构造函数。其中,第三个是缺省构造函数;第一个和第二个构造函数从指定的对话框模板资源创建,pParentWnd指定了父窗口或所属窗口,若空则设置父窗口为应用程序主窗口。



    初始化函数


    BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );

    BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );

    BOOL CreateIndirect( LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL );

    BOOL CreateIndirect( HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL );

    BOOL InitModalIndirect( LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL );

    BOOL InitModalIndirect( HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL );

    Create用来根据模板创建无模式对话框;CreateInDirect用来根据内存中的模板创建无模式对话框;InitModalIndirect用来根据内存中的模板创建模式对话框。它们都提供了两个重载版本。



    对话框操作函数
    void MapDialogRect( LPRECT lpRect ) const;

    void NextDlgCtrl( ) const;

    void PrevDlgCtrl( ) const;

    void GotoDlgCtrl( CWnd* pWndCtrl );

    void SetDefID( UINT nID );

    void SetHelpID( UINT nIDR );

    void EndDialog( int nResult );

    虚拟函数
    virtual int DoModal( );

    virtual BOOL OnInitDialog( );

    virtual void OnSetFont( CFont* pFont );

    virtual void OnOK( );

    virtual void OnCancel( );
    展开全文
  • MFC的CDialog中嵌入可滚动的子窗口
  • cdialog 分割

    2013-06-16 15:14:42
    CDialog进行分割,代码来源于网络,分享下。
  • MFC CDialog

    2016-07-12 17:39:13
    MFC CFileDialog类派生于CDialog类实现打开文件和另存为对话框 CFileDialog( BOOL bOpenFileDialog, true  打开对话框 false 保存对话框 LPCTSTR lpszDefExt = NULL,  指定文件扩展名 LPCTSTR ...

    MFC  CFileDialog类派生于CDialog类实现打开文件和另存为对话框

    CFileDialog( BOOL bOpenFileDialog,   true  打开对话框  false 保存对话框

    LPCTSTR lpszDefExt = NULL,  指定文件扩展名

    LPCTSTR lpzsFileName = NULL,  初始文件名

    DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,  一个或多个标记的组合

    LPCTSTR lpszFilter = NULL,  文件过滤器

    CWnd* pParentWnd = NULL);  父窗口

    创建CFileDialog对象之后调用DoModal函数显示对话框。

    除了创建CFileDialog对象时,设置参数,还可以在后续通过以下进行设置

    fileDlg.m_ofn.lpstrTitle=”自定义CFileDialog窗口的标题

    fileDlg.m_ofn.lpstrFilter = “Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0“  过滤器

    fileDlg.m_ofn.lpstrDefExt = “txt”  默认扩展名

     

    CFileDialog中可以用GetPathName GetFileName 获取路径和文件名

    范例:

    CFileDialog fileDlg(True);

    If(IDOK == fileDlg.DoModal())

    {

             CFile file(fileDlg.GetFileName,CFile::mpdeRead);

    }

    展开全文
  • 主要介绍了自己简单封装的一个CDialog类,实例分析了自定义封装CDialog类的相关技巧,比较简单易懂,需要的朋友可以参考下
  • mfc CDialog demo

    2010-03-31 20:18:40
    demo的 MFC CDialog 界面画了背景图 当有别人程序在界面拉动或晃动时,MFC界面会花掉
  • 对话框类CDialog

    2017-05-29 19:17:00
     CDialog类 -父类是CWnd,本质上也是一个窗口。是对话框类的顶层父类。  CCommonDialog类 -父类是CDialog类。称为通用对话框。MFC提供了6个通用对话框,都是CCommonDialog类的子类,包括:文件对话框、颜色对话框...

    一、对话框资源

      1、相关类

        CDialog类 -父类是CWnd,本质上也是一个窗口。是对话框类的顶层父类。

        CCommonDialog类 -父类是CDialog类。称为通用对话框。MFC提供了6个通用对话框,都是CCommonDialog类的子类,包括:文件对话框、颜色对话框、字体对话框、查找替换对话框、打印对话框、打印设置对话框。

        CPropertyPage -父类是CDialog类,属性页对话框。

      2、分类

        模式对话框和非模式对话框

      3、使用MFC的类创建基于模式对话框的应用程序

        3.1插入对话框资源,并与对话框类关联

        3.2创建和显示  CDialog::DoModal()

        3.3关闭  CDialog::OnOk()/OnCancel()

      4、使用MFC的类创建基于非模式对话框的应用程序

        4.1插入对话框资源,并与对话框类关联

        4.2创建和显示与一般框架窗口类似

        4.3关闭需要程序处理

          1)重写OnOK和OnCancle函数,在函数中,调用DestroyWindow()函数

          2)重写PostNcDestroy()函数,在函数中,delete this;

      5、DoModal()函数的执行过程

        5.1查找和加载对话框资源

        5.2将父窗口设置为不可用状态

        5.3创建和显示对话框

        5.4进入对话框的消息循环

        5.5点击OK/Cancel/关闭按钮时,跳出循环,隐藏对话框窗口

        5.6将父窗口设置为可用的和活动的状态

        5.7销毁对话框窗口

        5.8释放对话框资源

        5.9函数执行结束,得到DoModal函数的返回值

    二、对话框上的控件操作

      对话框的初始化函数:CDialog::OnInitDialog()

      1、方式一:通过调用CWnd::GetDlgItem()函数,根据控件ID获取控件对象指针,操作控件即可。

        CWnd::GetWindowText--获取控件上显示的文本

        CWnd::SetWindowText--设置控件上显示的文本

        CWnd::GetDlgItemText--获取指定ID的控件上的文本,结合了GetDlgItem和GetWindowText的功能

        CWnd::SetDlgItemText--设置指定ID的控件上的文本

      2、方式二:对话框的数据交换技术(DDX)

        将控件和一个对话框类的成员变量绑定,可以通过操作成员变量达到操作控件的目的。

        1)定义与控件绑定的成员变量

          

        2)在对话框类的头文件中会自动增加成员变量的声明;在对话框类的构造函数中会对成员变量初始化;在对话框类的DoDataExchange函数中会自动实现对话框控件与类成员变量的绑定关联    

    // Dialog Data
        //{{AFX_DATA(CTestDlg)
        enum { IDD = IDD_DIALOG1 };
        int     m_num1;
        int     m_num2;
        int     m_num3;
        //}}AFX_DATA
    
    CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CTestDlg::IDD, pParent)
    {
        //{{AFX_DATA_INIT(CTestDlg)
        m_num1 = 0;
        m_num2 = 0;
        m_num3 = 0;
        //}}AFX_DATA_INIT
        m_bIsCreated=FALSE;
    }
    
    void CTestDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CTestDlg)
        DDX_Text(pDX, IDC_EDIT1, m_num1);
        DDX_Text(pDX, IDC_EDIT2, m_num2);
        DDX_Text(pDX, IDC_EDIT3, m_num3);
        //}}AFX_DATA_MAP
    }
    

          DDX_Control()  //控件类型的绑定

          DDX_Text()  //值类型的绑定

          DDX_:对话框数据交换函数

          DDV_:对话框数据校验函数

        3)通过成员变量完成对控件的操作

        4)值类型的绑定,还需调用UpdateData(BOOL)函数

          UpdateData(TRUE); -将控件中的值赋值给变量

          ......//对成员变量的操作

          UpdateData(FALSE); -将变量的值显示到控件上

        5)DDX的实现原理

          1--控件类型的绑定

          DDX_Control(pDX,IDOK,m_wndOK){

            //通过控件ID得到控件句柄

            HWND hWndCtrl = pDX->PrepareCtrl(nIDC);

            //将控件句柄与变量绑定

            rControl.SubclassWindow(hWndCtrl){

              Attach(hWnd){

                pMap->SetPermanent(m_hWnd = hWndNew, this){

                  //以句柄为键,以变量地址为值建立映射关系

                  m_permanentMap[(LPVOID)h] = permOb;

                }

              }

            }

          }

          2--值类型的绑定

          UpdateData(FALSE){

            CDataExchange dx(this, bSaveAndValidate);

            DoDataExchange(&dx){

              DDX_Text(pDX,IDC_EDIT1,m_strEdit){

                //通过控件ID得到控件句柄

                HWND hWndCtrl = pDX->PrepareEditCtrl(nIDC);

                if (pDX->m_bSaveAndValidate){

                  int nLen = ::GetWindowTextLength(hWndCtrl);

                  ::GetWindowText(hWndCtrl, value.GetBufferSetLength(nLen), nLen+1);

                  value.ReleaseBuffer();

                }else{

                  //将变量的值设置到控件的窗口上

                  AfxSetWindowText(hWndCtrl, value);

                }

              }

            }

          }

      

      例子1:使用DDX完成登录的验证

      例子2:采用两种不同的方式实现加法器

     

    转载于:https://www.cnblogs.com/zhouwanqiu/p/6918792.html

    展开全文
  • MFC透明CDialog演示

    2020-08-10 01:29:33
    此对话框派生自CDialog。位图从 基于透明颜色创建的文件和区域。位图 然后用于绘制对话框。这个演示还演示了拖拽 通过点击对话框可见部分的任何地方,定时器 事件和透明对话框上的按钮。 它非常适合用作启动屏幕或...
  • 对话框CDialog

    2009-05-06 20:35:47
    为了方便实现对话框功能,MFC提供了一系列对话框类,其中最重要的对话框是CDialog类。CDialog类是其他所有MFC对话框类的基类,用户在程序中创建的对话框类一般也是CDialog类的派生类。CDialog类提供了对话框编程的...
  • VC++ CDialog自绘

    2019-12-31 23:15:19
    头文件声明(CSWDialog.h) #pragma once #include <afxwin.h>... public CDialog { DECLARE_DYNAMIC(CSWDialog) public: CSWDialog(); CSWDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL...
  • ARX中自定义CDialog

    2019-07-16 13:20:04
    定制对话框 //自定义消息 #define WM_ACAD_KEEPFOCUS WM_USER+0x...class MyDialog : public CDialog { DECLARE_DYNAMIC(MyDialog) public: afx_msg void OnPaint(); afx_msg LRESULT OnAcadKeepFocus(WPARAM...
  • MFC中的CDialog

    千次阅读 2016-11-20 17:39:48
    CDialog::CDialog  构造 CDialog 对象。 CDialog::Create  初始化 CDialog 对象。 创建无模式对话框并将它附加到 CDialog 对象。   CDialog::CreateIndirect  在内存(基于的不是资源从创建对话框模板的无...
  • Cwnd* pParent 是它的父对话框的窗口指针,是从:CDialog类里面派生出来的对话框窗体,是用父类的构造函数来创建自己的窗体。CMydialog::IDD是你用到对话框的ID标识,pParent是指向父类的指针。...
  • 可随意改变大小的CDialog 可以随意拖动 但是布局不会变化
  • TabCtrl 基于CDialog的使用简单示例,写的比较简单,解压后可以直接运行。
  • CDialog与CDialogEx的区别联系

    千次阅读 2018-03-28 10:30:00
    CDialogEx = CDialog ExtendExtend的意思是扩展,即扩展的CDialog!这个类是CDialog的扩展类,基类就是CDialog,具备基类全部功能,并根据新系统需要增加了一些界面美化的功能。比如修改对话框的背景颜色,标题栏的...
  • vc++之cdialog

    千次阅读 2010-05-20 20:07:00
    CDialog CDialog CObject └CCmdTarget └CWnd └CDialog CDialog类是在屏幕上显示的对话框基类。对话框有两类:模态对话框和非模态对话框。模态对话框在应用继续进行之前必须关闭。非模态对话框允许用户执行另外的...
  • MFC:总结篇 CDialog

    2019-07-19 16:47:00
    一.简介 CDialog 类是CWnd 类的子类 转载于:https://www.cnblogs.com/k5bg/p/11214226.html
  • 假设对话框类名 CMyDialog,继承自 CDialog 或 CDialogEx。通过添加三个消息映射函数用一个自定义成员函数实现为对话框 CMyDialog 增加滚动条,无需额外的成员变量。 CMyDialog 添加WM_MOUSEWHEEL、WM_VSCROLL、WM_...
  • 资源中是一个在vs2008sp1 IDE中给VC++对话框(CDialog)添加背景图片的实例,可供参考。
  • CDialog置顶

    2020-08-03 11:35:26
    BOOL testdialogup::OnInitDialog() { CDialogEx::OnInitDialog(); CRect rtClient; GetWindowRect(rtClient); int nWidth = GetSystemMetrics(SM_CXSCREEN); //屏幕宽度 int nHeight = GetSystemMetrics(SM_...
  • I'm using MFC CDialog/CDialogEx to show a modal dialog with DoModal.usually it works without problems, but sometimes, the dialog wont show up until I press ALT key.the scenarios is, I...
  • 1.CDialog,CStatic,CButton都是继承于CWnd,所以 自绘控件 --要么继承于已有的控件,要么继承于Cwnd完全自绘,不要继承于CDialog 自绘自己的窗口 --继承于Cwnd完全自绘,,不要继承于CDialog ---- 2.如果想设计一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,019
精华内容 11,207
关键字:

cdialog