DialogBox控件

1、DialogBox

函数功能:该宏根据对话框模板资源创建一个模态的对话框。DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制。该宏使用DialogBoxParam函数。

函数原型:

int DialogBox(HINSTANCE hlnstance,LPCTSTRIpTemplate,HWND hWndParent,DLGPROC IpDialogFunc);参数:hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURDE宏指令创建此值。hWndParent:指定拥有对话框的窗口。IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc。返回值:如果函数调用成功,则返回值为在对函数EndDialog的调用中的nResult参数.该函数用于中止对话框。如果函数调用失败,则返回值为C1。若想获得更多的错误信息,请调用GetLastError函数。

2、CreateDialog

函数功能:该宏在内存中从对话框模板上创建一个无模式对话框。此宏使用CreateDialoglndirectparam 函数。

函数原型:

HWND CreateDialoglndirect(HINSTANCE hlnstance,LPCDLGTEMPLATE IPTemplate,HWNDhWndParent,DLGPROC IPDialogFunc);参数:hlnstance: 标识创建对话框的模块的事例。IPTemplate: 指向含有一个模板的全局内存对象的指针。CreateDialoglndirect用此模板创建对话框。对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制的一个或多个数据块,模板可以用标准格式或扩展格式。在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是由DLGTEMPLATE结构跟随一个变长数组组成。在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。CreatDialoglndirect函数返回后,可释放模板,此模板仅用于启动对话框。hWndParent: 标识拥有对话框的窗口。IpDialogFunc:指向对话框应用程序的指针,有关更多的对话框应用程序的指针,参见DialogProc。返回值:如果函数调用成功,则返回值为指向对话框的句柄。如果函数调用失败,则返回值为NULL。若想获得更多错误信息,可调用GetLastError函数。

3、DialogProc

函数功能:该函数为一个应用程序定义可与DialogBOX函数一起使用的回调函数。它处理发送到一个模态的或无模式对话框的消息。DLGPROC类型定义了一个指向此回调函数的指针。DialogProc函数是应用程序定义函数名的一个占位符。

函数原型:

 BOOL CALLBACK DialogProc(HWND hwndDlg,UINT UMsg,WPARAM wParam,LPARAM IParam);参数:hwndDlg:指定对话框。uMsg:指定消息。wParam:指定消息特定的其他信息。Iparam:指定消息特定的其他信息。返回值:除了对MM_INITDIALOG消息的响应之外如果函数处理消息,则对话框应用程序应该返回非零值.

4、区别

调用CreateDialog, 需要ShowWinodow才能显示对话框,DialogBox不需要。
CreateDialog 函数使用

