Windows API一日一练(18)EndDialog函数

上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数 EndDialog 。这个函数只能在对话框的消息处理函数里使用,并且这个函数调用之后,没有立即就删除对话框的,而是设置了操作系统里的结束标志。当操作系统查检到有这个标志时,就去删除对话框的消息循环,同时也去释放对话框占用的资源。其实对话框的生命周期是这样的,先由函数 DialogBox 创建对话框,这样函数 DialogBox 完成创建对话框但还没有显示前会发出消息 WM_INITDIALOG ,让对话框有机会初始化上面所有窗口或控件的显示,比如设置文本框的字符串等。最后当用户点出确定或者取消的按钮,就收到两个命令 IDOK IDCANCEL ,这时就可以调用函数 EndDialog 来结束对话框的生命。
 
函数 EndDialog 声明如下:
WINUSERAPI
BOOL
WINAPI
EndDialog(
    __in HWND hDlg,
    __in INT_PTR nResult);
hDlg 是对话框窗口的句柄。
nResult 是设置给函数 DialogBox 的返回值。
 
调用这个函数的例子如下:
#001 // 显示关于对话框。
#002 //
#003 //  蔡军生  2007/07/12
#004 //
#005 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
#006 {
#007  UNREFERENCED_PARAMETER(lParam);
#008  switch (message)
#009  {
#010  case WM_INITDIALOG:
#011         return (INT_PTR)TRUE;
#012 
#013  case WM_COMMAND:
#014         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
#015         {
#016              EndDialog(hDlg, LOWORD(wParam));
#017               return (INT_PTR)TRUE;
#018         }
#019         break;
#020  }
#021  return (INT_PTR)FALSE;
#022 }
16 行就是调用函数 EndDialog 来关闭对话框。 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
首先,你需要使用Windows API中的DialogBox函数创建一个对话框,并在对话框中添加一个垂直滚动条控件。 以下是一个简单的示例代码: ```c #include <windows.h> // 对话框过程函数 BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: // 设置滚动条范围和初始位置 SetScrollRange(hwndDlg, SB_VERT, 0, 100, TRUE); SetScrollPos(hwndDlg, SB_VERT, 0, TRUE); return TRUE; case WM_VSCROLL: // 处理滚动条消息 switch (LOWORD(wParam)) { case SB_THUMBPOSITION: case SB_THUMBTRACK: // 设置滚动条位置 SetScrollPos(hwndDlg, SB_VERT, HIWORD(wParam), TRUE); return 0; } break; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { // 关闭对话框 EndDialog(hwndDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; } // 弹出带有垂直滚动条的对话框 int ShowScrollableMessageBox(HWND hwndParent, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) { // 创建对话框 HWND hwndDlg = CreateDialog(NULL, NULL, hwndParent, DialogProc); // 设置对话框标题和文本 SetWindowText(hwndDlg, lpCaption); SetDlgItemText(hwndDlg, IDC_STATIC, lpText); // 显示对话框 int nResult = (int)DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), hwndParent, DialogProc); // 销毁对话框 DestroyWindow(hwndDlg); return nResult; } ``` 在上面的代码中,DialogProc是对话框过程函数,用于处理对话框的消息。在WM_INITDIALOG消息中,我们使用SetScrollRange函数设置滚动条的范围和初始位置。在WM_VSCROLL消息中,我们处理滚动条的消息,设置滚动条的位置。在WM_COMMAND消息中,我们处理对话框的关闭消息,关闭对话框并返回结果。 ShowScrollableMessageBox是我们自己编写的函数,用于弹出带有垂直滚动条的对话框。在函数中,我们首先使用CreateDialog函数创建对话框,并使用SetWindowText和SetDlgItemText函数设置对话框的标题和文本。然后,我们使用DialogBox函数显示对话框,并返回对话框的结果。最后,我们使用DestroyWindow函数销毁对话框。 要使用这个函数,你只需要调用它并传递相应的参数,就像使用MessageBox函数一样。例如: ```c ShowScrollableMessageBox(NULL, TEXT("这是一段很长的文本,需要滚动条来查看。"), TEXT("带有垂直滚动条的消息框"), MB_OK); ``` 注意,上面的代码中,我们使用了一个对话框模板,其中包含一个ID为IDC_STATIC的静态文本控件和一个ID为IDOK的确定按钮。你需要在资源文件中定义这个对话框模板,并在程序中使用它。例如,可以在.rc文件中定义如下资源: ``` IDD_DIALOG1 DIALOGEX 0, 0, 200, 100 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "带有垂直滚动条的消息框" FONT 8, "MS Sans Serif" BEGIN LTEXT "这是一段很长的文本,需要滚动条来查看。", IDC_STATIC, 10, 10, 180, 80, WS_VSCROLL | SS_LEFT | SS_NOPREFIX | WS_GROUP | WS_TABSTOP DEFPUSHBUTTON "确定", IDOK, 70, 90, 60, 14 END ``` 上面的资源定义中,我们使用了一个LTEXT控件来显示文本,并设置了WS_VSCROLL样式来启用垂直滚动条。我们还定义了一个默认按钮ID为IDOK。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

caimouse

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

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

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

打赏作者

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

抵扣说明:

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

余额充值