模态对话框------windows编程

本文详细介绍了如何在Visual Studio中创建Win32应用程序,并设置对话框的图标,包括大图标和小图标。同时展示了如何通过资源文件和窗口处理函数捕获并记录对话框生成过程中的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先打开我们的作案工具 visual studio,创建一个win32应用程序。

然后右击资源文件,添加资源,点击dialog。点击新建。

然后像这个打出来

#include <Windows.h>
#include "resource.h"

BOOL CALLBACK WinDiaProc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam);


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstan, LPSTR lpCmdLine,int nCmdShow)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MainDialog), NULL, WinDiaProc);
	return 0;
}

BOOL CALLBACK WinDiaProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
{
	switch (uMsg)
	{
		
	case WM_CLOSE:
	{
		EndDialog(hwnd,0);
		break;
	}

		
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_QUIT:
		break;
	default:
		break;
	}
	return false;//true 告诉系统,我都处理好了,你不用管。false ,系统你来
}

MAKEINTERSOURCE(),括号里面的,就是你刚刚资源视图里,那个对话框的idd

就是这个东西,        WindiaProc是对话框窗口处理函数。

 然后呢,带大家啊设置一下这个对话框的图标。

图标呢分大图标和小图标:

这个地方的小图标。

 这个地方的是大图标

首先,我们右击资源文件,添加资源,选择icon,选择导入,然后倒入你选择的图标文件。

然后就很简单了啦,首先设置一个全局变量;

然后,在主函数里,给他赋值;

 最后在窗口处理函数里设置一下就行了

	case WM_INITDIALOG:
	{
		//设置窗口图标,加载图标 IDI_ICONSMALL资源视图你导入的那个idi
		HICON smallicon = LoadIcon(tb_instance,MAKEINTRESOURCE(IDI_ICONSMALL));
		HICON bigicon = LoadIcon(tb_instance, MAKEINTRESOURCE(IDI_ICONBIG));
		//设置图标,发送设置图标的消息
		SendMessage(hwnd, WM_SETICON, ICON_SMALL,(LPARAM)smallicon);//设置小图标 ICON_SMALL
		SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)bigicon);//设置大图标 ICON_BIG
		break;
	}

 然后呢就是进入资源视图,双击 

出现这个:

首先是第一个 accept files:

 

#include <Windows.h>
#include "resource.h"

HINSTANCE tb_instance;

BOOL CALLBACK LOGINDiaProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam);
BOOL CALLBACK WinDiaProc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam);
BOOL CALLBACK ABOUTWinProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstan, LPSTR lpCmdLine,int nCmdShow)
{
	tb_instance = hInstance;
	int answer = DialogBox(hInstance, MAKEINTRESOURCE(IDD_LOGIN), NULL, LOGINDiaProc);
	if (answer == IDCANCEL)
	{
		return 0;
	}
	else
	{

		DialogBox(hInstance, MAKEINTRESOURCE(IDD_MainDialog), NULL, WinDiaProc);
	}
	
	return 0;
}

BOOL CALLBACK WinDiaProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG:
	{
						  //设置窗口图标
						  HICON smallicon = LoadIcon(tb_instance, MAKEINTRESOURCE(IDI_ICONSMALL));
						  HICON bigicon = LoadIcon(tb_instance, MAKEINTRESOURCE(IDI_ICONBIG));
						  //设置图标,发送设置图标的消息
						  SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)smallicon);
						  SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)bigicon);
						  break;
	}
	case WM_COMMAND:
	{
					   int wid = LOWORD(wparam);
					   switch (wid)
					   {
					   case IDOK:
						   MessageBox(hwnd, L"ok", L"tips", NULL);
						   break;
					   case IDCANCEL:
						   MessageBox(hwnd, L"cancel", L"tips", NULL);
						   break;
					   case IDD_ABOUT:
						   DialogBox(tb_instance, MAKEINTRESOURCE(IDD_ABOUT), hwnd, ABOUTWinProc);
						   break;
					   default:
						   break;
					   }
					   break;
	}
	case WM_CLOSE:
	{
					 EndDialog(hwnd, 0);
					 break;
	}


	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_QUIT:
		break;
	default:
		break;
	}
	return false;//true 告诉系统,我都处理好了,你不用管,false ,系统你来
}

BOOL CALLBACK ABOUTWinProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
{
	switch (uMsg)
	{
		case WM_CLOSE:
		{
			EndDialog(hwnd,0);
			break;
		}
		default:
			break;
	}
	return false;
}


BOOL CALLBACK LOGINDiaProc(HWND hwnd, UINT uMsg, WPARAM wparam, LPARAM lparam)
{
	switch (uMsg)
	{
	case WM_CLOSE:
		EndDialog(hwnd,IDCANCEL);
		//DestroyWindow(hwnd);
		break;
	case WM_DESTROY:
		break;
	case WM_COMMAND:
	{
					   int	nid = LOWORD(wparam);
					   switch (nid)
					   {
						   
						   case IDOK:
						   {  
							   TCHAR username[256];
							   TCHAR password[256];
							   GetDlgItemText(hwnd, IDC_USERNAME,username, 256);
							   GetDlgItemText(hwnd, IDC_PASSWORD,password, 256);
							   if (wcscmp(username, L"root") == 0 && wcscmp(password, L"123456") == 0)
							   {
								   
									EndDialog(hwnd, IDOK);
							   }
							   else
							   {
								   //LOGINDiaProc(hwnd, uMsg, wparam, lparam);
								   MessageBox(hwnd,L"账号或密码错误",L"TIPS",NULL);
								   return TRUE;
							   }
							   break;
							   default:
								   break;
						   }
						   case IDCANCEL:
							   EndDialog(hwnd, IDCANCEL);
							   break;
					   }
		break;
	}
	default:
		break;
	}
	return false;
}

这是个登陆的小程序,大家可以试试。

对话框生成的过程中发出了哪些消息?

让我们康康:

#include <Windows.h>
#include "resource.h"

BOOL CALLBACK MyDlgProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdSHOW)
{
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MyDlgProc);


	return 0;
}

BOOL CALLBACK MyDlgProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
{
	wchar_t szdebug[256];
	wsprintf(szdebug,L"对话框生成的过程中发出了哪些消息?%x",umsg);
	OutputDebugString(szdebug);
	switch (umsg)
	{
		case WM_CLOSE:
		{
						 EndDialog(hwnd, NULL);
						 break;
		}
		case WM_DESTROY:
		{
						   PostQuitMessage(0);
						   break;
		}
		case WM_QUIT:
			break;
	}


	return false;
}

 我抽取了一些,来看看

对话框生成的过程中发出了哪些消息?					30
对话框生成的过程中发出了哪些消息?					110
对话框生成的过程中发出了哪些消息?					127
对话框生成的过程中发出了哪些消息?					128
对话框生成的过程中发出了哪些消息?					31f
对话框生成的过程中发出了哪些消息?					18
对话框生成的过程中发出了哪些消息?					46
对话框生成的过程中发出了哪些消息?					1c
对话框生成的过程中发出了哪些消息?					86
对话框生成的过程中发出了哪些消息?					7f
对话框生成的过程中发出了哪些消息?					7f
对话框生成的过程中发出了哪些消息?					7f
对话框生成的过程中发出了哪些消息?					6

 比如30,设置字体,剩下的大家有兴趣可以自己去查一查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值