SDK回调函数实现双页面之间的切换

Posted jianmoxiansheng-guo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDK回调函数实现双页面之间的切换相关的知识,希望对你有一定的参考价值。

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include "resource.h"
INT_PTR CALLBACK DialogProc(HWND hwndDlog, UINT uMsg, WPARAM wParam, LPARAM lparam)
{//消息回调函数
    switch (uMsg)
    {
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK)
        {
            float left1 = GetDlgItemInt(hwndDlog, IDC_LEFT1);
            float right1 = GetDlgItemInt(hwndDlog, IDC_RIGHT1);
            SetDlgItemInt(hwndDlog, IDC_RESULT1, left1 + right1);
        }if (LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hwndDlog, IDCANCEL); 
        }
        break;
    }
    return 0;
}
INT_PTR CALLBACK DialogProc1(HWND hwndDlog, UINT uMsg, WPARAM wParam, LPARAM lparam)
{
    switch (uMsg)
    {
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK)
        {
            EndDialog(hwndDlog, IDCANCEL);
            DialogBox(NULL, (LPCTSTR)IDD_D, NULL, DialogProc);
        }
        if (LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hwndDlog, IDCANCEL);
        }
        break;
    }
    return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    DialogBox(hInstance, (LPCSTR)IDD_DIALOG1, NULL, DialogProc1);
    
    return 0;
}

 在这段代码中我已经事先新建了两个对话框控件,他们的ID分别为ID_D(这个是第二个页面), IDD_DIALOG1(第一个页面,登录页面);

当我们想要用第一个页面调用第二个页面的时候,我们必须要思考只有当第一个页面出现之后并点击第一个页面上面的按钮才能让第二个页面弹出来;

那怎么实现他呢?

我们要在第一个页面的一个触发ID上面绑定这个事件,即:当点击这个按钮,第二个弹窗就会弹出来,所以就有了这个回调函数;

 

INT_PTR CALLBACK DialogProc1(HWND hwndDlog, UINT uMsg, WPARAM wParam, LPARAM lparam)
{
    switch (uMsg)
    {
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK)
        {
       DialogBox(NULL, (LPCTSTR)IDD_D, NULL, DialogProc);
EndDialog(hwndDlog, IDCANCEL); }
if (LOWORD(wParam) == IDCANCEL) { EndDialog(hwndDlog, IDCANCEL); } break; } return FALSE; }

 

这是我们自然而然想到的,调出第二个对话框,销毁第一个对话框,但是当我们运行的时候会发现,这样做的时候,第一个对话框不会随着第二个对话框的出现而销毁;

只有在第二个对话框点击销毁按钮的时候,第一个对话框才随着第二个对话框一起销毁;

让我们改变一下代码

 case WM_COMMAND:
        if (LOWORD(wParam) == IDOK)
        {
       EndDialog(hwndDlog, IDCANCEL);

       DialogBox(NULL, (LPCTSTR)IDD_D, NULL, DialogProc);
            
        }

这时我们发现,在第二个弹出的时候,第一个也随之销毁;

这是怎么回事?

这是因为当运行到     

DialogBox(NULL, (LPCTSTR)IDD_D, NULL, DialogProc);

    的时候,代码会在这里停留, 等待执行第二个对话框的消息,所以   

EndDialog(hwndDlog, IDCANCEL);

   执行不到,当我们把两个的顺序改变, 也就变成了销毁之后弹出第二个对话框;



以上是关于SDK回调函数实现双页面之间的切换的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActionBar 旋转 Android 的双片段

单页面应用和多页面应用的区别对比

Android:在视图/活动/片段之间滑动切换

在Android Studio片段之间切换时地图片段不隐藏

如何在 Kotlin 片段内的按钮之间切换片段?

Android:使用选项卡在不同片段之间切换