精华内容
下载资源
问答
  • windows 对话框

    2012-06-09 09:40:30
    windows 对话框视频详介,学习Visual C++的好帮手。
  • Windows编程基础 Windows API编程 基于对话框Windows应用程序 对话框应用程序框架
  • MFC编程基础 ,基于对话框Windows应用程序,对新手非常有用的MFC教程,适合于实训学生所用
  • MFC中添加对话框Windows标准控件的ppt,提示清楚完整,方便初学者上手。
  • windows对话框

    2013-04-25 13:33:27
    该文档描述了windows开发过程中的对话框窗口,包括了对话框的种类,使用方式,对话框窗口特有的窗口过程函数,对话框的资源模板和内存模板的创建方法。
  • 创建对话框创建对话框类 在创建了对话框模板后就可以利用ClassWisard来 创建从CDialog派生且连接到对话框模板的对话框类 创建了一个连接到对话框模板CDialog类的派生类 (2) 利用ClassWizard向对话框类加入数据成员来...
  • C语言windows对话框

    2014-11-29 17:45:33
    C语言里的windows对话框代码,弹出对话框的程序,简单的实现
  • 6S模型Windows对话框版本,双击运行,可以直接根据对话框的提示输入所需参数,方便易学
  • 打开windows运行对话框的js
  • 使用文件和通用对话框模仿windows记事本程序Part2
  • WINDOWS对话框 .PPT

    2009-05-30 20:20:51
    对话框模板资源描述文件 自定义对话框的创建 对话框的数据交换和数据检验 以对话框为主界面的应用程序 MFC预定义的通用对话框 非模态对话框
  • 调用api 浏览对话框windows选择路径,vb完整模块
  • Windows XP风格对话框

    2012-06-10 00:03:37
    Windows XP风格对话框制作实例,程序可以单独运行,也可以合并到自己的程序里面运行。
  • 摘要:VB源码,界面编程,对话框 Vb调用Windows颜色和文件对话框,比较初级的小技巧,本程序是VB简明教程第八章中的一个窗体小例子,希望刚学VB的朋友们参考学习。
  • Windows对话框

    2013-04-18 18:08:47
    Windows对话框根据其与父窗口的关系,可分为模式对话框与无模式对话框两类。 模式(modal)对话框:当该类对话框运行时,其父窗口无效,直到该对话框结束。 无模式(modeless)对话框:该类对话框可与父窗口共同...

    Windows的对话框根据其与父窗口的关系,可分为模式对话框与无模式对话框两类。

    模式(modal)对话框:当该类对话框运行时,其父窗口无效,直到该对话框结束。

    无模式(modeless)对话框:该类对话框可与父窗口共同运行。

     

    一个完整的对话框一般包含对话框面板与函数两部分:

    对话框模版:是在RC文件中定义的一个对话框,以各种方式决定对话框的大小、有哪些控件、各在什么位置等。

    对话框函数:其函数原型非常类似于窗口函数。但是它通常只处理WM_INITDIALOG和WM_COMMAND两个消息。对话框中的各个控件也都是小窗口,各有对应的窗口函数,它们通过消息传递与其父窗口沟通。而所有的控件传来的消息都是WM_COMMAND,再根据其参数分辨是哪一种控件以及哪一种消息。

     

    原型:int DialogBox ( HINSTANCE hInstance, LPCTSTR IpTemplate, HWND hWndParent, DLGPROC IpDialogFunc)

    参数:第一个参数hInstance用于标识应用程序的实例,该程序的可执行文件含有对话框模版。

                第二个参数IpTemplate用于标识对话框模版,此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模版名,也可以是指定对话框模版的资源标识符中的一个整型值。

               第三个参数hWndParent用于指向该对话框的父窗口。

               第四个参数lpDialogFunc表示一个指向对话框过程的指针。

     

    如果函数调用成功,则返回非0值,其为函数EndDialog()的调用中的nResult参数。

    如果函数调用失败,则返回值为0。

    展开全文
  • 从MFC对话框理解Windows消息机制

    千次阅读 2014-04-09 17:47:09
    1、对话框基本要点和生命周期 MFC对话框支持“所见即所得”编程模式。其类型分为模式对话框和非模式对话框对话框由一个rc资源文件描述外观,通过ID与一个CPP类相连接,对话框内的控件使用基于ID的变量映射通讯...

    <第一部分:MFC窗口的创建过程>
    1、对话框基本要点和生命周期
    MFC对话框支持“所见即所得”编程模式。其类型分为模式对话框和非模式对话框。
    对话框由一个rc资源文件描述外观,通过ID与一个CPP类相连接,对话框内的控件使用基于ID的变量映射通讯。
    模式对话框对象被定义后,通过调用DoModal()函数来显示对话框并进行相关操作,此函数当对话框被关闭时返回。其返回值标明了对话框是

    点“确定”退 出,还是“取消”。非模式对话框需要与某个View相关联,以便对话框退出时发送消息给对应的Vew进行必要的处理。
    在对话框显示前,系统会调用OnInitDialog() 函数,在这个函数中你可以设置一些控件属性,进行一些初始化工作。比如,设置滚动条的最

    大最小值,设置List列表的初始值等。其方法是将控件ID作为参 数,调用GetDlgItem函数获得控件的对象的指针(指针类型是CWnd*),然

    后使用对象提供的函数进行操作。
    ID对于一个组件来说非常重要,通过向导,我们可以将一个变量和一个组件进行关联(映射)来实现数据交换,而这种绑定的关键就是将一

    个组件的ID与成员变量关联。

    2、数据交换机制
    控件是对话框的重要组成部分,控件的访问可以通过关联变量实现,包括关联数据变量和控制变量。MFC编程中,通过建立类向导中 的操作

    可以将窗口控件和对应变量绑定,但是代码操作的是变量,用户操作窗口控件如何让他们同步?UpdateData(Bool true|false)函数正是实现

    这个功能。

    DoDataExchange由框架类调用,用于交换和检验对话框的数据,该函数不直接调用,而是被UpdateData调用。通过update(TRUE)取得控件上

    的值,处理修改后通过update(FALSE)传回控件。

    UpdateData(TRUE) -- 刷新控件的值到对应的变量
    UpdateData(FALSE) -- 拷贝变量值到控件显示

    UpdataData()---用来刷新对话框

    3、特殊的Radio Button
    Radio Button控件是分组的,同一组的Radio Button只能有一个被选中。这个机制的实现依赖于TAB顺序,在资源视图下按Ctrl-D键将显示对

    话框的TAB焦点顺序。举一个例子来说明:
    Radio1、Radio2、Radio3是三个不同的Radio Button控件,其焦点顺序为1、2、3。为了实现分组Radio1的Group属性应该为TRUE,其余两个

    为FALSE。如果又有两个 Radio4、Radio5焦点顺序为6、7。则Radio4的Group属性应为TRUE,Radio4,Radio5被分为一组。
    需要注意的是,Radio以Group属性来分组,为了结束前一个组,你应该将焦点顺序为4、8的控件的Group属性设为TRUE,否则编译器会产生一

    个警告。

    4、一些技巧
    通过向导,我们可以将一个类成员变量和控件关联以进行数据交换,例如将一个CString类型的变量和Edit控件关联。将一个int变量和一组

    Radio Button关联。但是,人总有错的时候,当我们修改或需要删除这种关联时,麻烦就来了。
    在我的使用VS2005过程中没有发现提供了删除“已被关联的控件成员变量”的向导,所以我使用的是比较麻烦的手动删除。
    1)在对话框头文件中删除成员变量的定义
    2)在对话框cpp文件中删除构造函数初始化列表中的对应变量的初始化
    3)在对话框cpp文件中,根据变量名删除DoDataExchange函数中的对应语句
    此时,以class view中的向导中,已经可以重新设定控件所关联的成员变量了。

    登录框的制作:
    在显示主窗口之前显示一个模式对话框来提示用户登录一个常用的功能。只需要在PreCreateWindow函数中加入显示对话框的代码就可以完成

    这个功能。

          有些时候,我们可能需要从一个控件对象来得到它的ID。比如,你的对话框中好几个滚动条,那么这些滚动条的事件都在

    OnHScroll,OnVScroll中被响应。如何区分是哪个滚动条就需要确定ID。
    在这两个函数中有一个CScrollBar *pScrollBar指针,我们可以通过调用pScrollBar->GetDlgCtrllD()来获得ID,ID是一个整数。

    在对话框编程中往往需要改变某个控件的文字,比如EDIT控件和Static text控件。此时使用SetDlgItemText(int nID,LPCTSTR lpzString)

    函数比较方便。


    <第二部分:MFC窗口的销毁过程>
    考虑单窗口情况:
    假设自己通过new创建了一个窗口对象pWnd,然后pWnd->Create。则销毁窗口的调用次序:

    1.       手工调用pWnd->DestroyWindow();

    2.       DestroyWindow会发送WM_DESTROY;

    3.       WM_DESTROY对应的消息处理函数是OnDestroy();

    4.       DestroyWindow会发送WM_NCDESTROY;

    5.       WM_NCDESTROY对应的消息处理函数是OnNcDestroy;

    6.       OnNcDestroy最后会调用PostNcDestroy;

    7.       PostNcDestroy经常被用户重载以提供释放内存操作。例如可以使用delete this;

    通过这种方式,窗口对象对应的窗口和窗口对象本身都被释放了。

    如果含有子窗口:
          如果含有子窗口,则调用父窗口的DestroyWindow时,它会向子窗口发送WM_DESTROY和WM_NCDESTROY消息。

          具体调用顺序参考下文的例子。

    DestroyWindow对delete的影响:
          应该说前者对后者并没有什么影响。但经常在DestroyWindow间接导致执行的PostNcDestroy中delete窗口对象指针,即delete this。

          CView::PostNcDestroy中唯一的操作就是delete this;CframeWnd::PostNcDestory也是如此。而默认的CWnd::PostNcDestroy是空操

    作,CDialog中也没有对其进行重载,即也是空。

    delete对Destroy的影响:
          delete会导致析构函数。CWnd的析构函数中有对DestroyWindow的调用,但必须保证:

    m_hWnd != NULL &&


               this != (CWnd*) & wndTop && this != (CWnd*)&wndBottom &&


               this != (CWnd*)&wndTopMost && this != (CWnd*)&wndNoTopMost。

          Cdialog的析构函数中也有对DestroyWindow的调用,但条件比较松,只需要m_hWnd != NULL。另外Cdialog::DoModal也会调用

    DestroyWindow。

          CFrameWnd的OnClose中会调用DestroyWindow,但其析构中不会调用DestroyWindow。

          CView的析构也不会调用DestroyWindow。

    一个SDI程序的销毁过程
          有CMainFrame类、CMyView类。并且CMyView有两个子窗口CMyDlg和CmyWnd的实例。

          点击退出按钮,CMainFrame会收到WM_CLOSE消息。CframeWnd(CMainFrame的父类)间接会调用CWnd::DestroyWindow;它首先向

    CMyView发送WM_DESTORY和WM_NCDESTROY消息,并引发相应的处理函数;然后向CMyDlg发送WM_DESTORY和WM_NCDESTROY消息,并引发相应的处

    理函数;然后向CMyWnd发送WM_DESTORY和WM_NCDESTROY消息,并引发相应的处理函数。

          具体的执行顺序是:

    1.       调用CMainFrame::DestroyWindow

    2.       CFrameWnd::OnDestroy

    3.       CMyView::OnDestroy

    4.       CmyWnd::OnDestroy

    5.       CmyDlg::OnDestroy

    6.       CmyWnd::PostNcDestroy

    7.       CmyWnd的析构

    8.       CmyDlg::OnDestroy

    9.       CmyDlg的析构

    10.   CMyView::PostNcDestroy

    11.   CmyView的析构

    12.   CMainFrame的析构

    13.   CMainFrame::DestroyWindow退出

    上面情况是假设我们在CmyWnd和CmyDlg的PostNcDestroy中添加了delete this。如果没有添加,则7,10不会执行。

          因为CView::PostNcDestroy中调用了delete this,所以然后会执行CMyView的析构操作。因为CframeWnd::PostNcDestroy中调用了

    delete this,所以最后执行CMainFrame的析构操作。

          如果自己的CmyDlg和CmyWnd在PostNcDestroy中有delete this;则二者会被析构。否则内存泄漏。当然delete也可以放在CMyView的析

    构中做,只是不够OO。

    总结
          可以有两种方法销毁窗口对象对应的窗口和释放窗口对象指针。一种是通过DestroyWindow。这是比较好的方法,因为最后MFC会自动

    相应WM_CLOSE导致CframWnd::DestroyWindow被调用,然后会一次释放所有子窗口的句柄。用户需要做的是在PostNcDestroy中释放堆窗口对

    象指针。但因为某些对象是在栈中申请的,所以delete this可能出错。这就要保证写程序时自己创建的窗口尽量使用堆申请。

          另一种是delete。Delete一个窗口对象指针有的窗口类(如CWnd,Cdialog)会间接调用DestroyWindow,有的窗口类(如CView,

    CframeWn)不会调用DestroyWindow。所以要小心应对。

          二者是相互调用的,很繁琐。
     
    ----------------------------------------------------------------
    一个MFC窗口对象包括两方面的内容:一是窗口对象封装的窗口,即存放在m_hWnd成员中的HWND(窗口句柄),二是窗口对象本身是一个C++

    对象。要删除一个MFC窗口对象,应该先删除窗口对象封装的窗口,然后删除窗口对象本身。

    删除窗口最直接方法是调用CWnd::DestroyWindow或::DestroyWindow,前者封装了后者的功能。前者不仅会调用后者,而且会使成员m_hWnd

    保存的HWND无效(NULL)。如果DestroyWindow删除的是一个父窗口或拥有者窗口,则该函数会先自动删除所有的子窗口或被拥有者,然后再删

    除父窗口或拥有者。在一般情况下,在程序中不必直接调用DestroyWindow来删除窗口,因为MFC会自动调用DestroyWindow来删除窗口。例如

    ,当用户退出应用程序时,会产生WM_CLOSE消息,该消息会导致MFC自动调用CWnd::DestroyWindow来删除主框架窗口,当用户在对话框内按

    了OK或Cancel按钮时,MFC会自动调用CWnd::DestroyWindow来删除对话框及其控件。

    窗口对象本身的删除则根据对象创建方式的不同,分为两种情况。在MFC编程中,会使用大量的窗口对象,有些窗口对象以变量的形式嵌入在

    别的对象内或以局部变量的形式创建在堆栈上,有些则用new操作符创建在堆中。对于一个以变量形式创建的窗口对象,程序员不必关心它的

    删除问题,因为该对象的生命期总是有限的,若该对象是某个对象的成员变量,它会随着父对象的消失而消失,若该对象是一个局部变量,

    那么它会在函数返回时被清除。

    对于一个在堆中动态创建的窗口对象,其生命期却是任意长的。初学者在学习C++编程时,对new操作符的使用往往不太踏实,因为用new在堆

    中创建对象,就不能忘记用delete删除对象。读者在学习MFC的例程时,可能会产生这样的疑问,为什么有些程序用new创建了一个窗口对象

    ,却未显式的用delete来删除它呢?问题的答案就是有些MFC窗口对象具有自动清除的功能。

    如前面讲述非模态对话框时所提到的,当调用CWnd::DestroyWindow或::DestroyWindow删除一个窗口时,被删除窗口的PostNcDestroy成员函

    数会被调用。缺省的PostNcDestroy什么也不干,但有些MFC窗口类会覆盖该函数并在新版本的PostNcDestroy中调用delete this来删除对象

    ,从而具有了自动清除的功能。此类窗口对象通常是用new操作符创建在堆中的,但程序员不必操心用delete操作符去删除它们,因为一旦调

    用DestroyWindow删除窗口,对应的窗口对象也会紧接着被删除。

    不具有自动清除功能的窗口类如下所示。这些窗口对象通常是以变量的形式创建的,无需自动清除功能。

    所有标准的Windows控件类。

    1.       从CWnd类直接派生出来的子窗口对象(如用户定制的控件)。

    2.       切分窗口类CSplitterWnd。

    3.       缺省的控制条类(包括工具条、状态条和对话条)。

    4.       模态对话框类。

     

    具有自动清除功能的窗口类如下所示,这些窗口对象通常是在堆中创建的。

    1.       主框架窗口类(直接或间接从CFrameWnd类派生)。

    2.       视图类(直接或间接从CView类派生)。

     

    读者在设计自己的派生窗口类时,可根据窗口对象的创建方法来决定是否将窗口类设计成可以自动清除的。例如,对于一个非模态对话框来

    说,其对象是创建在堆中的,因此应该具有自动清除功能。

    综上所述,对于MFC窗口类及其派生类来说,在程序中一般不必显式删除窗口对象。也就是说,既不必调用DestroyWindow来删除窗口对象封

    装的窗口,也不必显式地用delete操作符来删除窗口对象本身。只要保证非自动清除的窗口对象是以变量的形式创建的,自动清除的窗口对

    象是在堆中创建的,MFC的运行机制就可以保证窗口对象的彻底删除。

    如果需要手工删除窗口对象,则应该先调用相应的函数(如CWnd::DestroyWindow)删除窗口,然后再删除窗口对象.对于以变量形式创建的

    窗口对象,窗口对象的删除是框架自动完成的.对于在堆中动态创建了的非自动清除的窗口对象,必须在窗口被删除后,显式地调用delete

    来删除对象(一般在拥有者或父窗口的析构函数中进行).对于具有自动清除功能的窗口对象,只需调用CWnd::DestroyWindow即可删除窗口

    和窗口对象。注意,对于在堆中创建的窗口对象,不要在窗口还未关闭的情况下就用delete操作符来删除窗口对象

    展开全文
  • 对话框和对话框类 模式对话框 无模式对话框 属性页对话框 通用对话框
  • 使用纯C语言实现对Windows对话框的交互,适合初学者学习,摆脱Window DOS控制台的约束。
  • C++ WINDOWS 消息对话框

    千次阅读 2019-04-14 16:56:04
    C++ WINDOWS 消息对话框 /*加载WINDOWS API头文件*/ #include<Windows.h> /* TEXT() 宽字符宏 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) 返回类型 int...

    C++ WINDOWS 消息对话框

    /*加载WINDOWS API头文件*/
    #include<Windows.h>
    /*
    TEXT()  宽字符宏
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) 返回类型 int  window主程序入口
    MessageBox(父窗口句柄,TEXT(窗口内容),TEXT(窗口标题),MB_OK);   配置消息对话框
    */
    int WINAPI WinMain(HINSTANCE hInstance1,
    	HINSTANCE hPrevInstance,
    	PSTR szCmdLine,
    	int iCmdShow){
    	MessageBox(NULL, TEXT("你好!中文!"), TEXT("Hello World!"), MB_OK);
    	return 0;
    }

     

    展开全文
  • 主要介绍了对话框和对话框类、模式对话框、无模式对话框、属性页对话框和通用对话框
  • 基于MFC对话框Windows服务程序

    千次阅读 2012-04-26 11:22:21
    最近需求要写个服务程序...首先写好mfc的对话框程序,调试什么的,功能也都完成好。这一部分和平常的mfc对话框程序没有差别,之后的服务启动后打开的就是现在所完成的。 重点是服务部分。这里我找了很多文章,后来在 ...

    最近需求要写个服务程序,部分功能用MFC类库实现将非常方便,因此就没打算使用win32的服务程序,虽然那样对于服务很简单。

    首先写好mfc的对话框程序,调试什么的,功能也都完成好。这一部分和平常的mfc对话框程序没有差别,之后的服务启动后打开的就是现在所完成的。

    重点是服务部分。这里我找了很多文章,后来在

    http://www.vckbase.com/document/viewdoc/?id=1095

    一文中找到了解决办法。

    服务部分大致和win32服务一样,打开SCM管理器,创建服务等,这样的代码也很多,就不细说了。

    主要说说跟MFC相衔接以及遇到的一些问题。

    衔接部分主要是在工程CPP的InitInstance函数中将对话框部分的代码注释掉,在这里调用服务的main函数,这里要注意main函数的参数了,其参数跟当前工程的编码环境有关。如果是Ansi的就使用main( __argc, __argv ); 而如果是Unicode环境就要使用main( __argc, __wargv );了。我也调试了好一会才发现这个问题,对应还要修改服务代码中的相关部分。

    然后在工程cpp中添加两个全局函数,这两个函数主要用来控制服务的启动(即要显示对话框或者执行功能)和服务的停止(释放资源等)。

    代码如下

    VOID ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv)
    {
    	ReportStatusToSCMgr( SERVICE_RUNNING, NO_ERROR, 0 );
    
    	CMyDlg dlg;
    	theApp.m_pMainWnd = &dlg;
    	int nResponse = dlg.DoModal();
    	if (nResponse == IDOK)
    	{
    	}
    	else if (nResponse == IDCANCEL)
    	{
    	}
    }
    VOID ServiceStop()
    {
    	((CMyDlg*)theApp.m_pMainWnd)->EndDialog(0);
    	theApp.m_pMainWnd = NULL;
    }
    注意上面,服务停止的函数中,theApp.m_pMainWnd = NULL;这句很重要,由于之前m_pMainWnd赋值为对话框的指针,但在对话框结束后,并没有将其置空,这样在停止服务后会有个报错,具体指向winmain.cpp的AfxWinMain函数中
    if (pThread->m_pMainWnd != NULL)
    {
    	TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
    	pThread->m_pMainWnd->DestroyWindow();
    }

    销毁窗口处。就是由于野指针所引起的。


    这两个函数主要用在服务对应的主函数中以及控制函数的退出相关部分。

    这样基本就完成了。



    展开全文
  • c语言--windows文件夹选择对话框--windows api--SHBrowseForFolder
  • VC++源码—WINDOWS XP风格对话框 VC++源码—WINDOWS XP风格对话框
  • Windows API 创建对话框,在主对话框上创建子控件按钮,单击按钮在对话框上显示位图,单击另一按钮给主对话框发送销毁消息,关闭对话框
  • Windows对话框分为两类:模态对话框和非模态对话框。 模态对话框 当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。...
  • Windows窗口及对话框

    千次阅读 2016-02-18 22:19:46
    1、Windows窗口介绍    在Windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理窗口,这个数据结构中有四个数据用来构建list,即child、...
  • 怎样调用Windows的文件拷贝对话框
  • 对话框Windows应用程序和用户打交道的界面元素,包含各种按钮和各种选项,通过它们可以完成特定命令或任务。学习MFC从对话框的使用开始学习,会让整个学习更加精彩。 1 预备知识 1.1对话框的组成 (1)对话框资源...
  • 使用ColorDialong调用Windows颜色对话框.rar 使用ColorDialong调用Windows颜色对话框.rar 使用ColorDialong调用Windows颜色对话框.rar

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 278,221
精华内容 111,288
关键字:

对话框windows