Windows编程笔记(4)->模态对话框和非模态对话框

//命名规则,Windows遵循匈牙利命名法
/*
前缀
a 数组 aData
b 布尔类型 bFlag
n 整型 nCmdShow``
by (BYTE)unsigned char
c char
dw DWORD dwThreadID
w WORD
h 句柄 hWnd
l long
sz char[]
string s
CString str
p 指针

m_ 成员变量 m_nAge
g_ 全局变量 g_hInstance
s_ 静态变量
*/
程序运行结果
实现结果
对话框窗口

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

HINSTANCE g_hInstance; //应用程序实例句柄,缺少这个程序无法运行。

//登录对话框处理函数,首先要自己在编程软件里自己设计一个登录对话框的框架
BOOL CALLBACK LoginProc(HWND hWnd,UINT uMsg, WPARAM wParam,LPARAM lParam);
//对话框处理函数,同上
BOOL CALLBACK DailogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
//关于对话框,同上,是一个模态对话框,执行了这个关于按钮对话框,关闭了才可以进行下一步。
BOOL CALLBACK AboutProc(HWND hWnd,UINT uMsg, WPARAM wparam,LPARAM lParam);
//聊天对话框处理函数,同上,是一个非模态对话框,执行这个聊天按钮,可以连续打开多个聊天按钮,输入。
BOOL CALLBACK ChatProc(HWND hWnd,UINT uMsg,WPARAM wparam,LPARAM lParam);
//windows 编程入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,LPSTR lPcmdLine, int nCmdshow)
{
g_hInstance=hInstance;

//流程: 通用窗口的窗口,框架
//对话框窗口
//1.模态对话宽窗口=》 打开之后,必须操作完该窗口,才能去操作自己程序的其他窗口
//创建DialogBox 阻塞函数
//关闭EndDialog 销毁资源

//首先先弹出登录对话框
int result=DialogBox(hInstance,MAKEINTRESOURCE(IDD_LOGIN_DLG),NULL,LoginProc);
if(result==IDC_BTN_LOGING)
{
//创建一个模态对话框
 int result=DiglogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN_DLG),NULL,DialogProc);

//if(result==IDOK)
//{
//MessageBox(NULL,L"点了确定按钮关闭程序",L"提示",MB_0K);
//}
//else if(result==IDCANCEL)
//{
//MessageBox(NULL,L"点了取消按钮关闭程序",L"提示",MB_OK);
//}
//2.非模态对话框窗口=》 打开之后,允许还没有操作完该窗口,允许去操作自己程序的其他窗口
	//创建CreateDialog
	//关闭DestroyWindow:  销毁了窗口,销毁了资源
	//区别于:EndDialog : ShowWindow(hWnd, SW_HIDE); 没有销毁资源

	return 0;
}
//对话框处理函数
BOOL CALLBACK MainDialogProc(HWND hWnd,UINT uMsg,WPARAM wparam, LPARAM lParam)
{
static HWND hChatWnd=NULL;

//截获消息
TCHAR szMsg[200];
wsprintf(szMsg,L"消息:0X%x\n",uMsg);
OutputDebugString(szMsg);

switch(uMsg)
{
case WM_INITDIALOG://对话框初始化消息,发生在什么时候:在对话框窗口已经创建好了,子控件也已经创建好了,还没有显示出来而已
{
SetWindowText(hWnd,L"这是我的Win32对话框窗口");
//加载图标,要导入.ico图片进入软件
![.ico图片导入](https://img-blog.csdnimg.cn/20200930225452307.png#pic_center)

HICON hIcon1=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON1));
HICON hIcon2=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON2));

//发送消息,设置.ico图标,大图标和小图标,
SendMessageBox(hWnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon1);
SendMessageBox(hWnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon2);