HWND hAbout = CreateDialog(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
ShowWindow(hAbout, SW_SHOW);//需要ShowWinodow才能显示对话框

DialogBox 函数使用

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

代码实例:

创建一个ListView,然后通过点击按钮进行弹出dialog窗口,对ListView添加新的内容项。


点击按钮后显示diallog窗口
添加成功后,

先建立一个dialogbox

 case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);switch (wmId) {case 1:  //按下按钮//INT_PTR back = (INT_PTR)DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, MyDlgProc);if (DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, MyDlgProc) ==1)//dialog窗口内 点击ok 返回值是1,点击cancel返回值为2,这里判断如果点击OK,才对listview添加新的数据{vitem.iItem = i;//第几行的数据vitem.iSubItem = 0;//第1列vitem.pszText = szUsername;//赋值ListView_InsertItem(hListview, &vitem);//ListView_InsertItem表示添加项// 设置子项  vitem.iSubItem = 1;//第2列vitem.pszText = szAge;ListView_SetItem(hListview, &vitem);vitem.iSubItem = 2;//第3列vitem.pszText = szEditDept;ListView_SetItem(hListview, &vitem);vitem.iSubItem = 3;//第4列vitem.pszText = szEditPost;ListView_SetItem(hListview, &vitem);i++;wsprintf(szUserInfo, TEXT("添加成功\r\n您的用户账号:%s\r\n您的用户密码:%s"), szUsername, szAge);MessageBox(hWnd, szUserInfo, TEXT("信息提示"), MB_ICONINFORMATION);break;

声明dialogbox回调函数

INT_PTR CALLBACK MyDlgProc(HWND, UINT, WPARAM, LPARAM);//DIALOGBOX窗口过程

定义dialogbox的回调函数

// “关于”框的消息处理程序。
INT_PTR CALLBACK MyDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{HWND hLabUsername;static HWND hEditUsername;static HWND hEditAge;static HWND hEditDept;static HWND hEditPost;int wmId, wmEvent, iUsername, iAge;UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG://创建按钮控件//创建静态文本框控件--用户名hLabUsername = CreateWindow(TEXT("static"), TEXT("姓名:"),WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE /*垂直居中*/ | SS_RIGHT /*水平居右*/,0 /*x坐标*/, 20 /*y坐标*/, 70 /*宽度*/, 26 /*高度*/,hDlg /*父窗口句柄*/,(HMENU)11 /*控件ID*/,hInst /*当前程序实例句柄*/, NULL);//创建静态文本框控件--密码HWND hLabAge = CreateWindow(TEXT("static"), TEXT("年龄:"),WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE /*垂直居中*/ | SS_RIGHT/*水平居右*/,0, 56, 70, 26,hDlg, (HMENU)12, hInst, NULL);//创建单行文本框控件hEditUsername = CreateWindow(TEXT("edit"), TEXT(""),WS_CHILD | WS_VISIBLE | WS_BORDER /*边框*/ | ES_AUTOHSCROLL/*水平滚动*/,80, 20, 200, 25,hDlg, (HMENU)13, hInst, NULL);//创建密码输入框hEditAge = CreateWindow(TEXT("edit"), TEXT(""),//WS_CHILD | WS_VISIBLE | WS_BORDER | ES_Age /*密码*/ | ES_AUTOHSCROLL /*水平滚动*/,WS_CHILD | WS_VISIBLE | WS_BORDER |  ES_AUTOHSCROLL /*水平滚动*/,80, 56, 200, 25,hDlg, (HMENU)14, hInst, NULL);//创建静态文本框控件--部门HWND hLabelDept = CreateWindow(TEXT("static"), TEXT("部门:"),WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE /*垂直居中*/ | SS_RIGHT /*水平居右*/,0, 92, 70, 26,hDlg, (HMENU)15, hInst, NULL);//创建单行文本框控件hEditDept = CreateWindow(TEXT("edit"), TEXT(""),WS_CHILD | WS_VISIBLE | WS_BORDER /*边框*/ | ES_AUTOHSCROLL/*水平滚动*/,80, 92, 200, 25,hDlg, (HMENU)16, hInst, NULL);HWND hLabelPost = CreateWindow(TEXT("static"), TEXT("职务:"),WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE /*垂直居中*/ | SS_RIGHT /*水平居右*/,0, 128, 70, 26,hDlg, (HMENU)17, hInst, NULL);//创建单行文本框控件hEditPost = CreateWindow(TEXT("edit"), TEXT(""),WS_CHILD | WS_VISIBLE | WS_BORDER /*边框*/ | ES_AUTOHSCROLL/*水平滚动*/,80, 128, 200, 25,hDlg, (HMENU)18, hInst, NULL);//创建按钮控件//HWND hBtnLogin = CreateWindow(TEXT("button"), TEXT("登录"),//    WS_CHILD | WS_VISIBLE | WS_BORDER | BS_FLAT/*扁平样式*/,//    80, 92, 200, 30,//    hDlg, (HMENU)15, hInst, NULL//);//依次设置控件的字体SendMessage(hLabUsername, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hLabAge, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hEditUsername, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hEditAge, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hLabelPost, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hLabelDept, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hEditPost, WM_SETFONT, (WPARAM)hFont, 0);SendMessage(hEditDept, WM_SETFONT, (WPARAM)hFont, 0);//SendMessage(hBtnLogin, WM_SETFONT, (WPARAM)hFont, 0);break;//return (INT_PTR)TRUE;case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);switch (wmId){case IDOK:{GetWindowText(hEditUsername, szUsername, 20);GetWindowText(hEditAge, szAge, 20);StringCchLength(szUsername, 20, &iUsername);StringCchLength(szAge, 20, &iAge);GetWindowText(hEditDept, szEditDept, 20);GetWindowText(hEditPost, szEditPost, 20);// StringCchLength(szUsername, 100, &iUsername);//StringCchLength(EditPost, 100, &iAge);if (iUsername <= 0 || iAge <= 0){MessageBox(hDlg, TEXT("输入错误,请检查用户名和密码"), TEXT("信息提示"), MB_ICONINFORMATION);break;}else{wsprintf(szUserInfo, TEXT("您的用户账号:%s\r\n您的用户密码:%s"), szUsername, szAge);MessageBox(hDlg, szUserInfo, TEXT("信息提示"), MB_ICONINFORMATION);EndDialog(hDlg, wParam);return (INT_PTR)TRUE;}//break;}case IDCANCEL:{//            yprintf(TEXT("dialog cancel clicked"));//SetWindowText(hwndDlg, TEXT("dialog cancel clicked"));EndDialog(hDlg, wParam);return (INT_PTR)FALSE;}}break;/*  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}*/case WM_DESTROY:EndDialog(hDlg, wParam);break;}return (INT_PTR)FALSE;  //返回非零值
}

中年人学C语言Windows程序设计,30 DialogBox控件相关推荐

  1. 中年人学C语言Windows程序设计,26控件ListBox

    ListBox是Windows中的一种控件,一般被当做子窗口使用,Windows中所有子窗口都是通过发送一个通知码到父窗口父窗口通过WM_COMMAND消息接收,并在此消息中处理,并控制子窗口,Lis ...

  2. 中年人学C语言Windows程序设计,28 EDIT文本编辑框控件

    创建编辑框控件 编辑框控件的窗口类名是edit.除了子窗口常用的风格 WS_CHILD. WS_VISIBLE.WS_BORDER 外,edit 控件也有自己的风格,都是以ES开头. 风格 说明 ES ...

  3. 中年人学C语言Windows程序设计,9 窗口绘图:直线的画法

    标题中年人学C语言Windows程序设计,9 窗口绘画:直线 MoveToEx函数 函数功能: MoveToEx 函数将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标. API 函数原型: ...

  4. 中年人学C语言Windows程序设计,20子窗口的创建

    今天, 我们要学习的就是 子窗口控件 的使用. 在其他一些 Windows应用软件上我们经常能够看到一些大致相同的按钮.复选框.组合框.列表框等控件, 这些控件很有可能就是使用 标准子窗口控件 来实现 ...

  5. 中年人学C语言Windows程序设计,3 窗口中文本的输出TextOut

    中年人学C语言Windows程序设计,3 文本的输出TextOut 函数功能 TextOut 函数使用当前选择的字体.背景颜色和文本颜色,将一个字符串绘制于窗口的指定位置. API 函数原型: 注释: ...

  6. 中年人学C语言Windows程序设计,21静态文本框控件和创建自己的字体

    Windows static控件(静态文本框控件) 使用 TextOut 和 DrawText 函数有时候会不方便,例如: 文本不能自动换行,超出窗口范围会被隐藏: 每次更改文本都要先擦除背景再重新输 ...

  7. c语言windows 编程下silder控件,VB6 常用控件 滚动条ScorllBar和Slider控件

    滚动条(ScorllBar)和Slider控件通常用来附在窗体上以协助观察数据或确定位置,也可用来作为数据输入的工具. 滚动条(ScorllBar)和Slider控件都有水平和垂直两种,Slider控 ...

  8. Windows程序设计-子窗口控件

    按钮类别 /*----------------------------------------BTNLOOK.C -- Button Look Program(c) Charles Petzold, ...

  9. c#程序设计语言杜松江版_清华大学出版社-图书详情-《C#语言Windows程序设计(第2版)》...

    再 版 序 <C#语言Windows程序设计>(ISBN:978-7-302-23375-6)自2010年9月出版以来,受到了广大读者和众多高校的欢迎和好评,近年来已经重印了4次.尽管如此 ...

最新文章

  1. 关于算法的时间复杂度怎么计算
  2. excel分类_Excel小技巧61:将输入的数字显示为中文
  3. 不同域名指向一个Web站点,ICP证如何设置
  4. 2018-11-30
  5. android快速开发框架_【程序源代码】springboot和ssm的极速轻量快速开发框架
  6. python读取成功_Python如何从文件读取数据()
  7. 深度学习之 梯度消失与爆炸原因公式推导
  8. java怪兽仙境攻略_《怪兽仙境》v1.20基础攻略
  9. 在MacOS上构建以太坊开发环境
  10. 「滑板+EdgeBoard 竟能搭出AI质检流水线?」“软件杯”全国一等奖团队参赛心得...
  11. 机器学习之——泛化能力
  12. 【Power Automate】日期格式化函数formatDateTime详细说明及示例
  13. Tushare取数-历史行情/实时行情
  14. 高德地图看各省分界线_高德地图定位城市区域
  15. CANVAS drawImage 绘图图片模糊已解决
  16. 华为FreeBuds SE耳机有杂音异响的解决办法
  17. RT-Thread studio配置can hal库 驱动GM6020
  18. win10的bat文件或者cmd文件关联了文本编辑器导致无法运行
  19. 网页部署https后浏览器访问风险提示或者您的链接不是私密链接解决方案
  20. Windows OpenGL 图像绿幕抠图

热门文章

  1. Kindle 电子书分享
  2. 上海房价地图热传:数据挺新 但不科学
  3. Python项目--拼图游戏(附源码)
  4. 仿QQ空间评论随软键盘弹出和收回一个输入布局
  5. 智能CDN(上):CDN的访问过程和加速原理
  6. 图(有向图、无向图)
  7. 红旗linux 硬件,红旗软硬件兼容性查询 | 中科红旗
  8. 快手极速版自动翻视频
  9. 串口 【RXD TXD含义】【RTS CTS协议】
  10. 益聚星荣:靴子过万、口罩上千,加拿大鹅又是在收割“智商税”