对话(VC

it2025-08-17  5

资源叙述性说明对话框来定义表

格公式:

对话框名称 DIALOG[负载特性] X,Y,Width,Height[设置选项] {   对话框控件定义; }

说明:

对话框名称:   标识对话框资源,可为一个字符串也能够为1~65535之间的不论什么数 DIALOG:   keyword 加载特性:   对话框资源的加载特性选项与菜单资源同样 X,Y,Width,Height: X,Y:  为对话框左上角坐标 Width,Height:  为宽与高 设置选项: 经常使用的有CAPTION(标题)和STYLE(样式) 对话框的样式选项决定了对话框资源外形特点,windows还提供了一些对话框特点样式: DS_SDLOOK:  使用三维边框 DS_CENTERMOUSE:   鼠标点作为对话框中心 DS_FIXEDSYS:  使用SYSTEM_FIXED字体 DS_CENTER:   对话框居中 DS_MODALFRAME:   使用细实线边框 DS_SETFOREGROUND:   置对话框前台 DS_SYSMODAL:   系统模态对话框 对于窗体对话框样式,它还包括窗体样式的选项,常常把它的样式和窗体样式组合起来一起用(比如 DS_MODALFRAME | WS_POPUP | WS_CAPTION) 控件定义 CHECKBOX:   复选框 LISTBOX:   列表框 COMBOBOX:   组合框 LTEXT:   文本右对齐的静态控件 CTEXT:   文本居中的静态控件 PUSHBUTTON:   button DEFPUSHBUTTON:   默认button RADIOBUTTON:   单选button EDIT:   编辑框 RTEXT:   文本右对齐的静态控件 GROUPBOX:   组框 SCROLLBAR:   滚动栏 ICON:   图标

 

模态对话框

步骤:

创建模态对话框:  DialogBox对话框回调函数设计结束时销毁对话框:  EndDialog

流程图例如以下图所看到的:

回调函数设计模型:

//设计对话框回调函数 //回调函数模型 BOOL CALLBACK DialogProc( HWND hwndDlg, // handle to dialog box该对话框句柄 UINT uMsg, // message WPARAM wParam,// first message parameter LPARAM lParam // second message parameter ) { switch(uMsg) {   case WM_INITDIALOG:   ……;   break;   case WM_COMMAND   switch(LOWORD(wParam))   {   case ……:   …… ;   break;   case ……:   …… ;   break;   …… ;   }   break; } Return 0; }

与窗体的差别:

          窗体(Windows)              对话框(Dialog)                函数返回值    返回LRESULT值              返回BOOL消息处理                          不处理WM_CREAT,WM_DESTORY,WM_PAINT不处理消息的处理 调用DefWindowProc处理程序不处理的消息 对话框直接返回FALSE(return 0)

对话框处理的主要消息:

WM_INITDIALOG消息 对话框初始化时候做的一些处理操作 WM_COMMAND消息 响应对话框上得控件的一些处理操作

代码例子:

对话框 .rc 资源:

IDD_DIALOG1 DIALOGEX 0, 0, 187, 96 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "对话框" FONT 10, "System", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "确定",IDOK,77,75,50,14 PUSHBUTTON "取消",IDCANCEL,130,75,50,14 EDITTEXT IDC_EDIT1,7,22,173,30,ES_AUTOHSCROLL END

创建对话框:

//创建对话框 DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,dialogFunc); 回调函数设计: switch(msg) { //初始对话框 case WM_INITDIALOG: break; //控件处理 case WM_COMMAND: switch(LOWORD(wParam)) { //按下确定button处理 case IDOK: EndDialog(hwndDlg,1); return 0; break; //按下取消button处理 case IDCANCEL: EndDialog(hwndDlg,1); return 0; break; } break; //关闭button处理 case WM_CLOSE: EndDialog(hwndDlg,1); }

程序源代码:

View Code #include<windows.h> #include"resource.h" BOOL CALLBACK dialogFunc( HWND hwndDlg, // handle to dialog box UINT msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window ) { DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,dialogFunc); return 0; } BOOL CALLBACK dialogFunc( HWND hwndDlg, // handle to dialog box UINT msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(msg) { //初始对话框 case WM_INITDIALOG: break; //控件处理 case WM_COMMAND: switch(LOWORD(wParam)) { //按下确定button处理 case IDOK: EndDialog(hwndDlg,1); return 0; break; //按下取消button处理 case IDCANCEL: EndDialog(hwndDlg,1); return 0; break; } break; //关闭button处理 case WM_CLOSE: EndDialog(hwndDlg,1); } return 0; }

执行结果:


 

非模态对话框

步骤:

创建对话框 CreateDialog (可是对话框并不会显示)对话框回调函数设计显示与更新对话框窗体(显示对话框窗体 ShowWindow,更新对话框窗体 UpdateWindow)更改父窗体的消息循环(在消息转换 TranslateMessage 前,先把消息进行推断是否是对话框消息 IsDialogMessage)结束时销毁对话框 DestroyWindow

流程图例如以下:

回调函数设计与模态回调函数设计类似

模态对话框和非模态对话框的差别:

模态对话框创建后一定要在用户关闭对话框后,其父窗体才干响应用户操作否则父窗体便无法响应不论什么用户操作.非模态对话框则是创建完后其父窗体不须要像模态窗体那样等到对话框关闭才干响应用户操作,一样能够在对话框未关闭前响应用户操作

代码演示样例:

对话框 .rc 资源:

IDD_DIALOG1 DIALOGEX 0, 0, 187, 96 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "对话框" FONT 10, "System", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "确定",IDOK,77,75,50,14 PUSHBUTTON "取消",IDCANCEL,130,75,50,14 EDITTEXT IDC_EDIT1,7,22,173,30,ES_AUTOHSCROLL END

 创建对话框:

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)dialogFunc);

 显示更新对话框:

