Win32API:CreateDialog、DialogBox、DialogProc

Win32API:CreateDialog、DialogBox、DialogProc一、CreateDialog 函数功能:该宏在内存中从对话框模板上创建一个无模式对话框。此宏使用CreateDialoglndirectparam函数。    函数原型:HWNDCreateDialoglndirect(HINSTANCEhlnstance,LPCDLGTEMPLATEIPTemplate,HWNDhWndParent,DLGPROCIPDialogFunc

Win32API:CreateDialog、DialogBox、DialogProc"

一、CreateDialog

  函数功能:该宏在内存中从对话框模板上创建一个无模式对话框。此宏使用CreateDialoglndirectparam 函数。

    函数原型:HWND CreateDialoglndirect(HINSTANCE hlnstance,LPCDLGTEMPLATE IPTemplate,HWNDhWndParent,DLGPROC IPDialogFunc);

    参数:

    hlnstance: 标识创建对话框的模块的事例。

    IPTemplate: 指向含有一个模板的全局内存对象的指针。CreateDialoglndirect用此模板创建对话框。对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制的一个或多个数据块,模板可以用标准格式或扩展格式。在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是由DLGTEMPLATE结构跟随一个变长数组组成。在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。CreatDialoglndirect函数返回后,可释放模板,此模板仅用于启动对话框。

    hWndParent: 标识拥有对话框的窗口。

    IpDialogFunc:指向对话框应用程序的指针,有关更多的对话框应用程序的指针,参见DialogProc。

    返回值:如果函数调用成功,则返回值为指向对话框的句柄。如果函数调用失败,则返回值为NULL。若想获得更多错误信息,可调用GetLastError函数。

二、DialogBox

    函数功能:该宏根据对话框模板资源创建一个模态的对话框。DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制。该宏使用DialogBoxParam函数。

    函数原型:int DialogBox(HINSTANCE hlnstance,LPCTSTRIpTemplate,HWND hWndParent,DLGPROC IpDialogFunc);

    参数:

    hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。

    IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURDE宏指令创建此值。

    hWndParent:指定拥有对话框的窗口。

    IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc。

    返回值:如果函数调用成功,则返回值为在对函数EndDialog的调用中的nResult参数.该函数用于中止对话框。如果函数调用失败,则返回值为C1。若想获得更多的错误信息,请调用GetLastError函数。

三、DialogProc

  函数功能:该函数为一个应用程序定义可与DialogBOX函数一起使用的回调函数。它处理发送到一个模态的或无模式对话框的消息。DLGPROC类型定义了一个指向此回调函数的指针。DialogProc函数是应用程序定义函数名的一个占位符。

    函数原型:BOOL CALLBACK DialogProc(HWND hwndDlg,UINT UMsg,WPARAM wParam,LPARAM IParam);

    参数:

    hwndDlg:指定对话框。

    uMsg:指定消息。

    wParam:指定消息特定的其他信息。

    Iparam:指定消息特定的其他信息。

    返回值:除了对MM_INITDIALOG消息的响应之外如果函数处理消息,则对话框应用程序应该返回非零值.

四、区别

调用CreateDialog, 需要ShowWinodow才能显示对话框,DialogBox不需要

五、样例 

// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;  //返回非零值
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static int idComboBox;
    switch (message)
    {
    case WM_CREATE:
        {
        }
        break;
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // 分析菜单选择:
        switch (wmId)
        {
        case ID_TEST:
            {
                HWND hAbout = CreateDialog(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
                ShowWindow(hAbout, SW_SHOW);
            }
            break;
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

今天的文章Win32API:CreateDialog、DialogBox、DialogProc分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28155.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注