模态对话框

1.对话框介绍

1、对话框标题修改

  • 直接在资源界面修改:在这里插入图片描述

  • 代码修改:

//对话框初始化消息, (对话框还没有显示出来,但是对话框已经创建好了)
case WM_INITDIALOG:
	{	
		//修改对话框标题
		SetWindowText(hWnd, L"这是对话框初始化消息");

		//设置窗口透明度
		SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 125, LWA_COLORKEY);

		break;
	}

2、应用程序exe图标设置:添加图标资源

		//设置窗口图标
		HICON hIcon1 = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON1));
		HICON hIcon2 = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON2));
		
		//设置图标
		SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon1);		//任务栏显示图标
		SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon2);      //exe界面显示的图标
		

3、对话框居中

  • 属性—>Center—>True

4、响应WM_COMMAND消息

  • 当用户从菜单中选择命令项,控件将通知消息发送到其父窗口或按快捷键时发送WM_COMMAND。
Message SourcewParam(高字)wParam(低字)lParam
Menu菜单0菜单ID0
Accelerator加速器1快捷键ID0
Control控制Control-defined notification code控件定义的通知代码控件IDHandle to the control window处理到控制窗口
//命令消息
case WM_COMMAND:
	{
		int wID = LOWORD(wParam);
		switch (wID)
		{
		//确定
		case IDOK:
			MessageBox(hWnd, L"点了OK", NULL, MB_OK);
			break;
		//取消
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		//关于框
		case IDC_BTN_ABOUT: 
			//弹出一个模态对话窗口
			DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ABOUT_DLG), hWnd, AboutProc);
			break;
		}	
		break;
	}

5、GetDlgItemText函数

  • 在对话框中检索与控件关联的标题或文本。
UINT GetDlgItemText(
  HWND hDlg,       		// 包含控件的对话框的句柄。
  int nIDDlgItem,  		// 要检索其标题或文本的控件的标识符。
  LPTSTR lpString, 		// 接收标题或文本的缓冲区。
  int nMaxCount    		// 要复制到lpString指向的缓冲区的字符串的最大长度(以字符为单位)
  );
  • 可以用来获取控件的文本信息进而校验密码等
//获取用户名和密码
TCHAR szUsername[200];
TCHAR szPassword[200];
GetDlgItemText(hWnd, IDC_EDIT1, szUsername, 200);
GetDlgItemText(hWnd, IDC_EDIT2, szPassword, 200);

if (wcscmp(szUsername, L"admin") == 0 && wcscmp(szPassword, L"123456") == 0)
{
		//关闭登录
		EndDialog(hWnd, IDOK);
}
else
{
     	MessageBox(hWnd, L"用户名或密码不对", L"提示", MB_OK);
		return TRUE;
}

2.模态对话框的创建

使用DialogBox函数来创建,EndDialog来结束对话框

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MainDialogProc);
EndDialog(hWnd, IDOK);
对话框窗口处理函数声明
//定义全局变量 因为处理函数中没有句柄 但是加载图标要有句柄
HINSTANCE g_hInstance;

//登录窗口处理函数
BOOL CALLBACK LoginProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//对话框窗口处理函数
BOOL CALLBACK MainDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//关于窗口处理函数
BOOL CALLBACK AboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//定义全局变量实例句柄
	g_hInstance = hInstance;
	//模态对话框  只能操作当前对话框
	
	//登录
	int loginResult = DialogBox(hInstance, MAKEINTRESOURCE(IDD_LOGIN_DLG), NULL, LoginProc);  //MAKEINTRESOURCE(IDD_LOGIN_DLG)强制转换 因为IDD_LOGIN_DLG是整数

	if (loginResult == IDCANCEL)
		return 0;
	else
	{
		//主窗口,阻塞函数
		int result = DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MainDialogProc);
	}
	return 0;
}
对话框窗口处理函数
登录窗口处理函数
//登录窗口处理函数
BOOL CALLBACK LoginProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_COMMAND:
		{	
			int wID = LOWORD(wParam);
			switch (wID)
			{
			//点击确定按钮时获取用户账号密码并进行判断
			case IDOK:
			{
				//获取用户名和密码
				TCHAR szUsername[200];
				TCHAR szPassword[200];
				GetDlgItemText(hWnd, IDC_EDIT1, szUsername, 200);
				GetDlgItemText(hWnd, IDC_EDIT2, szPassword, 200);

				if (wcscmp(szUsername, L"admin") == 0 && wcscmp(szPassword, L"123456") == 0)
				{
					//关闭登录窗口
					EndDialog(hWnd, IDOK);
				}
				else
				{
					MessageBox(hWnd, L"用户名或密码不对", L"提示", MB_OK);
					return TRUE;
				}
			}
			break;
		}
		break;
		}
	//窗口关闭消息		
	case WM_CLOSE:
		EndDialog(hWnd, IDCANCEL);
		return TRUE;//用户自己处理
	}
	return FALSE;//用户不作处理 系统帮处理  即使之前都是true但是到最后还是系统会处理
}

在这里插入图片描述

主对话框窗口处理函数
//主对话框窗口处理函数
BOOL CALLBACK MainDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	TCHAR szMsg[250];
	wsprintf(szMsg, L"uMsg:%#x\r\n", uMsg);//先setfont initdialog settext
	OutputDebugString(szMsg);

	switch (uMsg)
	{
	case WM_INITDIALOG://对话框初始化消息, (对话框还没有显示出来,但是对话框已经创建好了)
	{	
		//设置窗口图标
		HICON hIcon1 = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON1));
		HICON hIcon2 = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON2));
		//设置图标
		SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon1);
		SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon2);

		SetWindowText(hWnd, L"这是对话框初始化消息");

		//设置窗口透明度
		SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 125, LWA_COLORKEY);

		break;
	}
	//命令消息
	case WM_COMMAND:
	{
		int wID = LOWORD(wParam);
		switch (wID)
		{
		case IDOK:
			MessageBox(hWnd, L"点了OK", NULL, MB_OK);
			break;
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		case IDC_BTN_ABOUT: 
			//弹出一个窗口
			DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ABOUT_DLG), hWnd, AboutProc);
			break;
		}	
		break;
	}
	//窗口关闭消息
	case WM_CLOSE:
		if (IDNO == MessageBox(hWnd, L"您确定要关闭嘛?", L"提示", MB_YESNO))
			return TRUE;
		else
		{
			EndDialog(hWnd, IDCANCEL);//EndDialog调用就销毁了
		}
	//窗口销毁消息
	case WM_DESTROY:
		//MessageBox(NULL, L"WM_DESTROY消息", NULL, MB_OK);
		break;
	//文件拖拽消息
	case WM_DROPFILES:
		{
			HDROP hDrop = (HDROP)wParam;
			TCHAR szPath[MAX_PATH];
			int nCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
			for (int i = 0; i < nCount;i++)
			{
				DragQueryFile(hDrop, i, szPath, MAX_PATH);
				MessageBox(hWnd, szPath, NULL, MB_OK);
			}			
			
			break;
		}
	}

	//return TRUE;  //返回真,表示 所有消息我们自己处理了,系统不会在给我们处理
	return FALSE;  //凡回假 表示 所有消息我们自己没处理了,系统给我们处理
}

在这里插入图片描述
在这里插入图片描述

关于-窗口处理函数
//关于-窗口处理函数
BOOL CALLBACK AboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	//窗口关闭消息		
	case WM_CLOSE:
			EndDialog(hWnd, IDCANCEL);
		return TRUE;
	}

	return FALSE;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值