Windows程序设计之对话框

一、插入对话框资源
菜单"Insert"->Resource->Dialog->New

二、模态对话框(Modal Dialog Box)
1.用户不能在对话框与同一个程序中的另一个窗口之间进行切换。
2. 创建模态对话框:
(1)DialogBox宏从一个对话框模板资源中创建一个模态对话框。
(2)模态对话框直到指定的回调函数通过调用EndDialog函数终止对话框才返回值。

int DialogBox(
  HINSTANCE hInstance,  // handle to application instance
  LPCTSTR lpTemplate,   // identifies dialog box template
  HWND hWndParent,      // handle to owner window
  DLGPROC lpDialogFunc  // pointer to dialog box procedure
);
如:
DialogBox(hinstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,DialogModalProc);

3.对话框过程
(1)BOOL:返回值
(2)CALLBACK:回调函数
(3)不是真正的窗口过程函数
(4)DialogBox宏使用CreateWindowEx函数去创建模态对话框后,向对话框过程函数发送一个WM_INITDIALOG消息,该消息是对话框接收到的第一个消息。

如:
BOOL CALLBACK DialogModalProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
 switch(msg)
 {
 case WM_INITDIALOG:
  MessageBox(NULL,TEXT("模态对话框被创建!"),TEXT("创建"),MB_OK|MB_ICONINFORMATION);
  return TRUE;
 case WM_COMMAND:
  switch(LOWORD(wParam))
  {
  case IDOK:
  case IDCANCEL:
   EndDialog(hdlg,0);//终止模态对话框
   return TRUE;
  }
  break;
 }
 return FALSE;
}

4.终止模态对话框
BOOL EndDialog(
  HWND hDlg,    // handle to dialog box
  int nResult   // value to return
);
如:
EndDialog(hdlg,0);//


三、非模态对话框(Modeless Dialog Box)
1. 创建模态对话框:
(1)CreateDialog宏从一个对话框模板资源中创建一个非模态对话框
(2)返回对话框句柄
HWND CreateDialog(
  HINSTANCE hInstance,  // handle to application instance
  LPCTSTR lpTemplate,   // identifies dialog box template name
  HWND hWndParent,      // handle to owner window
  DLGPROC lpDialogFunc  // pointer to dialog box procedure
);
如:
hdlg=CreateDialog(hinstance,MAKEINTRESOURC(IDD_DIALOG2),hwnd,
                  DialogModalessProc);
2.非模态对话框过程函数
BOOL CALLBACK DialogModalessProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
 switch(msg)
 {
 case WM_INITDIALOG:
  MessageBox(NULL,TEXT("非模态对话框被创建!"),TEXT("创建"),MB_OK|MB_ICONINFORMATION);
  return TRUE;
 case WM_COMMAND:
  switch(LOWORD(wParam))
  {
  case IDOK:
   DestroyWindow(hdlg);//终止非模态对话框
   return TRUE;
  }
  break;
 }
  return FALSE;
}
3.销毁非模态对话框
DestroyWindow:
BOOL DestroyWindow(
  HWND hWnd   // handle to window to destroy
);

如:DestroyWindow(hdlg);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值