中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂]

您所在的位置:网站首页 欧洲人学外语 中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂]

中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂]

#中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂]| 来源: 网络整理| 查看: 265

中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂] 思创斯忠实用户-ss • 2023年3月7日 17:15 • 未分类

中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂]1、DialogBox函数功能:该宏根据对话框模板资源创建一个模态的对话框。DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制。该宏使用DialogBoxParam函数。函数原型:intDialogBox(HINSTANCEhlnstance,LPCTSTRIpTemplate,HWNDhWndParent,DLGPROCIpDialogFunc);参数:hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。

大家好,我是你的好朋友思创斯。今天说一说中年人学C语言Windows程序设计,30 DialogBox控件[通俗易懂],希望您对编程的造诣更进一步.

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3