• Windows 编程之 对话框总结


    关于对话框

    1 对话框种类

             对话框也是一种资源,Windows中对话框分为模态的和非模态的,以及Windows系统中已经定义好的那些通用对话框,比方打开文件,目录,调色板,字符串查找等。

    2 模态对话框和非模态对话框的差别

             模态对话框就是那种你打开后必须关了才干转到主窗体的那种类型;非模态对话框就是即便打开了对话框,你依旧能够在主窗体中指指点点的那种类型。

    3 模态对话框的创建及弹出

    <1>  

    INT_PTR		DialogBox( 
           HINSTANCEhInstance,   	// handle to module
           LPCTSTR lpTemplate,    	//dialog box template
           HWND hWndParent,    	//handle to owner window
           DLGPROC lpDialogFunc  	// dialog box procedure);

    <2>

    INT_PTR   DialogBoxIndirect( 
           HINSTANCEhInstance,       // handle to module
           LPCDLGTEMPLATE lpTemplate,// dialog box template
           HWND hWndParent,          // handle to owner window
           DLGPROC lpDialogFunc      // dialog box procedure);

    <3> 

    INT_PTR    DialogBoxIndirectParam(
     	HINSTANCE hInstance,		// handle to module
     	LPCDLGTEMPLATE hDialogTemplate, // dialog box template
      	HWNDhWndParent,               	// handle toowner window
     	DLGPROC lpDialogFunc,           // dialog box procedure
     	LPARAM dwInitParam              //initialization value);

    <4>           

     INT_PTR     DialogBoxParam( 
           HINSTANCEhInstance,      // handle to module
           LPCTSTR lpTemplateName,  // dialog box template
           HWND hWndParent,       	// handle to owner window
           DLGPROC lpDialogFunc,   	//dialog box procedure
           LPARAM dwInitParam     	// initialization value);

    当中DialogBox和DialogBoxParam是从资源中载入对话框,其余两个是从内存中载入对话框。在这里面要注意的一个參数就是DLGPROC lpDialogFunc,函数原型是:

    INT_PTR	CALLBACK	DialogProc( 
    	HWNDhwndDlg,	// handle to dialog box
    	UINT uMsg,	//message 
    	WPARAMwParam,	// first message parameter
    	LPARAM lParam   //second message parameter);

    这个回调函数跟窗体回调函数非常类似,可是函数的返回类型不一样。

    4 模态对话框的消息处理

             DialogProc非常像WindowProc,但它不是WindowProc,对话框的WindowProc在Windows内部定义,它会调用DialogProc函数。

    BOOL CALLBACK	DlgProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {
             switch(msg)
             {
             caseWM_INITDIALOG:
                       returnTRUE;
             caseWM_COMMAND:
                       switch(LOWORD(wParam))
                       {
                       caseIDOK:
                                EndDialog(hdlg,0);
                                break;
                       }
                       break;
             }
             returnFALSE;
    }


    
    

    WM_INITDIALOG消息会在对话框创建的时候发送,在此消息下能够用来初始化对话框中的各种控件。

    5 模态对话框的关闭

    BOOL	EndDialog( HWND	hDlg,INT_PTR nResult);

    指定创建对话框的函数的返回值。


    6 利用控件创建复杂对话框


    7 模态对话框中自己定义控件


    既然是自己定义控件,那么必须在要进行窗体的设计,窗体的注冊,以及配置响应的窗体过程函数。

    制作步骤:

    <1>在工具箱中找到custom control,将其拖拽到面板中

    <2>点击属性,指定起class名称,以及ID

    <3>在WinMain函数中进行设计注冊

    <4>指定其窗体过程函数


  • 相关阅读:
    优雅地处理重复请求(并发请求)
    TSCTF2022(先挖个坑,太忙了呜呜呜)
    dotnet core 热重载调试Web Api
    Amazon Max deviation among all substrings
    javascript挑战编程技能第九题:数据结构
    javascript挑战编程技能第八题:99乘法表
    git获取代码和推送代码实例
    vue 项目打包和 安装项目依赖命令
    vscode 如何新建分支
    码云创建公钥 使其可以本地输入命令访问
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3947886.html
Copyright © 2020-2023  润新知