0x7_对话框

对话框简介

通过CreateWindow创建窗口,比较复杂。于是微软提供了直接创建对话框的方式。

  • 1、通过资源编辑器添加对话框资源,编辑ID
  • 2、使用CreateDialog或DialogBox函数创建对话框
// 函数原型
HWND CreateDialog(  
  HINSTANCE hInstance,  // handle to module
  LPCTSTR lpTemplate,   // dialog box template name
  HWND hWndParent,      // handle to owner window
  DLGPROC lpDialogFunc  // dialog box procedure
  );
INT_PTR DialogBox(  
  HINSTANCE hInstance,  // handle to module
  LPCTSTR lpTemplate,   // dialog box template
  HWND hWndParent,      // handle to owner window
  DLGPROC lpDialogFunc  // dialog box procedure
  );
  • 模态和非模态的区别
  • 1、 CreateDialog创建的是非模态的对话框(不会阻塞父窗口)
  • 2、 DialogBox创建的是模态对话框(会阻塞父窗口)
  • 3、 非模态对话框需要直接编写消息循环,模态对话框自带消息循环
  • 4、 退出消息循环用EndDialog

对话框和窗口的区别

-窗口对话框
函数返回值返回LRESULT返回BOOL
消息处理不处理WM_INITDIALOG不处理WM_CREATE,WM_DESTORY,WM_PAINT
不处理消息的处理return DefWindowProcreturn 0

对话框处理的主要消息

WM_INITDIALOG初始化对话框
WM_COMMAND响应对话框上常用控件的操作
WM_NOTIFY响应对话框复杂控件的操作

模态对话框的编写

#include <windows.h>
#include <tchar.h>
#include "resource.h"

int WINAPI _tWinMain(_In_ HINSTANCE hInstance, 
_In_opt_ HINSTANCE hPrevInstance,
 _In_ LPTSTR lpCmdLine, 
 _In_ int nShowCmd
 )
{
  g_hInstance = hInstance;
  DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
  return 0;
}

INT_PTR CALLBACK DlgProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
  switch (Message)
  {
  case WM_CLOSE:
    EndDialog(hWnd, 0);
    //PostQuitMessage(EXIT_SUCCESS);
    break;
  default:
    break;
 }
    return 0;
}
  • 1、创建对话框资源
  • 2、显示调用DialogBox对话框
  • 3、编写对话框消息处理函数
  • 4、关闭对话框函数

信息框

信息框是模态对话框的一种特殊形式

函数原型:
int MessageBox(  
  HWND hWnd,          // handle to owner window
  LPCTSTR lpText,     // text in message box
  LPCTSTR lpCaption,  // message box title
  UINT uType          // message box style
  );
标识描述
MB_ABORTRETRYIGNORE消息框包含三个按钮:Abort、重试和忽略。
MB_ICONEXCLAMATION感叹号点图标出现在消息框中。
MB_ICONQUESTION一个问号图标出现在消息框中。
MB_ICONSTOP一个停止标志图标出现在消息框中
MB_OK消息框包含一个按钮:OK。这是默认值
MB_OKCANCEL消息框包含两个按钮:OK和Cancel。
MB_RETRYCANCEL消息框包含两个按钮:重试和取消。
MB_YESNOYES NO
MB_YESNOCANCEL消息框包含三个按钮:是、否和取消

返回值

返回值|用户操作
IDABORT|按下 Abort
IDCANCEL|按下Cancel
IDIGNORE|按下Ignore
IDNO|按下NO
IDOK|按下OK
IDRETRY|按下Retry
IDYES|按下YES


非模态对话框

#include <windows.h>
#include <tchar.h>
#include "resource.h"
HINSTANCE g_hInstance = NULL;


int WINAPI _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nShowCmd)
{
   g_hInstance = hInstance;
   HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
   AnimateWindow(hWnd, 200, AW_CENTER);
   ShowWindow(hWnd, SW_SHOW);

   MSG msg;
   while (GetMessage(&msg, 0, 0, 0))
   {
     DispatchMessage(&msg);
   }
  return 0;
}

INT_PTR CALLBACK DlgProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
  switch (Message)
  {
  case WM_CLOSE:
    //EndDialog(hWnd, 0);
    PostQuitMessage(EXIT_SUCCESS);
    break;
  default:
    break;
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值