一个非模态对话框,当作主窗体的创建:(符合窗口创建的步骤)

第一步:补充一个模板,在RC脚本文件文件中,这是和普通窗口不一样的地方。这利益于编译器和链接器的支持呀。

 #include "windows.h"

  DIALOG , , ,   //这里如果用IDD_MYDLG替代121的话,不能用MAKEINTRESOURCE转变成字符串
STYLE WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "DialogCls" //表示本模板所属于的自定义的类名,会在定义窗口类WNDCLASS时使用
CAPTION "我的对话框"
{
} MyIcon ICON "1.ico"//这个图标,MyIcon能标识图标,

第二步:使用一个头文件,可以任意命名。如resource.h,加入到工程中,作用是用于上面的图标,MyIcon

 #include "windows.h"

 #define IDD_MYDLG 121  //注意和RC文件中的对应,这里的IDD_MYDLG能表示对话框资源了
#define IDI_
case WM_CREATE:
{
HWND hBtn= CreateWindow("button","btn",WS_CHILD|WS_VISIBLE,,,,,hwnd,NULL,g_hInstance,NULL);
hDlg = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_D1),hwnd,(DLGPROC)GoToProc);
if(hDlg==NULL)
MessageBox(hwnd,"","",MB_OK);
break;
} ICON1 //同理,IDI_ICON1能表示 图标资源了 //使用标识的作用是为了比字符串少占用空间,但在代码中要使用MAKEINTRESOURCE宏把资源ID标识转变为字符串标识

第三步:创建和注册窗口类,创建窗口,显示窗口,消息循环

 #include "windows.h"
#include "resource.h" LRESULT WINAPI WndProc(
HWND hDlg,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
static char * szClassName="DialogClass";
WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = ;
wndclass.cbWndExtra = DLGWINDOWEXTRA ; // 这里扩展窗口,指明是对话框窗口 见MSDN
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));//LoadIcon (hInstance, "MyIcon") MyIcon作为图标的字符串标识时可以
//这样用 ; //注意使用的是本程序(hInstance)的图标资源,资源名字是MyIcon
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + ) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "DialogCls"; //类名一个要使用
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("failed"),TEXT("return"),MB_YESNO);
return ;
}
HWND hwnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MYDLG),NULL,);//这里模板的名字也可以用 只是用的是字符串 ShowWindow(hwnd,nCmdShow);
MSG msg;
while (GetMessage (&msg, NULL, , ))
{
TranslateMessage (&msg);
DispatchMessage (&msg) ;
}
return ;
} LRESULT WINAPI WndProc(
HWND hDlg,
UINT Msg,
WPARAM wParam,
LPARAM lParam
)
{
switch(Msg)
{
case WM_SYSCOMMAND:
switch(wParam)
{
case SC_CLOSE: PostQuitMessage();return true;
case SC_MAXIMIZE:break;
default :break;
}
break;
}
return false;//DefDlgProc(hDlg,Msg,wParam,lParam);//不可以使用默认的对话框处理过程,如果对某个消息处理了就返回true,否则就返回false.
}

模态对话框:

需要知道的知识:DialogBox函数的作用如下--

载入模板资源,省去了对一般资源的LoadResource的操作。

指定窗口过程。显示窗口,活动了ShowWindow的操作,无论在模板中是不是指定了style WS_HIDE风格。用窗口过程来接收消息,但是没有看到GetMessage死循环,难道也由此函数完成了?就当是在DialogBox内部调用了GetMessage循环吧。

“模态”有点你是MessageBox,对话框不消除,主窗体不能接收消息的。

函数EndDialog来销毁窗口,也会让系统来结束与此窗口有关联的窗口过程(一般的窗口过程是PostQuitMessage来结束的)。第二个参数是DialogBox要返回的数值。

BOOL EndDialog(  HWND hDlg,        // handle to dialog box
INT_PTR nResult // value to return); INT_PTR CALLBACK ModalDlgProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
); DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_MODAL),hDlg,(DLGPROC)ModalDlgProc);//IDD_MODAL模板编号,在.h
//中定义 INT_PTR CALLBACK ModalDlgProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_INITDIALOG:
break;
case WM_SYSCOMMAND:
if(wParam==SC_CLOSE)
EndDialog(hwndDlg,wParam);//wParam是DialogBox的返回值。
return true;//不再调用 默认的DefDlgPro()过程了
break;
default :
break;
}
return false;//以后消息的处理由DefDlgProc来处理
}

3、模态对话框(不作为主窗体)

脚本代码如下:

 DIALOG , , ,   //这里如果用IDD_MYDLG替代121的话,不能用MAKEINTRESOURCE转变成字符串