//对话框窗口属性Layered->true,开启才可以实现
![属性找到Layered->true,默认是false](https://img-blog.csdnimg.cn/20201002194342297.png#pic_center)
SetLayeredWindowAttributes(hWnd,RGB(240,240,240),0,LWA_COLORKEY);
SetLayeredWindowAttributes(hWnd,RGB(240,240,240),120,LWA_ALPHA);

break;
}
case WM_DROPFILES: //拖拽文件消息dropfiles
{
//获取当前文件路径
wchar_t szFilePath[MAX_PATH];
HDROP hdrop=(HDROP)wParam;

//首先先来查询总共拖拽了几个文件
int nCont=DragQueryFile(hdrop,0xFFFFFFFF,NULL,O);
for(int i=0;i<nCont;i++)
{
DragQueryFile(hDrop,i,szFilePath,MAX_PATH);
//能够获取文件的路径
MessageBox(hWnd,szFilePath,L"提示",MB_OK);
}
break;
}
case WM_COMMAND: //命令消息 command
{
//MessageBox(hWnd,L"有命令",L"提示",MB_OK);
int wid=LOWRD(wParam);
switch(wid)
{
case IDOK: //idok 确定
SetWindowText(hWnd,L"标题发生改变");
break;

case IDCANCEL: //idcancel 取消
//EndDialog(hWnd,IDCANCEL);
//发送消息
SendMessageBox(hWnd,WM_CLOSE,0,0); //结束对话框
break;

case IDC_BTN_ABOUT: //关于按钮
DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUT_DLG),hWnD,AboutProc);
break;

case IDC_BTN_CHAT: //聊天按钮
{
hChatwnd=CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_CHAT_DLG),hWnd,ChatProc);
ShowWindow(hChatwnd,SW_SHOW);
break;
}

case IDC_BTN_SHOW: //还原显示
ShowWindow(hChatwnd,SW_SHOW);
break;
}
break;
}

case WM_CLOSE://窗口关闭消息
//DestroyWindow(hWnd);
EndDialog(hWnd,IDCANCEL); //结束对话框
return TRUE; //return TRUE;//已经自己处理了
//break;
//case WM_DESTROY: //窗口销毁消息
//PostQuitMessage(0);
//break;
}
return FALSE; //FALSE:表示交给系统默认处理,TRUE:自己已经处理了
}
//关于窗口处理函数->这是一个模态对话框哦

BOOL CALLBACK AboutProc(HWND hWnd,UINT uMsg,WPARAM wParam LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
EndDialog(hWnd,IDCANCEL);
break;
}
return FALASE; //响应一下,没有处理的全部交给系统来处理
}
//登录对话框处理函数
BOOL CALLBACK LoginProc(HWND hWnd,UINT uMsg,WPARAM wparam,LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND: //命令消息command
{
switch(LOWORD(wParam))
{
case IDC_BTN_LOGIN://登录按钮
{
//获取用户名和密码
wchar_t szUsername[20],szPassword[20];
GetDlgItemText(hWnd,IDC_USERNAME,szUername,20);
GetDlgItemText(hWnd,IDC_PASSWORD,szPassword,20);

if(wcscmp(szUsername,L"admin")==0 && wcscmp(szPassword,L"12345")==0)
{
//关闭登录窗口
EndDialog(hWnd,IDC_BTN_LOGIN);
return TRUE;
}
else
{
MessageBox(hWnd,L"用户名或密码错误",L"温馨提示",MB_OK);
return TRUE;
}
break;
}
case IDCANCEL:
EndDialog(hWnd,IDCANCEL); //结束对话框
break;
}
break;
}

case WM_CLOSE: //关闭消息
EndDialog(hWnd,IDCANCEL); //结束对话框
return TRUE;
//break;
}
return FALSE:
}

//聊天对话框处理函数->这个是一个非模态对话框窗口哦
BOOL CALLBACK ChatProc(HWND,hWnd,UINT uMsg,LPARAM lParam,WPARAM wParam)
{
switch(uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd); //非模态关闭方法
break;
case WM_COMMAND: //命令消息
{
switch(LOWORD(wParam))
{
//DestroyWindoow(hWnd); //非模态关闭方法
EndDialog(hWnd,IDCANCEL); //结束对话框,【注意,注意】在非模态对话框窗口中,使用EndDialog并不是关闭对话框窗口,而是隐藏,
	break;
}

}
}
return FALSE;
}




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿雨落轻尘丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值