对话(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);
}
程序源代码:
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);
}
}
回调函数设计(同模态对话框一样)
程序源代码:
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样式:
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_ICONWARNINGMB_ICONINFORMATION
MB_ICONASTERISKMB_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 ...
随机推荐
- Learning Cocos2d-x for WP8(7)——让Sprite动起来
原文:Learning Cocos2d-x for WP8(7)--让Sprite动起来 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(7)——让Sprite动起来 本讲将 ...
- 可删除超炫&多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990).谢谢支持! 实例Demo下载地址在本文最后 简介 这个Demo主要是使用了cardsui ...
- Unity3D入门(二):碰撞检測
碰撞器由来 1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种 ...
- jquery再体验
$(function(){ var obj = $("div[id^='channel_'][id$='_left']"); var val = obj.html(); var i ...
- 简单工厂 VS 工厂方法 VS 抽象工厂
说到设计模式.自然少不了简单工厂模式.工厂方法和抽象工厂这三姐妹. 它们之间可谓是各有所长,术业专攻啊!这篇博客来简单的梳理一下三者之间的关系. 那么工厂又是什么意思呢?结合三者的特点,我觉得能够这样 ...
- 測试之路3——对照XML文件2
距离上一篇对照xml文件隔了非常久,并不代表一直做了那么久. 事实上上一次对照xml文件一直出错,事实上我忽略了一个非常easy的问题:我从根文件夹下得到的全部孩子,是这个根下的,而xml文件的组织形 ...
- Cocos2d-x 3.0 红孩儿私人义务教育 - 第一章 熟人Cocos2d-x 3.0project
Cocos2d-x 3.0 红孩儿私家必修 前言: 时光飞逝,每每看到博客上的回复和微博上的鼓舞,总会认为亏欠大家点什么.停下来太久.总是认为不太对劲,哈哈,时习之吧,望以此勉励大家. 红孩儿C ...
- Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
1.下载源码:http://www.igniterealtime.org/downloads/source.jsp 2.把源码解压出的openfire_src目录放至eclipse workplace ...
- 使用Xamarin在Visual Studio中开发Android应用
原文:使用Xamarin在Visual Studio中开发Android应用 本文使用的环境是Windows 8 Visual Studio 2012.2 1.下载Xamarin http://xam ...
- HDU 1201
18岁生日 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...