STYLE WS_OVERLAPPEDWINDOW|WS_SYSMENU //CLASS “aaa” 定义于一个类是不行的,否则界面不能出现,只有当对话框当主窗体时才需要 CAPTION "杨杨" {
PUSHBUTTON "dd", ,,,,
}

代码如下:

    case WM_CREATE:
{
HWND hBtn= CreateWindow("button","btn",WS_CHILD|WS_VISIBLE,,,,,hwnd,NULL,g_hInstance,NULL);
hDlg = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_D1),hwnd,(DLGPROC)GoToProc);
if(hDlg==NULL)
MessageBox(hwnd,"","",MB_OK);
break;
} case WM_COMMAND:
ShowWindow(hDlg,SW_SHOW);
break;

点击按钮时出非模态对话框。

	case WM_CLOSE:
MessageBox(hwndDlg,"","close",MB_OK);
ShowWindow(hwndDlg,SW_HIDE);
break;
case WM_DESTROY:
MessageBox(hwndDlg,"","Destroy",MB_OK);
break;
点击对话框的窗体关闭按钮时,能得到WM_CLOSE消息,但不会销毁(得不到WM_DESTROY消息),只有当主窗体销毁时才会销毁
对话框。可以人为销毁。

VC----对话框Dialog的更多相关文章

  1. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...

  2. 转 Android 对话框(Dialog)大全 建立你自己的对话框

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  3. 95秀-自定义对话框 dialog 合集

    普通的确认对话框 NormalDialog.java import android.app.Dialog; import android.content.Context; import android ...

  4. Android 常用对话框Dialog封装

    Android 6种 常用对话框Dialog封装 包括: 消息对话框.警示(含确认.取消)对话框.单选对话框. 复选对话框.列表对话框.自定义视图(含确认.取消)对话框 分别如下图所示:       ...

  5. Android项目实战(三十二):圆角对话框Dialog

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角 ...

  6. VC对话框使用OnEraseBkgnd函数位图背景并透明

    1.使用OnEraseBkgnd函数实现对话框位图背景 BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC) { CRect rect; GetC ...

  7. Android 对话框(Dialog)大全

    转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...

  8. Android 对话框(Dialog)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  9. Android 对话框(Dialog) 及 自己定义Dialog

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  10. (转载)Android项目实战(三十二):圆角对话框Dialog

    Android项目实战(三十二):圆角对话框Dialog   前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...

随机推荐

  1. Java垃圾收集算法介绍

    垃圾回收器GC(Garbage Collection) 一.引用计数算法(Reference Counting) 介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1:当引用失效时,计数器 ...

  2. 【BZOJ 2594】【WC 2006】水管局长数据加强版

    离线后倒过来做,这样就跟魔法森林差不多了,缩边为点就可以统计边的权值了. 1A真是爽,可惜常数炸上了天,这是滥用stl容器和无脑link,cut的后果 #include<map> #inc ...

  3. Boundary Representations

    用所有属于boundary的点来表示boundary, 有两个主要的缺点, 一是数据量大, 二是对噪声敏感. 用boundary的一些representation而非精确的boundary本身来表示b ...

  4. JS搞基指南----延迟对象入门提高资料整理

    JavaScript的Deferred是比较高大上的东西,  主要的应用还是主ajax的应用,  因为JS和nodeJS这几年的普及,  前端的代码越来越多,  各种回调套回调再套回调实在太让人崩溃, ...

  5. AOP 学习笔记

    代理是一个设计模式,提供了对目标对象另外的访问方式:即通过代理访问目标对象. 好处:可以在目标对象实现的基础上,增强额外的功能操作. Cglib 代理,也叫作 子类代理. JDK的动态代理有一个限制, ...

  6. Activiti 学习笔记记录(二)

    上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...

  7. Java类加载器总结

    1.类的加载过程   JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示: 1) 装载:查找并加载类的二进制数据: 2)链 ...

  8. MAC下Eclipse的常用快捷键

    整理Eclipse常用快捷键 开发环境切换到Mac下后原来Window下的快捷键很大一部分是不相容的,习惯了快捷键的生活忽然哪天快捷键不起作用了,跟着的就是开发效率明显降低,频繁录入错误的快捷键让Ec ...

  9. 1.值得推荐的C/C++框架和库 (转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  10. js-JavaScript高级程序设计学习笔记13

    第十五章 canvas绘图 1.WebGL是针对Canvas的3D上下文. 2.类型化数组 WebGL涉及的复杂计算需要提前知道数值的精度,而标准的JS数值无法满足需求.因此WebGL引入了一个概念, ...