//显示对话框 ShowWindow(hdlg,nCmdShow); //更新对话框 UpdateWindow(hdlg);

更改父窗体消息循环:

while(GetMessage(&msg,NULL,0,0)) { //推断是否是为对话框消息 if(!IsDialogMessage(hdlg,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }

回调函数设计(同模态对话框一样)

程序源代码:

View Code #include<windows.h> #include"resource.h" LRESULT CALLBACK textprom( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); BOOL CALLBACK dialogFunc( HWND hwndDlg, // handle to dialog box UINT msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window ) { WNDCLASS wndclass; MSG msg; HWND hwnd,hdlg; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hIcon=LoadIcon(NULL,IDI_ERROR); wndclass.hInstance=hInstance; wndclass.lpfnWndProc=textprom; wndclass.lpszClassName="text"; wndclass.lpszMenuName=NULL; wndclass.style=CS_HREDRAW | CS_VREDRAW; if(!RegisterClass(&wndclass)) { MessageBox(NULL,"create windows error!","error",MB_OK | MB_ICONSTOP); } hwnd = CreateWindow("text","hellow world",WS_DLGFRAME | WS_MINIMIZEBOX | WS_SYSMENU,0,0, 500,300,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); //创建对话框 hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)dialogFunc); //显示更新对话框 ShowWindow(hdlg,nCmdShow); UpdateWindow(hdlg); while(GetMessage(&msg,NULL,0,0)) { if(!IsDialogMessage(hdlg,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } LRESULT CALLBACK textprom( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(uMsg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } } BOOL CALLBACK dialogFunc( HWND hwndDlg, // handle to dialog box UINT msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(msg) { case WM_INITDIALOG: break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: DestroyWindow(hwndDlg); return 0; case IDCANCEL: DestroyWindow(hwndDlg); return 0; } break; case WM_CLOSE: DestroyWindow(hwndDlg); } return 0; }

执行结果:


 

MessageBox

函数说明:  Windows消息对话框是模态对话框的一种特殊形式,应用程序能够通过调用函数MessageBox来快捷生成一些简单又经常使用的Windows消息框.

函数原型:

int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box );

uType说明:

指定一组位标志,来确定对话框的内容和行为.

用于指定对话框的button样式: FlagMeaningMB_ABORTRETRYIGNORE三个button: 终止, 重试, 忽略.MB_OK一个button: 确定.MB_OKCANCEL两个button: 确定,取消.MB_RETRYCANCEL两个button: 重试,取消.MB_YESNO两个button: 是,否.MB_YESNOCANCEL三个button: 是, 否, 取消.用于指定对话框中的图标样式: FlagMeaningMB_ICONEXCLAMATION MB_ICONWARNINGMB_ICONINFORMATION MB_ICONASTERISKMB_ICONQUESTIONMB_ICONSTOP MB_ICONERROR MB_ICONHAND用于指定默认缺省button: FlagMeaningMB_DEFBUTTON1缺省button为第一个buttonMB_DEFBUTTON2缺省button为第二个buttonMB_DEFBUTTON3缺省button为第三个buttonMB_DEFBUTTON4缺省button为第四个button用于指定对话框的形态: FlagMeaningMB_APPLMODAL引用程序对话框(创建的是非模态的对话框)MB_SYSTEMMODAL系统对话框(对话框会保持于窗口 z_order 的顶层)MB_TASKMODAL任务对话框(创建的是模态的对话框)

代码例子:

创建具有是否button和问好图标的消息框,而且消息框为模态对话框:

MessageBox(NULL,"hello","test",MB_YESNO|MB_ICONQUESTION|MB_TASKMODAL); 

程序结果:

转自:http://www.cnblogs.com/kzang/archive/2012/11/01/2750213.html



转载于:https://www.cnblogs.com/bhlsheji/p/4635299.html

最新回复(0)