对话框(VC_Win32)
资源描述表中对话框定义
格式:
- 对话框名 DIALOG[载入特性] X,Y,Width,Height[设置选项]
{
对话框控件定义;
}
说明:
- 对话框名称: 标识对话框资源,可为一个字符串也可以为1~65535之间的任何数
- DIALOG: 关键字
- 载入特性: 对话框资源的载入特性选项与菜单资源相同
- 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: 按钮
- DEFPUSHBUTTON: 默认按钮
- RADIOBUTTON: 单选按钮
- 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))
{
//按下确定按钮处理
case IDOK:
EndDialog(hwndDlg,1);
return 0;
break;
//按下取消按钮处理
case IDCANCEL:
EndDialog(hwndDlg,1);
return 0;
break;
}
break;
//关闭按钮处理
case WM_CLOSE:
EndDialog(hwndDlg,1);
}
程序源码:
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))
{
//按下确定按钮处理
case IDOK:
EndDialog(hwndDlg,1);
return 0;
break;
//按下取消按钮处理
case IDCANCEL:
EndDialog(hwndDlg,1);
return 0;
break;
}
break;
//关闭按钮处理
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);
}
}
回调函数设计(同模态对话框一样)
程序源码:
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说明:
指定一组位标志,来确定对话框的内容和行为.
- 用于指定对话框的按钮样式:
Flag Meaning MB_ABORTRETRYIGNORE 三个按钮: 终止, 重试, 忽略.
MB_OK 一个按钮: 确定.
MB_OKCANCEL 两个按钮: 确定,取消.
MB_RETRYCANCEL 两个按钮: 重试,取消.
MB_YESNO 两个按钮: 是,否.
MB_YESNOCANCEL 三个按钮: 是, 否, 取消.
- 用于指定对话框中的图标样式:
Flag Meaning MB_ICONEXCLAMATION
MB_ICONWARNINGMB_ICONINFORMATION
MB_ICONASTERISKMB_ICONQUESTION MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND - 用于指定默认缺省按钮:
Flag Meaning MB_DEFBUTTON1 缺省按钮为第一个按钮 MB_DEFBUTTON2 缺省按钮为第二个按钮 MB_DEFBUTTON3 缺省按钮为第三个按钮 MB_DEFBUTTON4 缺省按钮为第四个按钮 - 用于指定对话框的形态:
Flag Meaning MB_APPLMODAL 引用程序对话框(创建的是非模态的对话框) MB_SYSTEMMODAL 系统对话框(对话框会保持于窗体 z_order 的顶层) MB_TASKMODAL 任务对话框(创建的是模态的对话框)
代码样例:
创建具有是否按钮和问好图标的消息框,并且消息框为模态对话框:
MessageBox(NULL,"hello","test",MB_YESNO|MB_ICONQUESTION|MB_TASKMODAL);
程序结果:
转自:http://www.cnblogs.com/kzang/archive/2012/11/01/2750213.html
对话框(VC_Win32)的更多相关文章
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...
- jQuery遮罩层登录对话框
用户登录是许多网站必备的功能.有一种方式就是不管在网站的哪个页面,点击登录按钮就会弹出一个遮罩层,显示用户登录的对话框.这用方式比较灵活方便.而现在扫描二维码登录的方式也是很常见,例如QQ.微信.百度 ...
- Android系统默认对话框添加图片
开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- 使用CSS3的box-shadow实现双透明遮罩层对话框
box-shadow介绍 在我之前的一篇文章<从天猫和支付宝身上学习opcity与rgba>中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba.他们需要分别依赖于不同 ...
- 10.JAVA之GUI编程弹出对话框Dialog
在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...
- C#WebBrowrse拦截下载对话框
为了实现这个功能,可算是折腾不少时间,网上搜素出来的结果基本都是如何屏蔽警告对话框.后来请教一个技术大牛(程序员之窗的主要作者Starts_2000),他用C++实现了,他尝试了下C#也没有解决,就忙 ...
- 实现对gridview删除行时弹出确认对话框的一种简单方法
在VS2008提供的GridView中我们可以直接添加一个CommandField删除列:<asp:CommandField ShowDeleteButton="True" ...
- 炫酷的jQuery对话框插gDialog
js有alert,prompt和confirm对话框,不过不是很美体验也不是很好,用jQuery也能实现, 体验效果:http://hovertree.com/texiao/jquery/34/ 代码 ...
随机推荐
- 手动开启ARC
手动开启某些文件的ARC,在Compiler Flags一列加上-fobjc-arc就表示开启这个.m文件的ARC 禁止某些文件的ARC,在Compiler Flags一列加上-fno-objc-ar ...
- CS231n 斯坦福深度视觉识别课 学习笔记(完结)
课程地址 第1章 CS231n课程介绍 ---1.1 计算机视觉概述 这门课的主要内容是计算机视觉.它是一门需要涉及很多其他科目知识的学科. 视觉数据占据了互联网的绝大多数,但是它们很难利用. --- ...
- 为什么在开发中大部分的时候都在用session而Application基本上都不去使用?
问题描述 为什么在开发中大部分的时候都在用session而Application基本上都不去使用? 为什么在开发中大部分的时候都在用session而Application基本上都不去使用?为什么在开发 ...
- PyCharm Debug调试程序
步骤一:在代码区要进行调试的代码行左侧单击鼠标左键,添加调试断点符号 步骤二:右键单击源文件或代码区内部,弹出菜单,选择[Debug ***] 或在右上角工具栏区单击[debug]按钮,快捷键[shi ...
- magento首页点击任何产品都出现404错误的问题方法
很简单,只要在其他项目上的根目录上复制一个.htaccess文件到项目跟目录下就可以 了,其实就是是设置伪静态:
- CodeForces - 325E:The Red Button (哈密尔顿 转 欧拉回路)
Piegirl found the red button. You have one last chance to change the inevitable end. The circuit und ...
- Try .NET
微软新出的好东西——Try .NET,该平台可以让开发者直接在线上编写并运行 .NET 代码. 没啥好说的进去就完事了 平台链接:https://try.dot.net/?fromGist=df448 ...
- 一键分享到各个SNS插件
使用百度分享:http://share.baidu.com/code/advance#toid 例: HTML: <div class="bdsharebuttonbox" ...
- UVa 10410 树重建
Tree Reconstruction Problem Description You have just finished a compiler design homework question w ...
- 利用python 下paramiko模块无密码登录
利用python 下paramiko模块无密码登录 上次我个大家介绍了利用paramiko这个模块,可以模拟ssh登陆远程服务器,并且可以返回执行的命令结果,这次给大家介绍下如何利用已经建立的密钥 ...