Windows图形界面(GUI)-DLG-C/C++ - 模态与非模态对话框

目录

模态与非模态对话框

模特对话框

非模态对话框

实例代码


模态与非模态对话框

模特对话框
  • DialogBox 函数用于创建一个模态对话框。模态对话框会阻止用户访问主窗口,直到对话框关闭。
INT_PTR DialogBox(
  HINSTANCE hInstance,
  LPCSTR    lpTemplate,
  HWND      hWndParent,
  DLGPROC   lpDialogFunc
);
  • hInstance: 应用程序实例的句柄。
  • lpTemplate: 对话框模板的标识符或名称。
  • hWndParent: 父窗口的句柄,模态对话框会阻止用户访问此窗口。
  • lpDialogFunc: 对话框过程函数的指针。
非模态对话框
  • CreateDialog 函数用于创建一个非模态对话框。非模态对话框不会阻止用户访问其他窗口。
HWND CreateDialog(
  HINSTANCE hInstance,
  LPCSTR    lpTemplate,
  HWND      hWndParent,
  DLGPROC   lpDialogFunc
);
  • hInstance: 应用程序实例的句柄。
  • lpTemplate: 对话框模板的标识符或名称。
  • hWndParent: 父窗口的句柄。
  • lpDialogFunc: 对话框过程函数的指针。
实例代码
#include <Windows.h>
#include "resource.h"

INT_PTR CALLBACK MainDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK ModeDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK MoleDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);


INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, MainDialogProc);

	return 0;
}

INT_PTR CALLBACK MainDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_CLOSE:
	{
		EndDialog(hwnd, 0);
		return TRUE;
	}

	case WM_COMMAND:
	{
		switch (LOWORD(wParam))
		{
		case IDC_BUTTON1:
		{
			DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG2), hwnd, ModeDialogProc);
			break;
		}
		case IDC_BUTTON2:
		{
			HWND MoleHwnd = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG3), hwnd, MoleDialogProc);
			ShowWindow(MoleHwnd, SW_SHOW);
			break;
		}
		}

		return TRUE;
	}

	default:
		return FALSE;
	}
}

INT_PTR CALLBACK ModeDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_INITDIALOG:
	{
		return TRUE;
	}
	case WM_CLOSE:
	{
		EndDialog(hwnd, 0);
		return TRUE;
	}
	default:
		return FALSE;
	}
}

INT_PTR CALLBACK MoleDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_INITDIALOG:
	{
		return TRUE;
	}
	case WM_CLOSE:
	{
		DestroyWindow(hwnd);
		return TRUE;
	}
	default:
		return FALSE;
	}
}

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值