对话(VC_Win32)
资源叙述性说明对话框来定义表
格公式:
- 对话框名称 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);
}

程序源代码:

ViewCode
#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);
}
}

回调函数设计(同模态对话框一样)
程序源代码:

ViewCode

#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样式:
Flag Meaning MB_ABORTRETRYIGNORE 三个button: 终止, 重试, 忽略.

MB_OK 一个button: 确定.

MB_OKCANCEL 两个button: 确定,取消.

MB_RETRYCANCEL 两个button: 重试,取消.

MB_YESNO 两个button: 是,否.

MB_YESNOCANCEL 三个button: 是, 否, 取消.

- 用于指定对话框中的图标样式:
Flag Meaning MB_ICONEXCLAMATION
MB_ICONWARNING
MB_ICONINFORMATION
MB_ICONASTERISK
MB_ICONQUESTION 
MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND
- 用于指定默认缺省button:
Flag Meaning MB_DEFBUTTON1 缺省button为第一个button MB_DEFBUTTON2 缺省button为第二个button MB_DEFBUTTON3 缺省button为第三个button MB_DEFBUTTON4 缺省button为第四个button - 用于指定对话框的形态:
Flag Meaning MB_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
对话(VC_Win32)的更多相关文章
- 如何添加商*通新对话快捷链接?不用js代码
我们在使用商务通一般都是在页面中嵌入一段js代码,如果您是js洁癖,是不是在想着如何直接用一张小图加上商*通新对话链接来代替呢?好,那就一起来研究一下吧. 首先,我们打开一个有商*通js弹窗的页面,比 ...
- Android中通过线程实现更新ProgressDialog(对话进度条)
作为开发者我们需要经常站在用户角度考虑问题,比如在应用商城下载软件时,当用户点击下载按钮,则会有下载进度提示页面出现,现在我们通过线程休眠的方式模拟下载进度更新的演示,如图(这里为了截图方便设置对话进 ...
- android studio集成融云 SDK 后在部分机型启动对话时崩溃
最初构建项目是 eclipse, 后来切换到 android studio来做开发. 后来多个用户反馈在android4.4机型上存在启动对话崩溃的问题.但是IOS 版工程从来没有重现. 调试报错信息 ...
- unity对话代码
这个是根据网上unity GUI打字机教程修改的 原教程是JS,我给改成了C#,然后增加了许多功能 这个教程能实现一段文字对话,有打字机显示效果,能写许多对话,能快进对话,总之现在RPG游戏里有的功能 ...
- CTO对话:云端融合下的移动技术创新
云端融合真的来了?快听CTO们怎么讲云端融合下,技术创新怎么破? 快听CTO箴言 云喊了很多年,对于很多普通的技术人,心中有很多疑问:云端融合到底意味着什么,对公司的技术体系有什么影响,未来又会走向 ...
- 与锤子手机HR的对话——创业没有联合创始人,CTO 等高管会把它当做自己的事业吗?
以下对话,是在被之前的锤子HR磨叽2周约面试折腾的火大的心态下进行…… 这个问题发到知乎,被一群人骂啊……cnblogs都是工程师,估计懂期权参加创业的同学多一些,有空前往知乎声援一下……在这里:ht ...
- Dynamic CRM 2013学习笔记(四十)流程3 - 对话(Dialog)用法图解
我们将用对话来实现一个简单的满意度调查,下一个问题依赖于上一个问题.对话是同步的,不同于工作流既可以是同步也可以是异步的:对话可以跟用户互动:对话只能手动开始:对话只支持 .Net Framework ...
- ListView具有多种item布局——实现微信对话列
这篇文章的效果也是大家常见的,各种通讯应用的对话列表都是这种方式,像微信.whatsapp.易信.米聊等.我们这篇文章也权当为回忆,形成简单的笔记.这篇文章参考了2009年Google IO中的< ...
- Html - 对话箭头
对话箭头 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="U ...
随机推荐
- OpenStack_Swift源代码分析——ObjectReplicator源代码分析(2)
1.Replicator运行代码具体分析 上篇问中介绍了启动Replicator的详细过程,以下解说Replicator的运行代码的详细实现,首先看replicate方法: def replicate ...
- Nagios+pnp4nagios+rrdtool 安装配置nagios被监控端NRPE配置(二)
NRPE监控插件基础 NRPE总共由两部分组成: (1).check_nrpe插件,运行在监控主机上. (2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 整个的监控过程 ...
- 大规模集群管理工具Borg
Google的大规模集群管理工具Borg 概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机 ...
- C#之再议数组和集合
1.数组 1.1简单数组 1.2 多维数组 1.3锯齿数组 1.4Array数组 1.5作为参数的数组 1.6枚举 1.7结构 以上部分可参考 http://www.cnblogs.com/ztb12 ...
- 在Button上、下、左、右位置加入图片和文字
转载请注明出处:http://blog.csdn.net/droyon/article/details/37564419 非常多人有如标题所述的需求,并且大多数人採用了自己定义组件攻克了需求,事实上还 ...
- 世纪互联、微软Azure与无穷小微积分
今年9月25日,世纪互联正式开通微软Azure商用服务,有感. 我是世纪互联创业历程的见证人(之中的一个),现在看到世纪互联推出微软Azure公有云的商用服务,心 ...
- Objective-C类的使用
Objective-C教程的例题: // // main.m // test // // Created by liwei on 14-10-28. // Copyright (c) 2014年 li ...
- 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keywo ...
- Windows Phone开发(15):资源
原文:Windows Phone开发(15):资源 活字印刷术是我国"四大发明"之一,毕昇在发明活字印刷术之后,他很快发现一个问题,随着要印刷资料的不断增加,要用到的汉字数目越来越 ...
- 构建轻量级的Table View注意事项[UIKit]
參考文章来自objcio站点 一.使用ChildViewController 将Table ViewController作为Child View Controller加入到其它View Control ...